|
基于STC51單片機超聲波測距精簡設計只需三個元件(測距模塊暫且算做是一個元件吧)
1.所需元件:STC單片機+超聲波模塊+4位共陽數(shù)碼管
2.原理:單片機向測距模塊trig腳發(fā)送20us的高電平觸發(fā)測距,Echo 測距結(jié)束時會輸出高電平,電平時長為超聲波信號往返時間之和。Echo 腳開始輸出高電平時啟動定時計數(shù)器計時,當Echo 腳高電平結(jié)束時停止計數(shù),根據(jù)定時器的時間可算出距離。
3.連接:單片機插在面包板上數(shù)碼管直接插在單片機上面(引腳一一對應見原理圖)測距模塊trig腳接P5.4Echo 腳接P5.5
照片 002.jpg (3.83 MB, 下載次數(shù): 195)
下載附件
2016-10-16 21:26 上傳
照片 03.jpg (3.94 MB, 下載次數(shù): 172)
下載附件
單片機插在面包板上
2016-10-16 21:26 上傳
照片 004.jpg (3.66 MB, 下載次數(shù): 150)
下載附件
數(shù)碼管插在單片機對應的位置
2016-10-16 21:26 上傳
時序圖.jpg (64.23 KB, 下載次數(shù): 150)
下載附件
測距時序圖
2016-10-16 21:26 上傳
超聲波電路原理圖.jpg (3.15 MB, 下載次數(shù): 162)
下載附件
測距原理圖
2016-10-16 21:26 上傳
- /***************************************************************
- 作者: 劉海龍(部分程序來自網(wǎng)絡及STC官網(wǎng))
- 程序名: 51單片機超聲波測距()
- 編寫時間:2016年7月4日
- 硬件支持:超聲波模塊US-020、四位共陽數(shù)碼管、STC單片機
- /***************************************************************/
- #include <STC15w.H>// 單片機頭文件
- #include <intrins.h>
- #include <4LED_YANG.h>//包含共陽數(shù)碼管驅(qū)動程序
- #define uchar unsigned char
- #define uint unsigned int
- uint timeH,timeL;//定義2個存儲計時器值的變量
- uint distance;//定義測量值的變量
- uint time;//定義Echo腳返回的高電平時間變量
- /***************************************************************/
- sbit Echo = P5 ^ 5; //超聲波測距模塊Echo連接的IO
- sbit Trig = P5 ^ 4; //超聲波測距模塊Trig連接的IO
- /*******************************************/
- void delay1ms (unsigned int a){ // 1ms延時程序
- unsigned int i;
- while( --a != 0){
- for(i = 0; i < 630; i++);//STC單片機在晶振為12MHz時i值上限為630
- } //AT89C51單片機在外部晶振為12MHz時i值上限為125
- }
- /*******************************************/
- void delay_20us() //@12.000MHz
- {
- unsigned char i;
- _nop_();
- _nop_();
- i = 57;
- while (--i);
- }
- /*********************************************************************************************
- 函數(shù)名:定時器初始化函數(shù)
- 調(diào) 用:INT_init();
- /**********************************************************************************************/
- void INT_init (void){
- TMOD=0x01; //定時器0,16位工作方式計數(shù)模式
- TH0=0; //定時器0清零
- TL0=0; //定時器0清零
- EA = 1; //總中斷開
- Trig=0;//拉低為下次觸發(fā)做準備
- }
- //***************************************************************
- void dist (void){//測量距離程序
- Trig=1; //
- delay_20us(); //延時20us
- Trig=0; //Trig輸出20us高電平觸發(fā)測距
- while(Echo==0); //等待Echo回波引腳變高電平
- TR0=1;//程序運行到此處時說明Echo腳變成了高電平,此時啟動T0開始計時
- while(Echo==1); //等待Echo回波引腳高電平結(jié)束
- TR0=0;//程序運行到此處時說明Echo腳變成了低電平,此時T0停止計時
- time=TH0*256+TL0;
- distance=time*0.170; //測量距離
- distance=distance-2;//測量起點不同減去的數(shù)值不同
- TH0 = 0; //重置計時器
- TL0 = 0;
-
- }
- void main()//主函數(shù)
- {
- init();//單片機IO口工作方式初始化
- INT_init;//T0初始化
- while(1)
- {
- dist();//測量距離
- disp();//數(shù)碼管顯示距離
- delay1ms(20);//兩次測量間需要有10ms間隔
- }
- }
- //***************************************************************END
復制代碼
|
-
-
超聲波測距程序.rar
2016-10-16 21:32 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
3.08 MB, 下載次數(shù): 331, 下載積分: 黑幣 -5
源程序+原理圖
評分
-
查看全部評分
|