写一段基于AT89C52的hc-sr04超声波测距模块C语言
时间: 2023-04-05 19:05:02 浏览: 178
代码示例:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit Trig = P1^0; // 超声波发射引脚
sbit Echo = P1^1; // 超声波接收引脚
void delay_us(uint us) // 微秒级延时函数
{
while(us--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void delay_ms(uint ms) // 毫秒级延时函数
{
while(ms--)
{
delay_us(1000);
}
}
uint GetDistance() // 获取距离函数
{
uint distance = 0;
Trig = 1; // 发射超声波
delay_us(10);
Trig = 0;
while(!Echo); // 等待接收到超声波
TR0 = 1; // 启动计时器
while(Echo); // 等待超声波结束
TR0 = 0; // 关闭计时器
distance = TH0 * 256 + TL0; // 计算距离
distance = distance / 58; // 转换为厘米
return distance;
}
void main()
{
TMOD = 0x01; // 定时器0工作在模式1
TH0 = 0;
TL0 = 0;
while(1)
{
uint distance = GetDistance(); // 获取距离
if(distance < 30) // 距离小于30cm时,LED亮
{
P2 = 0x00;
}
else // 距离大于等于30cm时,LED灭
{
P2 = 0xff;
}
delay_ms(500); // 延时500ms
}
}
阅读全文