51单片机超声波测距l用cd1602显示程序
时间: 2023-08-29 14:07:34 浏览: 41
51单片机超声波测距(LCD1602显示)
5星 · 资源好评率100%
以下是基于51单片机和CD1602液晶屏的超声波测距程序:
```c
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit Echo = P3^2; // 超声波接收脚
sbit Trig = P3^3; // 超声波发射脚
uchar distance, TH, TL; // 存储距离值和定时器初值
void delay_us(uint us) // 微秒级延时函数
{
while(us--);
}
void delay_ms(uint ms) // 毫秒级延时函数
{
uint i, j;
for(i=0; i<ms; i++)
for(j=0; j<114; j++);
}
void Init_Timer0() // 初始化定时器0
{
TMOD &= 0xF0; // 设置为模式0
TL0 = 0x00; // 设置初值
TH0 = 0x00;
TR0 = 1; // 启动定时器
}
void Start_Module() // 启动模块
{
Trig = 0; // 先置低电平
delay_us(2);
Trig = 1; // 发送超声波
delay_us(10);
Trig = 0;
}
void main()
{
uchar i;
Init_Timer0();
while(1)
{
Start_Module(); // 启动超声波模块
while(!Echo); // 等待接收到回波信号
TR0 = 1; // 开始计时
while(Echo); // 等待回波信号结束
TR0 = 0; // 停止计时
distance = TH * 256 + TL; // 计算距离
distance /= 58;
P2 = distance; // 将距离值显示在P2口
for(i=0; i<16; i++) // 在LCD上显示距离值
{
TH = distance / 100;
TL = (distance % 100) / 10;
P0 = 0x80 + i;
P2 = TH;
delay_ms(1);
P2 = TL;
delay_ms(1);
}
delay_ms(200); // 延时等待下一次测量
}
}
```
注意:这只是一个简单的示例程序,具体实现需要根据自己的硬件和需求进行调整和修改。
阅读全文