hc-sr04超声波测距模块51写个代码看看
时间: 2023-09-25 19:09:23 浏览: 89
好的,下面是基于8051单片机的HC-SR04超声波测距模块的代码:
```c
#include <reg52.h> // 8051头文件
// 定义常量
#define uchar unsigned char
#define uint unsigned int
sbit Trig = P1^0; // 设置Trig引脚为P1.0
sbit Echo = P1^1; // 设置Echo引脚为P1.1
// 延时函数
void delay_us(uint us)
{
while (us--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
// HC-SR04超声波测距函数
uint distance(void)
{
uint dis_time;
Trig = 1; // 向Trig引脚发送一个10us的脉冲
delay_us(10);
Trig = 0;
while (!Echo); // 等待Echo引脚电平变高
TR0 = 1; // 启动计时器0
while (Echo); // 等待Echo引脚电平变低
TR0 = 0; // 停止计时器0
dis_time = TH0 * 256 + TL0; // 计算时间
return dis_time / 58; // 计算距离并返回结果
}
// 主函数
void main()
{
uint dis;
TMOD = 0x09; // 设置计时器0为工作模式1,定时器1不用
TH0 = 0;
TL0 = 0;
while (1)
{
dis = distance(); // 调用超声波测距函数
if (dis <= 30) // 如果距离小于等于30cm,LED灯亮
P2 = 0x00;
else // 否则LED灯灭
P2 = 0xff;
delay_us(1000); // 延时1ms
}
}
```
在这个代码中,我们使用了计时器0来计算超声波发送和接收之间的时间差,从而计算出距离。具体来说,我们先向Trig引脚发送一个10us的脉冲,然后等待Echo引脚电平变高,启动计时器0,等待Echo引脚电平变低,停止计时器0,然后用计时器0的计数值除以58来计算距离。
在主函数中,我们不断调用超声波测距函数,并根据距离控制LED灯的亮灭。在这个例子中,如果距离小于等于30cm,LED灯会亮起来,否则LED灯会灭掉。
阅读全文