实验报告:51单片机 Proteus仿真 超声波读取+LCD1602显示仿真
一、实验背景
本实验旨在使用51单片机(AT89C51)结合超声波传感器HC-SR04和LCD1602液晶显示屏,通过Proteus仿真平台实现超声波测距功能,并将测得的距离显示在LCD1602上。该系统可以用于智能小车避障、距离检测等应用场景。
二、硬件介绍
-
51单片机(AT89C51)
- 主频:12MHz
- 存储器:4KB Flash,128B RAM
- 定时器:两个16位定时器
- I/O口:4个8位并行I/O口
-
超声波传感器(HC-SR04)
- 工作电压:5V
- 工作频率:40kHz
- 测量范围:2cm-400cm
- 测量精度:±3mm
- 引脚:VCC, GND, Trig, Echo
-
LCD1602液晶显示屏
- 显示内容:2行16字符
- 工作电压:5V
- 控制接口:8位并行数据接口或4位并行数据接口
三、器件连接
-
HC-SR04连接
- VCC连接到5V电源
- GND连接到地
- Trig连接到P1.5
- Echo连接到P1.6
-
LCD1602连接
- RS连接到P2.0
- RW连接到P2.1
- E连接到P2.2
- 数据线D4-D7分别连接到P2.4-P2.7
四、设计原理
1. 超声波测距原理
超声波传感器通过发射40kHz的超声波脉冲,当遇到障碍物时,超声波反射回来。传感器接收反射波并计算从发射到接收的时间差,根据公式:
[ \text{距离} = \frac{\text{时间差} \times \text{声速}}{2} ]
计算出距离。声速在空气中约为340m/s。
2. 定时器使用
定时器0配置为模式1(16位定时器),用于测量Echo引脚的高电平时间。通过中断处理溢出情况,确保测量的精确性。
3. LCD1602显示
LCD1602使用4位数据接口模式连接到单片机。通过初始化函数LCD_init
进行初始化,之后通过LCD_write_str
函数将测量结果显示到屏幕上。
五、电路原理
1. 超声波模块
Trig引脚通过软件控制发射超声波脉冲,Echo引脚接收反射信号,并由定时器0记录高电平持续时间。
2. 定时器与中断
定时器0的溢出中断服务程序设置一个标志位Flag_Ultrasonic
,表示测量超时,防止因未接收到反射信号而导致程序卡死。
3. LCD1602控制
通过定义的函数库实现对LCD1602的控制,包括初始化、清屏、光标移动和字符串显示等功能。
六、程序原理
程序主要包括以下几个部分:
-
初始化部分
- 初始化LCD1602
- 初始化定时器0
-
测距过程
- 控制Trig引脚发出10us高电平脉冲
- 等待Echo引脚变高,启动定时器0
- Echo引脚变低,停止定时器0
- 计算时间差并转换为距离
-
显示部分
- 将计算出的距离转换为字符串格式
- 调用
LCD_write_str
函数显示到LCD1602上
void main() {
unsigned char disp[10];
unsigned int distance = 0;
Trig = 0;
Echo = 1;
LCD_init();
Init_Timer0();
delay_ms(100);
while (1) {
TR0 = 0;
TH0 = 0;
TL0 = 0;
Trig = 1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
Trig = 0;
while (!Echo);
TR0 = 1;
while (Echo);
TR0 = 0;
distance = Conut();
sprintf(disp, "%dmm", distance);
LCD_write_str(6, 1, disp);
}
}
程序简要说明
main
函数初始化硬件和软件环境,进入主循环。- 通过控制Trig引脚发出超声波信号,并测量Echo引脚高电平持续时间。
- 计算距离并转换为字符串格式,显示在LCD1602上。
七、总结
本实验通过Proteus仿真平台,成功实现了51单片机结合超声波传感器和LCD1602显示屏的距离测量系统。实验过程中,熟悉了定时器的使用、中断的处理以及液晶显示屏的控制方法,为后续更加复杂的应用奠定了基础。
资料
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2