提供对应的Proteus仿真电路图Keil程序源码C语言原理图模块资料、元件清单、程序流程图等电子资料参考学习文末附全部资料的下载链接。01设计要求设计一个基于51单片机温湿度检测报警系统功能1DHT11采集环境温湿度功能2使用LCD1602实时显示温湿度功能3设计按键单元可调节温湿度上下限阈值功能4设计报警单元实现对超限温湿度监控报警。02系统概述系统通过SHT11温湿度传感器感应周围环境的温度和湿度利用51单片机对采样到的温湿度数据进行读取处理并传输到LCD1602液晶实时显示。此外用户还可通过按键对温湿度上下限阈值进行设定超出阈值会报警。03Proteus仿真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_Jiangwen0 || Led_Qushi0) { Buzz0; DelayMs(50); Buzz1; DelayMs(50); Buzz0; DelayMs(50); Buzz1; DelayMs(50); } } ​ // 按键扫描阈值存储 void KeyScanf(void) { if(Key_TU0 AlarmTH99){ AlarmTH; SetLcdCursor(0,14); ShowLcdNum(AlarmTH); DelayMs(350); } if(Key_TD0 AlarmTH0){ AlarmTH--; SetLcdCursor(0,14); ShowLcdNum(AlarmTH); DelayMs(350); } if(Key_HU0 AlarmHH99){ AlarmHH; SetLcdCursor(1,14); ShowLcdNum(AlarmHH); DelayMs(350); } if(Key_HD0 AlarmHH0){ 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(AlarmTH0 || AlarmTH100) AlarmTH40; if(AlarmHH0 || AlarmHH100) AlarmHH80; 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(i0;i400;i){ KeyScanf(); DelayMs(1); } } }05原理图注源码使用Keil4或Keil5打开仿真使用的是Proteus8.13及以上版本版本过低可能会打不开。06资料获取1项目完整资料获取链接下载链接2Keil、Proteus各个版本安装包 下载链接