基于51单片机超声波测距代码
时间: 2023-12-11 16:15:00 浏览: 73
以下是基于51单片机超声波测距的代码示例:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit TRIG = P1^0;
sbit ECHO = P1^1;
void delay(uint i)
{
while(i--);
}
void init()
{
TMOD = 0x01; // 设置定时器T0为模式1
TH0 = 0x00; // 重置定时器T0的高字节
TL0 = 0x00; // 重置定时器T0的低字节
TRIG = 0; // 初始化TRIG引脚为低电平
EA = 1; // 开启全局中断
ET0 = 1; // 开启定时器T0中断
}
void main()
{
init();
while(1)
{
TRIG = 1; // 发送一个10us的高电平脉冲
delay(10);
TRIG = 0;
while(!ECHO); // 等待ECHO引脚变为高电平
TR0 = 1; // 开始计时
while(ECHO); // 等待ECHO引脚变为低电平
TR0 = 0; // 停止计时
uint distance = (TH0 << 8) | TL0; // 计算距离
distance = distance / 58;
if(distance > 400) // 超出测量范围
{
P0 = 0xff;
}
else // 在测量范围内
{
P0 = distance;
}
delay(100); // 延时100ms
}
}
void T0_ISR() interrupt 1
{
TH0 = 0x00; // 重置定时器T0的高字节
TL0 = 0x00; // 重置定时器T0的低字节
}
以上代码的作用是:每隔100ms通过超声波测量距离,并在P0口输出距离的值(单位为厘米)。其中,TRIG引脚输出一个10us的高电平脉冲,ECHO引脚在接收到超声波后变为高电平,接着开始计时器T0的计时,当ECHO引脚变为低电平时,停止计时器T0的计时,根据计时器T0的计时结果计算出距离。注意,超声波测量的范围为2cm ~ 400cm,如果超出该范围,则P0口输出0xff。
阅读全文