国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C語言】51單片機超聲波測距(實作 非仿真)

這篇具有很好參考價值的文章主要介紹了【C語言】51單片機超聲波測距(實作 非仿真)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、設計目標

? ? 使用51單片機和超聲波測距模塊實現(xiàn)超聲波測距。

二、主要功能

? ? 超聲波測距。

三、硬件部分

? ? 51單片機,超聲波測距模塊,導線,動態(tài)數(shù)碼管,74HC245芯片,74HC138芯片。

圖1 ?????????????????????

【C語言】51單片機超聲波測距(實作 非仿真)

圖2

?文章來源地址http://www.zghlxwxcb.cn/news/detail-489124.html

【C語言】51單片機超聲波測距(實作 非仿真)

圖3

?

【C語言】51單片機超聲波測距(實作 非仿真)

圖4

【C語言】51單片機超聲波測距(實作 非仿真)

? ? 圖1為超聲波測距模塊的內部電路圖。

? ? 圖2為超聲波測距的輸出和接收聲波的時序邏輯圖。

? ? 圖3、圖4為動態(tài)數(shù)碼管的控制。使用51單片機的P0_0、P0_1、P0_2端連接74HC138芯片的A、B、C引腳,從而控制哪一個數(shù)碼管被點亮。

?

四、程序框圖

【C語言】51單片機超聲波測距(實作 非仿真)

?

五、代碼說明

? ? 代碼由延時函數(shù)、定時器函數(shù)、算距離函數(shù)、測時間函數(shù)、數(shù)碼管控制函數(shù)、數(shù)碼管顯示結果函數(shù)、主函數(shù)組成

? ? 延時函數(shù)和數(shù)碼管控制函數(shù)配合,負責動態(tài)數(shù)碼管顯示的硬件控制。

? ? 定時器函數(shù)用于測距時定時。

? ? 測時間函數(shù)計算超聲波發(fā)出到接收的時間。

? ? 算距離函數(shù)用于對測量的時間進行計算得出距離。

? ? 數(shù)碼管顯示結果函數(shù)用于對測量出的結果進行顯示。

? ? 數(shù)碼管控制函數(shù)用來控制動態(tài)數(shù)碼管點亮第幾位和顯示的數(shù)字。

1.主函數(shù)

? ? 主函數(shù)對函數(shù)進行調用,首先調用測時間函數(shù)得出超聲波發(fā)出到接收的時間。然后調用算距離函數(shù)將時間轉化為距離(單位:厘米)。最后調用數(shù)碼管顯示結果函數(shù)顯示測量的結果。

/******************************************主函數(shù)***************************************/
void main()
{
 unsigned int time = 0;
 float distance;

 while(1)
 {  
  time = RunOnce();//傳感器接收到高電平的時間
  distance = GetDistance(time);
  xianshi(distance);
 }
}

?

2.子函數(shù)1

? ? 數(shù)碼管控制函數(shù)。使用switch()功能,根據硬件中的表格,提前將點亮每個動態(tài)數(shù)碼管所需的信號定義好。Switch()可以采集輸入動態(tài)數(shù)碼管函數(shù)的值,其中前邊一位是點亮第幾位動態(tài)數(shù)碼管。另外再定義一個數(shù)字數(shù)組,數(shù)組的內容為單個動態(tài)數(shù)碼管顯示0-9即全滅時所需的P3端輸出值。

unsigned char shuzi[]={0x3f/*0*/,0x06/*1*/,0x5b/*2*/,0x4f/*3*/,0x66/*4*/,0x6d/*5*/,0x7d/*6*/,0x07/*7*/,0x7f/*8*/,0x6f/*9*/};//顯示的數(shù)字(num)的數(shù)組

void shumaguan(unsigned char wei,num)//第幾位(wei)顯示
{
 switch(wei)
 {
  case 1:P0_2=0;P0_1=0;P0_0=0;break;
  case 2:P0_2=0;P0_1=0;P0_0=1;break;
  case 3:P0_2=0;P0_1=1;P0_0=0;break;
  case 4:P0_2=0;P0_1=1;P0_0=1;break;
  case 5:P0_2=1;P0_1=0;P0_0=0;break;
  case 6:P0_2=1;P0_1=0;P0_0=1;break;
  case 7:P0_2=1;P0_1=1;P0_0=0;break;
  case 8:P0_2=1;P0_1=1;P0_0=1;break;
 }
 P3=shuzi[num];
 delay(1);
}

