keil5实现超声波测距的代码
时间: 2023-10-26 11:15:09 浏览: 107
以下是使用Keil5实现超声波测距的C语言代码示例:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag=0; //标志位
uint time; //时间变量
void init() //初始化函数
{
TMOD=0x01; //设置定时器0为模式1
TH0=0; //定时器0高位清零
TL0=0; //定时器0低位清零
TR0=1; //启动定时器0
P1=0x00; //超声波输入管脚
P3=0xfe; //第一位LED灯亮
}
void send() //发送函数
{
uchar i;
for(i=0;i<10;i++) //连续发10次
{
P1=0x10; //将超声波传感器设为输出模式
TH0=0; //定时器0高位清零
TL0=0; //定时器0低位清零
TR0=1; //启动定时器0
while(!flag); //等待接收到超声波信号
flag=0; //清零标志位
TR0=0; //关闭定时器0
time=(TH0<<8)+TL0; //计算时间
time=time/12; //换算成毫秒
P1=0x00; //将超声波传感器设为输入模式
if(time>500) //超出量程
P3=0xff; //所有LED灯都不亮
else if(time<2) //太近了
P3=0x01; //第一位LED灯亮
else //正常范围
P3=0xff<<(10-time)/50; //根据距离点亮LED灯
}
}
void main(void)
{
init(); //调用初始化函数
while(1)
{
send(); //调用发送函数
}
}
```
该代码将超声波传感器的输出管脚连接到P1口的第4位,LED灯的控制管脚连接到P3口的第1至第8位。在程序运行时,每隔约100毫秒连续发出10次超声波信号,然后根据接收到的超声波信号计算距离并控制LED灯的亮灭。在计算距离时,根据量程(最大距离500毫米)和LED灯的数量(8个),将距离分成若干个范围,每个范围点亮对应数量的LED灯。