51单片机超声波测距用lcd1602显示距离写个程序‘’
时间: 2023-08-30 15:04:04 浏览: 81
好的,以下是51单片机超声波测距用lcd1602显示距离的程序:
```c
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit Trig = P1^0; // 超声波发射引脚
sbit Echo = P1^1; // 超声波接收引脚
uchar distance; // 存储距离的变量
void delay(uint i) // 延时函数
{
while(i--);
}
void InitLcd1602() // 初始化LCD1602
{
write_com(0x38); // 显示模式设置:16*2显示,5*7点阵,8位数据接口
write_com(0x0c); // 显示开关控制:显示开,光标关,光标闪烁关
write_com(0x06); // 输入模式设置:字符写入后地址指针加1,整屏不移位
write_com(0x01); // 显示清屏
delay(1000);
}
void write_com(uchar com) // 写命令函数
{
P0 = com;
RS = 0;
RW = 0;
EN = 1;
delay(10);
EN = 0;
}
void write_data(uchar dat) // 写数据函数
{
P0 = dat;
RS = 1;
RW = 0;
EN = 1;
delay(10);
EN = 0;
}
void lcd_show(uchar *str) // 字符串显示函数
{
while(*str != '\0')
{
write_data(*str++);
}
}
void Ultrasonic() // 超声波测距函数
{
uint t;
Trig = 1;
delay(5);
Trig = 0;
while(Echo == 0);
TR0 = 1;
while(Echo == 1);
TR0 = 0;
t = TH0 * 256 + TL0;
distance = t / 58;
}
void main()
{
InitLcd1602(); // 初始化LCD1602
TMOD = 0x01; // 定时器0工作模式1
TH0 = 0;
TL0 = 0;
while(1)
{
Ultrasonic(); // 超声波测距
write_com(0x80); // 光标移动到第1行第1列
lcd_show("Distance: ");
write_data(distance / 100 + 0x30); // 显示百位数字
write_data(distance % 100 / 10 + 0x30); // 显示十位数字
write_data(distance % 10 + 0x30); // 显示个位数字
write_data(' '); // 清除多余的字符
write_data('C');
delay(100); // 延时100ms
}
}
```
注:本程序中使用了定时器0和LCD1602驱动模块,请根据实际情况进行接线。
阅读全文
相关推荐

















