基于51单片机温湿度检测报警系统(Proteus仿真+Keil源码+设计文档+原理图等)附下载链接!DHT11

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

01设计要求

设计一个基于51单片机温湿度检测报警系统:

功能1:DHT11采集环境温湿度;

功能2:使用LCD1602实时显示温湿度;

功能3:设计按键单元,可调节温湿度上下限阈值;

功能4:设计报警单元,实现对超限温湿度监控报警。

 

02系统概述

系统通过SHT11温湿度传感器感应周围环境的温度和湿度,利用51单片机对采样到的温湿度数据进行读取处理,并传输到LCD1602液晶实时显示。

此外,用户还可通过按键对温湿度上下限阈值进行设定,超出阈值会报警。

 

03Proteus仿真

u=1503040864,4184695006&fm=3074&app=3074&f=JPEG

 

04示例代码

#include <reg52.h>
#include <intrins.h>
​
// 引脚定义
sbit DHT11 = P1^2;
sbit Key_TU = P3^2; sbit Key_TD = P3^3;
sbit Key_HU = P3^4; sbit Key_HD = P3^5;
sbit Led_Jiangwen = P1^5; sbit Led_Qushi = P1^4;
sbit Buzz = P2^0;
sbit I2C_SCL = P1^0; sbit I2C_SDA = P1^1;
​
unsigned char temp, humi;
unsigned char AlarmTH, AlarmHH;
​
// 报警判断逻辑
void AlarmJudge(void)
{
    Led_Jiangwen = (temp > AlarmTH) ? 0 : 1;
    Led_Qushi = (humi > AlarmHH) ? 0 : 1;
    if(Led_Jiangwen==0 || Led_Qushi==0)
    {
        Buzz=0; DelayMs(50); Buzz=1; DelayMs(50);
        Buzz=0; DelayMs(50); Buzz=1; DelayMs(50);
    }
}
​
// 按键扫描+阈值存储
void KeyScanf(void)
{
    if(Key_TU==0 && AlarmTH<99){ AlarmTH++; SetLcdCursor(0,14); ShowLcdNum(AlarmTH); DelayMs(350); }
    if(Key_TD==0 && AlarmTH>0){ AlarmTH--; SetLcdCursor(0,14); ShowLcdNum(AlarmTH); DelayMs(350); }
    if(Key_HU==0 && AlarmHH<99){ AlarmHH++; SetLcdCursor(1,14); ShowLcdNum(AlarmHH); DelayMs(350); }
    if(Key_HD==0 && AlarmHH>0){ AlarmHH--; SetLcdCursor(1,14); ShowLcdNum(AlarmHH); DelayMs(350); }
    WriteE2PROM(AlarmTH,0x01);
    WriteE2PROM(AlarmHH,0x02);
}
​
// 主程序整体业务流程
void main(void)
{
    unsigned int i;
    // 1. 外设初始化
    LcdInit();
    DelayMs(2000);
    
    // 2. 上电读取EEPROM保存的报警阈值,异常给默认值
    AlarmTH = ReadE2PROM(0x01);
    AlarmHH = ReadE2PROM(0x02);
    if(AlarmTH<=0 || AlarmTH>100) AlarmTH=40;
    if(AlarmHH<=0 || AlarmHH>100) AlarmHH=80;
    SetLcdCursor(0,14); ShowLcdNum(AlarmTH);
    SetLcdCursor(1,14); ShowLcdNum(AlarmHH);
    
    // 3. 主循环:采集→显示→报警→循环扫描按键
    while(1)
    {
        ReadDhtData();
        SetLcdCursor(0,5); ShowLcdNum(temp);
        SetLcdCursor(1,5); ShowLcdNum(humi);
        AlarmJudge();
        for(i=0;i<400;i++){ KeyScanf(); DelayMs(1); }
    }
}

  

05原理图

 

image-20260625113626883

 

注:

  1. 源码使用Keil4或Keil5打开

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

 

06资料获取

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

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

posted @ 2026-06-26 09:54  _Passion  阅读(3)  评论(0)    收藏  举报