|
這個(gè)超聲波測(cè)距程序是寒假的時(shí)候?qū)懙�,能夠精確顯示,當(dāng)時(shí)忘記是參考哪位大神的,特意分享出來的。有需要的直接下載,沒有黑幣的留下郵箱,看見回
單片機(jī)源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- #include"LCD1602.h"
- sbit Trig=P1^0;
- sbit Echo=P1^1;
- bit flag=0;
- /*
- ---------------------
- 延時(shí)函數(shù)
- ---------------------
- */
- void delay(unsigned int z)
- {
- unsigned int x,y;
- for(x=z;x>0;x--)
- for(y=400;y>0;y--);
- }
- /*
- ---------------------
- 超聲波啟動(dòng)函數(shù)
- ---------------------
- */
- void start()
- {
- int i;
- Trig=0; //控制端初始狀態(tài)拉低
- Echo=0; //初始狀態(tài)接收端置0
- Trig=1; //控制端拉高,給一個(gè)高電平
- for(i=0;i<20;i++) //給至少10us的高電平
- {
- _nop_(); //精確延時(shí),推薦使用,在頭文件intrins.h中
- }
- Trig=0; //將控制端拉低,觸發(fā)條件完成
- }
- /*
- ---------------------
- LCD1602顯示函數(shù)
- ---------------------
- */
- void LcdDisplay(unsigned int temp)
- {
- LCD1602_writebyte("The Distance is:");
- LCD1602_write(0,0x80+0x41);
- LCD1602_write(1,temp/1000+0x30);
- LCD1602_write(1,temp%1000/100+0x30);
- LCD1602_write(1,temp%100/10+0x30);
- LCD1602_write(1,46); //此處顯示的是小數(shù)點(diǎn).
- LCD1602_write(1,temp%10+0x30);
- LCD1602_write(1,0x43); //此處顯示的是C,16進(jìn)制對(duì)應(yīng)的ASCII的值
- //LCD1602_write(1,67); //十進(jìn)制對(duì)應(yīng)的ASCII值,此處顯示的也是C
- LCD1602_write(1,0x4d); //此處顯示的是M,16進(jìn)制對(duì)應(yīng)的ASCII的值
- //LCD1602_write(1,77); //十進(jìn)制對(duì)應(yīng)的ASCII值,此處顯示的也是M
- delay(400);
- LCD1602_write(0,0x01); //1602 清屏 指令
- }
- /*
- ---------------------
- 距離計(jì)算與顯示函數(shù)
- ---------------------
- */
- void count()
- {
- unsigned int time,timeH,timeL;
- float distance,falseValue;
- timeH=TH0;
- timeL=TL0;
- TH0=0;
- TL0=0;
- time=timeH*256+timeL;
- distance=time*1.7/100; //distance=(time/2)*340m/s time的單位是us轉(zhuǎn)化為s等于time*10^(-6) 340m/s轉(zhuǎn)化為cm是34000cm/s
- //綜合到一塊就是:distance=17000*time*10^(-6)=time*1.7/100
- distance=distance*10; //距離擴(kuò)大10倍,為了能夠精確到小數(shù)點(diǎn)后一位
- if(distance<20 || distance>4500 || flag==0)
- {
- flag=1;
- falseValue=8888;
- LCD1602_write(0,0x80);
- LCD1602_writebyte("Error!");
- delay(200);
- LCD1602_write(0,0x01);
- delay(200);
- LcdDisplay(falseValue);
- }
- else
- {
- LcdDisplay(distance);
- }
- }
- /*
- ---------------------
- 主函數(shù)
- ---------------------
- */
- void main()
- {
- LCD1602_cls();
- while(1)
- {
- TMOD=0X11;
- TH0=0;
- TL0=0;
- start();
- while(!Echo);
- TR0=1;
- while(Echo);
- TR0=0;
- count();
- delay(120);
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
超聲波測(cè)距模塊_HC-SR04_ 用戶手冊(cè)-V2.pdf
(1017.48 KB, 下載次數(shù): 43)
2019-5-23 23:59 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
超聲波液晶顯示.zip
(28.85 KB, 下載次數(shù): 86)
2019-5-23 23:59 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|