ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

【开源-Proteus8.9仿真】基于51单片机的超声波测距(HC-SR04+ LCD1602) - 少年

2026/8/8 19:21:28 拓冰建站 浏览量
【开源-Proteus8.9仿真】基于51单片机的超声波测距(HC-SR04+ LCD1602) - 少年

项目开源链接以及作者信息

参数
VX公众号 少年潜行 (关注回复 A004超声波测距 在对应文中获得网盘链接)
Proteus8.9 链接:https://pan.baidu.com/s/1kkgFmRBlh268m_ESl83weg 提取码:9bde 复制这段内容后打开百度网盘手机App,操作更方便哦

📖 欢迎交流 如果对你有帮助,希望可以帮我点个赞👍和收藏,谢谢

📖 有问题请于微信公众号后台回复,博客不常查看

V1.1 (2025_07_05更新)

更新内容

1、在V1.0基础上优化了LCD显示延时,使得LCD的显示更加迅速。
2、如果有问题,大家可以继续提出。大家就不要去下资源绑定里面的内容了,那个不能实时更新。

LCD显示优化

在实际仿真使用的时候LCD刷新会比较慢,使用实物的时候可以用原来的代码,仿真的时候可以把延时注释了,使用下面的函数,开头要加个1ms的延时,因为没有忙检测。

void LcdWriteCom(uint8_t com)	  //写入命令
{Lcd1602_Delay1ms(1);LCD1602_E = 0;     //使能LCD1602_RS = 0;	   //选择发送命令LCD1602_RW = 0;	   //选择写入LCD1602_DATAPINS = com;     //放入命令
//	Lcd1602_Delay1ms(1);		//等待数据稳定LCD1602_E = 1;	          //写入时序
//	Lcd1602_Delay1ms(5);	  //保持时间LCD1602_E = 0;
}void LcdWriteData(uint8_t dat)			//写入数据
{Lcd1602_Delay1ms(1);LCD1602_E = 0;	//使能清零LCD1602_RS = 1;	//选择输入数据LCD1602_RW = 0;	//选择写入LCD1602_DATAPINS = dat; //写入数据
//	Lcd1602_Delay1ms(1);LCD1602_E = 1;   //写入时序
//	Lcd1602_Delay1ms(5);   //保持时间LCD1602_E = 0;
}	

V1.0 基础内容

项目说明

该设计是一个简易的基于51单片机的超声波测距系统,功能说明:

  1. 使用LCD1602实时显示当前的超声波测试距离。
  2. 可以通过示波器查看发送的信号和超声波模块接收到的信号。

硬件设计

image

硬件设计如图,主要使用LCD屏幕展示超声波的测量距离,然后还有就是一个示波器显示发送Trig和Echo的信号。

软件设计

主要就是在While中发送信号,然后使用LCD1602显示

#include "reg52.h"#include "stdio.h"
#include "hc_sr04.h"
#include "LCD1602.h"
#include "stdio.h"#define u8 unsigned char
#define u16 unsigned intvoid delayms(unsigned int ms)
{unsigned char i=100,j;for(;ms;ms--){while(--i){j=10;while(--j);}}
}void main()
{float dist_value = 0;u8 lcdShowBuff[16] = {0};HCSR04_Init();        // HCSR04的引脚初始化HCSR04_Timer0Init();  // HCSR04的定时器计数初始化LcdInit();            // LCD显示初始化while(1){HCSR04_trigSendOnePulse();dist_value = DistCount();sprintf((char*)lcdShowBuff,"distanc : %f    ",dist_value);LcdShowStr(0,0,lcdShowBuff);delayms(100);}
}

调试效果

1、显示当前的测试距离和示波器的波形

image