|
超聲波是指頻率在20kHz以上的聲波,它屬于機(jī)械波的范疇。超聲波也遵循一般機(jī)械波在彈性介質(zhì)中的傳播規(guī)律,如在介質(zhì)的分界面處發(fā)生反射和折射現(xiàn)象,在進(jìn)入介質(zhì)后被介質(zhì)吸收而發(fā)生衰減等。正是因?yàn)榫哂羞@些性質(zhì),使得超聲波可以用于距離的測量中。隨著科技水平的不斷提高,超聲波測距技術(shù)被廣泛應(yīng)用于人們?nèi)粘9ぷ骱蜕钪小?/font>系統(tǒng)的設(shè)計(jì)主要包括兩部分,即硬件電路和軟件程序。硬件電路主要包括單片機(jī)電路、發(fā)射電路、接收電路、顯示電路和電源電路,另外還有復(fù)位電路和LED控制電路等。我采用以AT89C51單片機(jī)為核心的低成本、高精度、微型化數(shù)字顯示超聲波測距儀的硬件電路。整個(gè)電路采用模塊化設(shè)計(jì),由信號(hào)發(fā)射和接收、供電、溫度測量、顯示等模塊組成。發(fā)射探頭的信號(hào)經(jīng)放大和檢波后發(fā)射出去,單片機(jī)的計(jì)時(shí)器開始計(jì)時(shí),超聲波被發(fā)射后按原路返回,在經(jīng)過放大帶通濾波整形等環(huán)節(jié),然后被單片機(jī)接收,計(jì)數(shù)器停止工作并得到時(shí)間。溫度測量后送到單片機(jī),通過程序?qū)λ俣冗M(jìn)行校正, 結(jié)合兩者實(shí)現(xiàn)超聲波測距的功能。軟件程序主要由主程序、預(yù)置子程序、發(fā)射子程序、接收子程序、顯示子程序等模塊組成。它控制單片機(jī)進(jìn)行數(shù)據(jù)發(fā)送與接收,在一定溫度下對超聲波速度的校正,還有實(shí)現(xiàn)數(shù)據(jù)正確顯示在LED上。另外程序控制單片機(jī)消除各探頭對發(fā)射和接收超聲波的影響。相關(guān)部分附有硬件電路圖、程序流程圖。
單片機(jī)源程序如下:
- #include "wave.h"
- #include "reg52.h"
- #include "intrins.h"
- #include "12864.h"
- #include "delay.h"
- sbit Trig = P2^0;
- sbit Echo = P3^2;
- extern uchar dis2[];
- extern uchar dis6[];
- float distance;
- uint succeed_flag,time,timeH,timeL,numble=0;
- uchar bai,shi,ge,xiaoge;
- void send()
- {
- EA=0;
- Trig=1; //超聲波輸入端
- delay_20us(); //延時(shí)20us
- Trig=0; //產(chǎn)生一個(gè)20us的脈沖
- }
- void receive()
- {
- while(Echo==0); //等待Echo回波引腳變高電平
- succeed_flag=0; //清測量成功標(biāo)志
- EA=1;
- EX0=1; //打開外部中斷0
- TH1=0; //定時(shí)器1清零
- TL1=0; //定時(shí)器1清零
- TF1=0; //計(jì)數(shù)溢出標(biāo)志
- TR1=1; //啟動(dòng)定時(shí)器1
- delay(140); //等待測量的結(jié)果
- TR1=0; //關(guān)閉定時(shí)器1
- EX0=0; //關(guān)閉外部中斷0
-
- if(succeed_flag==1)
- {
- display3();
- time=timeH*256+timeL+numble*65536;
- distance=(time*1.85)/100; //厘米
- TH1=0;
- TL1=0;
- bai=(uint)distance/100;
- shi=(uint)(distance)%100/10;
- ge=(uint)(distance)%10;
- xiaoge=(uint)((distance-(uint) (distance))*100)%100/10;
-
-
-
- lcd_pos(2,0);
- lcd_wdat(' ');
- delay(5);
- lcd_wdat(0x30+bai);
- delay(5);
- lcd_wdat(0x30+shi);
- delay(5);
- lcd_wdat(0x30+ge);
- delay(5);
- lcd_wdat('.');
- delay(5);
- lcd_wdat(0x30+xiaoge);
- delay(5);
- lcd_wdat('c');
- delay(5);
- lcd_wdat('m');
- delay(300);
-
- }
- if(succeed_flag==0)
- {
- display();
- // display3(); //沒有回波則清零
- P1=0; //測試燈變化
- }
- }
- //外部中斷0,用做判斷回波電平
- void exter() interrupt 0 // 外部中斷0是0號(hào)
- {
- timeH =TH1; //取出定時(shí)器的值
- timeL =TL1; //取出定時(shí)器的值
- succeed_flag=1;//至成功測量的標(biāo)志
- EX0=0; //關(guān)閉外部中斷
- }
- //****************************************************************
- //定時(shí)器1中斷,用做超聲波測距計(jì)時(shí)
- void timer1() interrupt 3 //
- {
- TH1=0;
- TL1=0;
- numble++;
- }
復(fù)制代碼
所有資料51hei提供下載:
超聲波測距.zip
(58.08 KB, 下載次數(shù): 13)
2018-11-2 11:04 上傳
點(diǎn)擊文件名下載附件
超聲波測距+12864顯示 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|