51单片机超声波测距l用cd1602显示程序
时间: 2023-08-30 20:12:12 浏览: 76
以下是51单片机超声波测距并用CD1602液晶屏显示的程序,供参考:
```c
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS = P2^6;
sbit RW = P2^5;
sbit EN = P2^7;
sbit Trig = P3^6;
sbit Echo = P3^7;
uchar distance[4]; // 存放距离的数组,最大值为9999
void delay(uint i) // 延时函数
{
while(i--);
}
void lcd_write_cmd(uchar cmd) // 写命令函数
{
RS = 0;
RW = 0;
P0 = cmd;
EN = 1;
_nop_();
_nop_();
EN = 0;
}
void lcd_write_dat(uchar dat) // 写数据函数
{
RS = 1;
RW = 0;
P0 = dat;
EN = 1;
_nop_();
_nop_();
EN = 0;
}
void init() // 初始化函数
{
lcd_write_cmd(0x38); // 16*2显示,5*7点阵,8位数据总线
lcd_write_cmd(0x0c); // 开启显示,不显示光标
lcd_write_cmd(0x06); // 显示地址加1,不移动屏幕
lcd_write_cmd(0x01); // 清屏
}
void display_distance() // 显示距离函数
{
uchar i;
for(i=0;i<4;i++)
{
lcd_write_dat(distance[i]+0x30); // 将距离数组中的数字转换为字符并显示
}
}
void main()
{
uint distance_val, i;
init(); // 初始化LCD
while(1)
{
Trig = 0;
delay(500); // 延时一段时间
Trig = 1; // 发送超声波信号
delay(12);
Trig = 0;
while(!Echo); // 等待Echo引脚变高
i = 0;
while(Echo) // 统计Echo引脚高电平时间
{
delay(5);
i++;
if(i > 500) // 如果超时,跳出循环
{
break;
}
}
distance_val = i*17/100; // 计算距离
distance[0] = distance_val / 1000; // 将距离拆分为个位、十位、百位、千位
distance[1] = distance_val % 1000 / 100;
distance[2] = distance_val % 100 / 10;
distance[3] = distance_val % 10;
lcd_write_cmd(0x80); // 第一行第一个字符
display_distance(); // 显示距离
lcd_write_dat('c'); // 显示单位cm
lcd_write_dat('m');
}
}
```
需要注意的是,该程序中使用了定时器来计时,需要进行定时器的初始化和配置。另外,由于CD1602液晶屏的数据线需要连接到单片机的8位数据总线上,因此需要将P0口设置为输出模式。同时,由于程序中使用了延时函数,所以需要根据实际情况进行调整。
阅读全文
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20241231044833.png)
![application/pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)