【毕业设计】51单片机超声波测距系统

—.系统概述

系统使用的模块有AT89C51单片机+LCD1602显示+HC-SR04超声波测距模块。
本次设计的系统使用AT89C51单片机作为主控,通过超声波测距模块检测前方障碍物的实时距离,并将检测到的距离数据发送到LCD1602上进行显示,这种装置多用于液位检测、障碍物距离检测等,具有较广的应用范围。超声波测距的准确且安全,不需要进行接触式的测距。


二.仿真概述

1.使用LCD1602显示屏显示超声波检测的距离。


2.使用HC-SRO4超声波测距模块检测与障碍物的实时距离。

 三.程序设计

使用Keil 51进行程序设计,打开Proteus时程序是默认烧录的状态,如果没有烧录点击AT89C51单片机并将程序导入就能运行系统(程序文件是后缀为hex的文件)。
————————————————
版权声明:本文为CSDN博主「硬件设计辅导猿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/XCHardware/article/details/132117851

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于51单片机超声波测距系统程序示例: ``` #include <REGX52.H> #define uint unsigned int #define uchar unsigned char sbit Trig = P1^0; // 触发引脚 sbit Echo = P1^1; // 回波引脚 void delay(uint t) { // 延时函数 uint i; while (t--) { for (i = 0; i < 120; i++); } } void main() { uchar i; uchar distance[5]; // 用于存储距离的数组 TMOD = 0x01; // 定时器T0工作在模式1 TH0 = 0; // 定时器T0的初始值为0 TL0 = 0; TR0 = 1; // 启动定时器T0 ET0 = 1; // 开启定时器T0中断 EA = 1; // 开启总中断 while (1) { Trig = 1; // 触发超声波传感器 delay(10); Trig = 0; while (!Echo); // 等待回波信号 TH0 = 0; // 重置定时器T0的值 TL0 = 0; while (Echo) { if (TH0 > 0x1F) { // 超时,距离太远或没有物体 break; } } distance[i++] = TH0 * 8; // 计算距离并存储到数组中 if (i == 5) { // 五次测量取平均值 i = 0; uint sum = 0; for (uint j = 0; j < 5; j++) { sum += distance[j]; } sum /= 5; // 输出距离 P0 = sum / 100; P2 = 0x80; delay(5); P2 = 0x00; P0 = (sum % 100) / 10; P2 = 0x40; delay(5); P2 = 0x00; P0 = sum % 10; P2 = 0x20; delay(5); P2 = 0x00; } } } void T0_ISR() interrupt 1 { // 定时器T0中断服务程序 TH0 = 0; TL0 = 0; TR0 = 0; } ``` 这个程序使用了51单片机的P1口的0、1引脚分别连接超声波传感器的触发引脚和回波引脚。在程序中定义了一个延时函数delay(),用于产生一定的延时。在主函数中,首先初始化定时器T0,然后进入一个无限循环。在循环中,先触发超声波传感器,然后等待回波信号,并通过定时器T0来计算回波信号的高电平持续时间(单位:微秒)。通过五次测量取平均值的方式计算出距离,并通过P0口输出距离的百位、十位和个位数字。定时器T0中断服务程序用于重置定时器T0的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值