备战蓝桥杯day20__超声波基本应用
一,超聲波測(cè)距原理
? ? ? ?
藍(lán)橋杯超聲波模塊分2個(gè)部分,為發(fā)送模塊和接收模塊。發(fā)送模塊負(fù)責(zé)發(fā)送超聲波,然后開(kāi)始計(jì)時(shí),接收模塊負(fù)責(zé)接收反彈回來(lái)的超聲波,然后停止計(jì)時(shí),由此我們可以推斷出測(cè)距公式
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? L=340*t/2=170*t(假定聲速為340m/s)
發(fā)送端接在單片機(jī)的P1^0,接收端接在P1^1。
二,代碼部分
該代碼實(shí)現(xiàn)基本距離的測(cè)量,超基本距離顯示999。
如何實(shí)現(xiàn)超聲測(cè)距,我們需要一下步驟:
1,發(fā)射超聲波
我這里發(fā)送的是8個(gè)40KHZ的超聲波信號(hào),把TX置1為發(fā)送信號(hào),置0為停止發(fā)送,通過(guò)延時(shí)發(fā)送穩(wěn)定的超聲波信號(hào)。
2,接收超聲波
接收超聲波比發(fā)送要復(fù)雜許多,我們需要打開(kāi)定時(shí)器,我這里使用的是定時(shí)器0,16位自動(dòng)重裝模式。基本原理就是通過(guò)定時(shí)器計(jì)時(shí),當(dāng)發(fā)送的超聲波,超時(shí)間沒(méi)有返回時(shí)TF0會(huì)置1,而且如果接收到返回的超聲波信號(hào)RX會(huì)置0,與定時(shí)器配合就可以知道測(cè)距的時(shí)間。
注意:在發(fā)送超聲波后再啟用定時(shí)器
3,數(shù)據(jù)處理
我們的時(shí)間t是放在TH0與TL0中的,需要進(jìn)行處理才能取出來(lái),再*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));的作用,可以理解為等待接收的結(jié)果,一種是正常距離,一種是接收的時(shí)間過(guò)長(zhǎng)也就是超正常距離了。當(dāng)正常距離時(shí)RX置1,退出循環(huán),此時(shí)TF0=0。若超正常距離TF0置1,退出循環(huán)。
三,總結(jié)
對(duì)于超聲波的理解還不夠透徹,對(duì)于多少時(shí)間采樣一次,或者使用別的方式觸發(fā)采樣都不夠熟練,需要多加練習(xí)。
總結(jié)
以上是生活随笔為你收集整理的备战蓝桥杯day20__超声波基本应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 3d成像基础原理
- 下一篇: 图片懒加载 lazyload