[经验分享] 基于51单片机的超声波测距(HC-SR04+ LCD1602)

[复制链接]
3|0
Xiashiqi 发表于 2026-6-9 17:35 | 显示全部楼层 |阅读模式
项目开源链接
本项目资料完全开源。资料包获取方式:

github : https://github.com/snqx-lqh/ProjectReleasePage

gitee(国内镜像) :https://gitee.com/snqx-lqh/ProjectOpenSourceReleasePage。

项目属于 51 的编号 A005 ,在发布页中,找到对应项目获取方式。

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单片机的超声波测距系统,功能说明:

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



硬件设计如图,主要使用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、显示当前的测试距离和示波器的波形



————————————————
版权声明:本文为CSDN博主「少年、潜行」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wan1234512/article/details/148655212

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

210

主题

533

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0