这个超声波测距程序是寒假的时候写的,能够精确显示,当时忘记是参考哪位大神的,特意分享出来的。有需要的直接下载,没有黑币的留下邮箱,看见回
单片机源程序如下:
- #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)
超声波液晶显示.zip
(28.85 KB, 下载次数: 86)
|