备战蓝桥杯day20__超声波基本应用
一,超聲波測距原理
? ? ? ?
藍橋杯超聲波模塊分2個部分,為發送模塊和接收模塊。發送模塊負責發送超聲波,然后開始計時,接收模塊負責接收反彈回來的超聲波,然后停止計時,由此我們可以推斷出測距公式
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? L=340*t/2=170*t(假定聲速為340m/s)
發送端接在單片機的P1^0,接收端接在P1^1。
二,代碼部分
該代碼實現基本距離的測量,超基本距離顯示999。
如何實現超聲測距,我們需要一下步驟:
1,發射超聲波
我這里發送的是8個40KHZ的超聲波信號,把TX置1為發送信號,置0為停止發送,通過延時發送穩定的超聲波信號。
2,接收超聲波
接收超聲波比發送要復雜許多,我們需要打開定時器,我這里使用的是定時器0,16位自動重裝模式。基本原理就是通過定時器計時,當發送的超聲波,超時間沒有返回時TF0會置1,而且如果接收到返回的超聲波信號RX會置0,與定時器配合就可以知道測距的時間。
注意:在發送超聲波后再啟用定時器
3,數據處理
我們的時間t是放在TH0與TL0中的,需要進行處理才能取出來,再*0.017得到正確的距離
#include "reg52.h" #include "intrins.h" #include "smgshow.h" sbit TX=P1^0; sbit RX=P1^1; unsigned int distance; void Delay12us() //@12.000MHz {unsigned char i;_nop_();_nop_();i = 33;while (--i); }void Send_wave() {unsigned char i;for(i=0;i<8;i++){TX=1;Delay12us();TX=0;} } void Measure_distance() {unsigned int t;TMOD &=0xf0;TL0=0x00;TH0=0x00;TF0=0;TR0=0;EA=1;ET0=1;Send_wave();TR0=1;while((RX==1) && (TF0==0));TR0=0;if(TF0==0){t=(TH0<<8) | TL0;distance=t*0.017;}else{distance=999;TF0=0;} } void Display() {Display_SMG(5,smgnotdotduanma[distance/100]);Display_SMG(6,smgnotdotduanma[distance/10%10]);Display_SMG(7,smgnotdotduanma[distance%10]); } void Init_system() {HC573(4,0xff);HC573(5,0x00); } void main() {Init_system();while(1){Measure_distance();Display();} }??while((RX==1) && (TF0==0));的作用,可以理解為等待接收的結果,一種是正常距離,一種是接收的時間過長也就是超正常距離了。當正常距離時RX置1,退出循環,此時TF0=0。若超正常距離TF0置1,退出循環。
三,總結
對于超聲波的理解還不夠透徹,對于多少時間采樣一次,或者使用別的方式觸發采樣都不夠熟練,需要多加練習。
總結
以上是生活随笔為你收集整理的备战蓝桥杯day20__超声波基本应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3d成像基础原理
- 下一篇: 图片懒加载 lazyload