HC-SR04超声波测距模块的使用时非常广泛的,而且驱动它的单片机也有很多。在这里我主要说一下51单片机的代码。
51单片机虽然简单,但是实际操作起来也会碰到很多问题:
1.ECHO返回的电平用什么方式去判断
2.20us的演示函数怎么编写
3.距离怎么用自己的方法换算
在下面的程序中,我用了以下方法解决上述问题:
1.ECHO的返回电平用外部中断的方式判断
2.在12MHz的晶振下,51的机器周期是1us,所以执行一条_nop()指令的时间就是1us。而跳转需要2us的时间,包括跳入函数和跳出函数,所以具体演示函数就可以根据这个要需要编写。
3.采集完ECHO电平后,定时器计数器里存放的是计数值,这个值得倒数是时间,再乘以340/2即可。
另外,LCD1602的驱动程序固定,可以自己去找。
sbit Trig = P3^1;
sbit Echo = P3^2;
sbit LED1 = P3^4;
sbit BEEP = P3^5;
uchar ge,shi,bai,outcomeH,outcomeL;
bit succeed_flag;
unsigned int c=0;
void delay_20us();
int Gotdis()
{
uint distance_data=0;
Trig=0;
TMOD=0x11;
IT0=0; //µÍµçƽ´¥·¢
EX0=0;
ET1 = 0;
TF1 = 0;
EA=0;
Trig=1;
delay_20us();
Trig=