?

3.子函數(shù)2

? ? 延時函數(shù)。和數(shù)碼管控制函數(shù)配合,負責動態(tài)數(shù)碼管顯示的硬件控制。

/******************************************延時函數(shù)***************************************/
void delay(unsigned int xms)//延時x毫秒 
{
  unsigned int i,j;
  for(i=xms;i>0;i--)
    for(j=112;j>0;j--);
return;
}

?

4.子函數(shù)3

????定時器函數(shù)。因輸出超聲波時需要10us的高電平,因此定義該函數(shù)。同時也可以用于計算發(fā)出到接收的時間。

/**********************************定時器函數(shù) 延時10us*************************************/
void Delay10us()
{
 TMOD |= 0x01;//16位定時器/計數(shù)器
 TH0 = 0xFF;//賦初值
 TL0 = 0xF6;//賦初值
 TR0 = 1;//啟動

 while(!TF0);//溢出

 TF0 = 0;//清溢出
}

?

5.子函數(shù)4

? ? 算距離函數(shù)。用于將測出的時間轉化為距離。

/******************************************算距離函數(shù)***************************************/
float GetDistance(unsigned int time)  
{
 float distance;
 distance = (float)time * 0.017;//cm	   距離=高電平時間×聲速/2        0.017cm/us
 
 return distance;//將距離返回主函數(shù)
}

?

6.子函數(shù)5

? ? 測時間函數(shù)。與定時器函數(shù)配合實現(xiàn)超聲波的發(fā)出與時間測量。

/******************************************測時間函數(shù)***************************************/
unsigned int RunOnce()  
{
 unsigned int time;

/******************發(fā)送10us高電平信號*************/
 Trig = 0;
 Trig = 1;
 Delay10us();
 Trig = 0;
/**************等待高電平信號接收*****************/
 while(!Echo);
/*********T0清0重新計數(shù)(高電平持續(xù)時間)*********/
 TH0 = 0;
 TL0 = 0;
 TR0 = 1;
/*********等待高電平信號接收結束******************/
 while(Echo);
/*******************關閉T0計數(shù)********************/
 TR0 = 0;
/**********高電平時間賦值,單位us*****************/
 time = TH0*256 + TL0; 
 TH0 = 0;
 TL0 = 0;

 return time;
}

?

7.子函數(shù)6

? ? 動態(tài)數(shù)碼管顯示結果函數(shù)。用于控制動態(tài)數(shù)碼管顯示測量出的距離。

/**************************************動態(tài)數(shù)碼管顯示結果***********************************/
void xianshi(int d)
{
  int k=8,m;
  while(d!=0)
  {
    m=(d%10);//在數(shù)碼管上顯示個位,從后往前顯示
    shumaguan(k,m);
	k--;//數(shù)碼管向前移位
	d=d/10;
  }
}

?

六、系統(tǒng)測試??

?

測最近有效距離,為3cm。【C語言】51單片機超聲波測距(實作 非仿真)

?測最遠有效距離,為560cm。

【C語言】51單片機超聲波測距(實作 非仿真)

?

?七、源代碼

#include <REGX51.H>
#include<intrins.h>

sbit Trig = P1^0;
sbit Echo = P1^1;
/******************************************延時函數(shù)***************************************/
void delay(unsigned int xms)//延時x毫秒 
{
  unsigned int i,j;
  for(i=xms;i>0;i--)
    for(j=112;j>0;j--);
return;
}
/******************************************數(shù)碼管控制函數(shù)***************************************/
unsigned char shuzi[]={0x3f/*0*/,0x06/*1*/,0x5b/*2*/,0x4f/*3*/,0x66/*4*/,0x6d/*5*/,0x7d/*6*/,0x07/*7*/,0x7f/*8*/,0x6f/*9*/};//顯示的數(shù)字(num)的數(shù)組

