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

0 阅读3分钟

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

参数
VX公众号少年潜行 (关注回复 A004超声波测距 在对应文中获得网盘链接)
Proteus8.9链接:pan.baidu.com/s/1kkgFmRBl… 提取码: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. 可以通过示波器查看发送的信号和超声波模块接收到的信号。

硬件设计

在这里插入图片描述 硬件设计如图,主要使用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 int
			   
void 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、显示当前的测试距离和示波器的波形 在这里插入图片描述