基于51单片机超声波测距报警系统(带温度补偿)(Proteus仿真+Keil源码+设计文档+原理图等)附下载链接!HC-SR04

提供对应的Proteus仿真电路图,Keil程序源码(C语言),设计文档、原理图,PCB、模块资料、元件清单、程序流程图等电子资料参考学习,附带项目全部资料下载链接。

1)项目完整资料获取链接:下载链接

2)Keil、Proteus各个版本安装包: 下载链接

01设计要求

设计一个基于51单片机超声波测距报警系统(带温度补偿)系统:

功能1:HC-SR04 超声波模块进行测距,有效测距范围 2cm-400cm,测量精度可达 1cm;

功能2:实时显示环境温度,并通过软件算法补偿测距误差;

功能3:LCD1602 液晶显示屏显示实时距离;

功能4:支持按键设置报警阈值,参数支持掉电保存,当检测距离小于设定阈值时,自动启动语音提示。

02系统模板

  • 超声波检测模块HC-SR04,作为距离传感器,进行测量的距离;

  • 温度采集模块,检测当前环境的温度值,并对超声波的传输速度进行温度补偿;

  • 显示模块,采用1602液晶作为显示模块,负责显示测量到的距离值和温度值;

  • 按键模块,主要是进行报警值的设置;

  • 蜂鸣器和LED的报警电路,当测量值小于报警值的,进行声光报警;

  • 电源模块,采用5V的USB供电,本系统如需移动测量时,可采用移动电源进行供电。

03Proteus仿真

04示例代码

#include <reg52.h>                                        //包含头文件
#include <intrins.h>      
​
void main()
{
    unsigned char dat1, dat2;                             // 定义变量dat1,dat2,用来保存gAlarm分离后的值
    unsigned int dis;                                     // 用来保存读取到的距离值
    int temp;
    
    LcdInit();                                            // 执行液晶初始化
    TMOD = 0x01;                                          // 选择定时器0,并且确定是工作方式1(为了超声波模块测量距离计时用的)
    
    GetDistance();                                        // 进行第一次距离采集,结果忽略
    Get18B20Temp();                                       // 进行第一次温度值采集,结果忽略
    
    SetLcdCursor(0, 0);                                   // 设置坐标第1行,第1列
    ShowLcdStr("     Welcome!   ");                       // 显示字符串"     Welcome!   "
    DelayMs(2000);                                        // 延时2s 
       
    SetLcdCursor(0, 0);                                   // 设置坐标第1行,第1列
    ShowLcdStr("  Dist=    cm   ");                       // 显示字符串"  Dist=    cm   "
    SetLcdCursor(1, 0);                                   // 设置坐标第2行,第1列
    ShowLcdStr("  Temp=     C   ");                       // 显示字符串"  Temp=     C   "
    
    dat1 = ReadE2PROM(0x2000);                            // 从E2PROM中读取报警值
    dat2 = ReadE2PROM(0x2001);
    gAlarm = dat1*100 + dat2;                             // 合并报警值
    
    if((gAlarm==0) || (gAlarm>400))                       // 如果读取到的报警值异常(等于0或大于400则认为异常)
    {
        gAlarm = 25;                                      // 重新赋值报警值为25
    }
  
    while(1)                                              // while(1)循环
    {
        temp = Get18B20Temp();                            // 获取DS18B20读取到的温度值
        SetLcdCursor(1, 7);                               // 定位到第2行第8列
        ShowLcdTemp(temp);                                // 将获取到的温度在液晶上面显示
        
        gSpeed=0.607*(temp/10)+331.4;                     // 根据公式 v=0.607T+331.4 计算出当前温度值对应的超声波速度,这时的单位是“米/秒” 
        gSpeed=gSpeed/10000;                              // 将超声波的速度从单位“米/秒”转为“厘米/微秒”,方便后面的计算
        
        dis = GetDistance();                              // 通过超声波模块获取距离
        SetLcdCursor(0, 7);                               // 定位到第2行第8列
        ShowLcdNum(dis);                                  // 将获取到的距离在液晶上面显示
        
        AlarmJudge(dis);                                  // 判断一下是否需要报警,是的话则报警
    }
}

05原理图

注:

  1. 源码使用Keil4或Keil5打开

  2. 仿真使用的是Proteus8.13及以上版本,版本过低可能会打不开。

06资料获取

1)项目完整资料获取链接:下载链接

2)Keil、Proteus各个版本安装包: 下载链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值