void shumaguan(unsigned char wei,num)//第幾位(wei)顯示
{
 switch(wei)
 {
  case 1:P0_2=0;P0_1=0;P0_0=0;break;
  case 2:P0_2=0;P0_1=0;P0_0=1;break;
  case 3:P0_2=0;P0_1=1;P0_0=0;break;
  case 4:P0_2=0;P0_1=1;P0_0=1;break;
  case 5:P0_2=1;P0_1=0;P0_0=0;break;
  case 6:P0_2=1;P0_1=0;P0_0=1;break;
  case 7:P0_2=1;P0_1=1;P0_0=0;break;
  case 8:P0_2=1;P0_1=1;P0_0=1;break;
 }
 P3=shuzi[num];
 delay(1);
}
/**********************************定時器函數(shù) 延時10us*************************************/
void Delay10us()
{
 TMOD |= 0x01;//16位定時器/計數(shù)器
 TH0 = 0xFF;//賦初值
 TL0 = 0xF6;//賦初值
 TR0 = 1;//啟動

 while(!TF0);//溢出

 TF0 = 0;//清溢出
}
/******************************************算距離函數(shù)***************************************/
float GetDistance(unsigned int time)  
{
 float distance;
 distance = (float)time * 0.017;//cm	   距離=高電平時間×聲速/2        0.017cm/us
 
 return distance;//將距離返回主函數(shù)
}
/******************************************測時間函數(shù)***************************************/
unsigned int RunOnce()  
{
 unsigned int time;

/******************發(fā)送10us高電平信號*************/
 Trig = 0;
 Trig = 1;
 Delay10us();
 Trig = 0;
/**************等待高電平信號接收*****************/
 while(!Echo);
/*********T0清0重新計數(shù)(高電平持續(xù)時間)*********/
 TH0 = 0;
 TL0 = 0;
 TR0 = 1;
/*********等待高電平信號接收結束******************/
 while(Echo);
/*******************關閉T0計數(shù)********************/
 TR0 = 0;
/**********高電平時間賦值,單位us*****************/
 time = TH0*256 + TL0; 
 TH0 = 0;
 TL0 = 0;

 return time;
}
/**************************************動態(tài)數(shù)碼管顯示結果***********************************/
void xianshi(int d)
{
  int k=8,m;
  while(d!=0)
  {
    m=(d%10);//在數(shù)碼管上顯示個位,從后往前顯示
    shumaguan(k,m);
	k--;//數(shù)碼管向前移位
	d=d/10;
  }
}

/******************************************主函數(shù)***************************************/
void main()
{
 unsigned int time = 0;
 float distance;

 while(1)
 {  
  time = RunOnce();//傳感器接收到高電平的時間
  distance = GetDistance(time);
  xianshi(distance);
 }
}

?

?

?

