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