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