基于51单片机的超声测距程序设计
时间: 2023-09-11 11:04:19 浏览: 17
超声波测距原理是利用超声波在空气中传播的速度恒定,通过测量超声波在空气中传播的时间,从而计算出被测物体与发射超声波的传感器之间的距离。下面是基于51单片机的超声测距程序设计。
首先,需要连接超声波传感器和51单片机,将超声波传感器的Trig引脚连接到P1.0,Echo引脚连接到P1.1。
程序主要分为两个部分:超声波发射和接收处理。
超声波发射部分:
```c
void send_wave()
{
TH0 = 0; // 定时器初值清零
TL0 = 0;
P1_0 = 1; // Trig引脚置高
delay_us(10); // 发射超声波持续10us
P1_0 = 0; // Trig引脚置低
}
```
超声波接收处理部分:
```c
unsigned int get_distance()
{
unsigned int distance;
unsigned long time;
P1_1 = 1; // Echo引脚置高
delay_us(10);
P1_1 = 0; // Echo引脚置低
while(!P1_1); // 等待Echo引脚变高
TR0 = 1; // 启动定时器
while(P1_1); // 等待Echo引脚变低
TR0 = 0; // 关闭定时器
time = TH0 * 256 + TL0; // 计算时间
distance = time * 0.017; // 计算距离,单位为厘米
return distance;
}
```
其中,定时器T0需要配置为模式1,计数器初值为0,时钟源为系统时钟,时钟频率为12MHz。delay_us()函数用于延时,具体实现可以参考51单片机的延时函数实现。
完整代码如下:
```c
#include <reg51.h>
void delay_us(unsigned int time) // 延时函数,单位为微秒
{
unsigned int i;
while(time--)
{
for(i = 0; i < 12; i++);
}
}
void send_wave()
{
TH0 = 0; // 定时器初值清零
TL0 = 0;
P1_0 = 1; // Trig引脚置高
delay_us(10); // 发射超声波持续10us
P1_0 = 0; // Trig引脚置低
}
unsigned int get_distance()
{
unsigned int distance;
unsigned long time;
P1_1 = 1; // Echo引脚置高
delay_us(10);
P1_1 = 0; // Echo引脚置低
while(!P1_1); // 等待Echo引脚变高
TR0 = 1; // 启动定时器
while(P1_1); // 等待Echo引脚变低
TR0 = 0; // 关闭定时器
time = TH0 * 256 + TL0; // 计算时间
distance = time * 0.017; // 计算距离,单位为厘米
return distance;
}
void main()
{
TMOD = 0x01; // 定时器T0工作模式1
TH0 = 0; // 定时器初值清零
TL0 = 0;
while(1)
{
send_wave(); // 发射超声波
unsigned int distance = get_distance(); // 获取距离
// 处理距离数据,可以通过串口发送到上位机进行显示
}
}
```
相关推荐