到了這里,關于【C語言】51單片機超聲波測距(實作 非仿真)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 51單片機的超聲波測距系統(tǒng)【proteus仿真+程序+報告+原理圖】

    51單片機的超聲波測距系統(tǒng)【proteus仿真+程序+報告+原理圖】

    該系統(tǒng)由AT89C51單片機+數(shù)碼管模塊+LED指示燈模塊+按鍵模塊構成。 利用51單片機實現(xiàn)超聲波測距功能。利用單片機控制超聲波的發(fā)射和對超聲波自發(fā)射至接收往返時間的計時。系統(tǒng)定時發(fā)射超聲波,在啟動發(fā)射電路的同時啟動單片機內部的定時器,利用定時器的計數(shù)功能記錄超

    2024年02月11日
    瀏覽(73)
  • 超聲波測距模塊HC-SR04詳解(基于51單片機)

    超聲波測距模塊HC-SR04詳解(基于51單片機)

    本篇文章是個人整理的包含超聲波測距模塊HC-SR04的基本介紹與基本工作原理以及分別通過LCD1602、數(shù)碼管和串口顯示距離的實例講解與代碼的筆記,部分內容來自《HC-SR04超聲波測距模塊說明書》,代碼使用模塊化編輯,部分模塊來自江科大自化協(xié)的51單片機教學視頻。 希望大

    2023年04月16日
    瀏覽(26)
  • 基于單片機超聲波測距語音播放

    基于單片機超聲波測距語音播放

    一、系統(tǒng)方案 本設計采用52單片機作為主控器,HC-SR04測距,液晶1602顯示,按鍵設置報警閥值,語音報警。 二、硬件設計 原理圖如下: 三、單片機軟件設計 1、首先是系統(tǒng)初始化 uint dist; // 保存超聲波模塊測量到的結果 2、液晶顯示程序 / / // 1602液晶寫命令函數(shù),cmd就是要寫

    2024年02月09日
    瀏覽(22)
  • 基于單片機的超聲波語音測距系統(tǒng)

    基于單片機的超聲波語音測距系統(tǒng)

    一、系統(tǒng)方案 超聲波具有指向性強,能量消耗緩慢,在介質中傳播的距離較遠,因而超聲波經常用于距離的測量,如測距儀和物位測量儀等都可以通過超聲波來實現(xiàn)。利用超聲波檢測往往比較迅速、方便、計算簡單、易于做到實時控制,并且在測量精度方面能達到工業(yè)實用的

    2024年02月10日
    瀏覽(42)
  • 基于Arduino單片機超聲波測距儀設計

    基于Arduino單片機超聲波測距儀設計

    文章目錄 摘? 要 1.課程設計任務 1.1課程設計題目 1.2設計的要求 2.設計總體方案 2.1初步設計方案 2.2各個單元電路的設計要求 2.3主要性能指標 2.4總體方案 3.單元模塊設計 3.1顯示模塊 3.2超聲波測距模塊 3.3蜂鳴器模塊 3.4電機模塊 3.5 LED二極管模塊 4.軟件流程圖 5.設計代碼 5.1核

    2024年02月11日
    瀏覽(26)
  • 51單片機使用HC-S104超聲波模塊

    ? HC-S104超聲波模塊是一種測量距離的傳感器,可以用于51單片機的測距應用。下面是使用HC-S104超聲波模塊的步驟: 1.將HC-S104超聲波模塊的VCC引腳連接到51單片機的3.3V或5V電源,GND引腳連接到51單片機的GND,TRIG引腳連接到51單片機的一個可編程輸出口,ECHO引腳連接到51單片機的

    2024年02月12日
    瀏覽(30)
  • 【畢業(yè)設計】基于超聲波智能跟隨小車 - 單片機 物聯(lián)網 stm32 c51

    【畢業(yè)設計】基于超聲波智能跟隨小車 - 單片機 物聯(lián)網 stm32 c51

    自動跟隨小車系統(tǒng)由兩部分組成:跟隨小車和移動目標攜帶裝置。 工作原理:跟隨小車系統(tǒng)通過無線通信模塊發(fā)送尋找信號,同時超聲波接收器開始計時,如果移動目標接收到無線尋找信號,則立即發(fā)送超聲波信號。這樣小車的三角超聲波接收器陸續(xù)收到超聲波信號,CPU通過

    2023年04月08日
    瀏覽(95)
  • 基于51單片機驅動HC-SR04超聲波模塊(LCD1602顯示)

    基于51單片機驅動HC-SR04超聲波模塊(LCD1602顯示)

    點擊圖片購買 HC- SR04+是一款寬電壓工作的超聲波測距模塊。模塊外形尺寸及軟件與老版本 HC- SR04完全兼容;可以與老版本HC SR04無縫切換。低至3V的低工作電壓, 使其與3.3V供電的MCU可以直接連接。 特點 探測角度: 15° 采用工業(yè)級MCU,工作溫度:-20C~80C 探測距離:5V:2cm-- 450cm;3.3V: 2c

    2024年02月02日
    瀏覽(23)
  • 基于單片機的超聲波探傷儀

    摘要 超聲波探傷儀是目前工業(yè)制造和現(xiàn)代化檢測的重要途徑之一,廣泛的應用在質量檢測和產品檢測中,通過使用其產品能夠有效地降低產品次品的風險。盡管隨著電子技術的發(fā)展, 國內出現(xiàn)了一些數(shù)字化的超聲檢測儀器,但其數(shù)據處理及擴展能力有限,缺乏足夠的靈活性

    2024年04月11日
    瀏覽(41)
  • 基于單片機的超聲波探傷儀設計

    摘要 超聲波探傷儀是目前工業(yè)制造和現(xiàn)代化檢測的重要途徑之一,廣泛的應用在質量檢測和產品檢測中,通過使用其產品能夠有效地降低產品次品的風險。盡管隨著電子技術的發(fā)展, 國內出現(xiàn)了一些數(shù)字化的超聲檢測儀器,但其數(shù)據處理及擴展能力有限,缺乏足夠的靈活性

    2024年02月08日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包