
简介本资源是一套面向单片机初学者与嵌入式课程实践者的温湿度监测系统完整开发包聚焦51单片机对DHT11湿度与DS18B20温度双传感器的数据采集、处理及LCD1602实时显示解决多源传感器协同读取、单总线协议解析与字符型液晶驱动等典型教学难点。压缩包共14个文件含2个Proteus仿真工程.pdsprj、2个原理图预览.SchDocPreview、1个C语言主程序.c、1个Keil工程.uvproj、1个编译后可执行文件.hex及Workspace配置等覆盖从电路设计、代码编写到仿真验证的全流程。资源大小仅220KB结构紧凑、开箱即用已获395人学习下载。读者可直接导入Proteus运行仿真、对照C源码理解传感器时序与LCD刷新逻辑并通过原理图与工程文件掌握硬件接口布局与项目组织方式是夯实单片机外设驱动与综合调试能力的高性价比实践素材。1. 为什么用两个传感器做温湿度显示DHT11和DS18B20不是功能重叠吗很多人第一次看到这个项目标题会疑惑DHT11本身就能同时输出温度和湿度再加一个DS18B20岂不是多余实际拆过这个Proteus仿真工程后才发现设计者刻意用双传感器构建了一套「分工验证型」数据采集架构——DHT11负责湿度粗略温度±2℃DS18B20专攻高精度温度±0.5℃可配12位分辨率两者数据在LCD1602上并列显示形成交叉校验能力。这种设计在课程设计和工业简易监控场景中非常典型既规避了DHT11温度漂移大、响应慢的缺陷又绕开了DS18B20无法测湿的硬伤。整个系统基于经典STC89C52RC单片机兼容8051指令集IO资源分配紧凑P1口接LCD1602数据线P2口分时复用为DHT11单总线和DS18B20单总线P3.7控制背光没有扩展芯片纯靠软件时序驱动。如果你正在准备蓝桥杯单片机赛题、课设答辩或想吃透单总线协议底层逻辑这个工程比单纯“DHT11LCD”项目多出至少3个关键训练点双单总线冲突规避、DS18B20 ROM搜索与多器件寻址、DHT11数据校验失败后的重采样机制。2. DHT11与DS18B20的单总线协议差异及51单片机IO口配置策略2.1 单总线本质不同DHT11是“主推从拉”DS18B20是“主从双向握手机制”DHT11和DS18B20虽然都标称“单总线”但电气特性和通信模型存在根本差异。DHT11采用准双向I/O模式下的同步脉冲协议单片机先拉低总线80μs启动信号再释放总线等待DHT11响应DHT11拉低80μs作为应答随后连续输出40位数据8bit湿度整数8bit湿度小数8bit温度整数8bit温度小数8bit校验和。整个过程由主机严格控制时序从机无主动权。而DS18B20遵循Dallas标准单总线协议1-Wire支持ROM命令功能命令两级寻址主机需先发送0xF0Skip ROM或执行ROM搜索获取64位地址再发0x44Convert T启动温度转换延时750ms后发0xBERead Scratchpad读取9字节暂存器。其关键特征是总线空闲时需外接4.7kΩ上拉电阻且所有操作前必须执行Presence Pulse检测主机拉低→释放→采样→判断从机应答脉冲宽度。提示Proteus中若仿真失败90%概率是DS18B20未配置上拉电阻或DHT11供电不足DHT11需4–5.5VDS18B20可寄生供电但本项目采用外部VDD模式。2.2 51单片机IO口复用方案P2口分时切换与电平保持技巧本工程将DHT11和DS18B20共用P2.0引脚通过软件控制实现物理复用。核心逻辑在于DHT11通信期间P2.0配置为强推挽输出P2M10x01; P2M00x01确保能快速拉低总线DS18B20通信期间P2.0切换为开漏模式P2M10x00; P2M00x01依赖上拉电阻实现高电平空闲状态P2.0始终维持高电平P2 0xFF避免干扰其他P2口外设如LCD数据线。// 关键IO配置函数Keil C51环境 void DHT11_Init(void) { P2M1 ~0x01; // 清除P2.0高字节模式位 P2M0 | 0x01; // 设置P2.0为强推挽输出 P2 | 0x01; // 确保初始高电平 } void DS18B20_Init(void) { P2M1 ~0x01; // 保持高字节清零 P2M0 ~0x01; // 清除P2.0低字节位 → 开漏模式 P2 | 0x01; // 上拉使能 }该配置解决了51单片机IO资源紧张时的硬件复用问题但带来新挑战两次通信间隔必须≥1sDHT11最小采样周期否则DHT11内部电容未放电完毕会导致下次启动失败。工程中采用定时器T0中断每1.2s触发一次完整采集周期而非简单while循环延时保证系统实时性。2.3 Proteus元件库关键参数设置避免仿真失真Proteus 8.16中DHT11和DS18B20模型需手动修正参数才能匹配真实器件行为DHT11右键元件→Edit Properties→将Model Type设为DHT11Supply Voltage设为5VResponse Time设为1000ms默认500ms会导致连续读取失败DS18B20Model Type选DS18B20Resolution设为12对应0.0625℃精度Power Mode选External禁用寄生供电与原理图VDD引脚连接一致LCD1602Display Type选CharacterData Bus Width设为8本工程使用8位数据模式Backlight Control勾选Enable并连接P3.7。若忽略这些设置仿真中会出现DHT11返回全0数据、DS18B20读取CRC校验失败等现象。特别注意Proteus默认DS18B20模型在12位分辨率下转换时间需750ms但实际代码中Delay_ms(750)必须精确到±10ms否则读取暂存器时DS18B20尚未完成转换。3. LCD1602动态刷新与双传感器数据融合显示逻辑3.1 LCD1602指令时序控制避开忙标志检测陷阱本工程未采用常规的“读BF忙标志RS/RW/E配合”方式而是使用固定延时法驱动LCD1602。原因在于51单片机P0口未接上拉电阻时读BF会导致数据线电平不稳定。具体实现为写指令前延时40μs_nop_(); _nop_(); ...共8次写数据前延时100μsDelay_us(100)每次写操作后强制延时2msDelay_ms(2)确保LCD内部处理完成。// LCD写入函数简化版 void LCD_Write_Cmd(unsigned char cmd) { RS 0; RW 0; // 选择指令寄存器 P0 cmd; // 数据总线赋值 E 1; _nop_(); _nop_(); // 使能脉冲上升沿 E 0; Delay_us(100); // 下降沿后延时 Delay_ms(2); // 指令执行时间 } void LCD_Show_Temp_Humi(float temp, float humi) { LCD_Write_Cmd(0x80); // 第一行首地址 LCD_Write_Str(Temp:); LCD_Write_Float(temp, 1); // 显示一位小数 LCD_Write_Str(C); LCD_Write_Cmd(0xC0); // 第二行首地址 LCD_Write_Str(Humi:); LCD_Write_Float(humi, 1); LCD_Write_Str(%); }LCD_Write_Float()函数采用定点数算法将浮点数×10转为整型分离整数/小数部分避免调用标准库printf导致代码体积膨胀Keil C51中printf占用2KB以上ROM。3.2 双传感器数据融合策略温度优先校验与湿度异常标记工程中温度数据以DS18B20为准DHT11温度仅作参考湿度数据唯一来源为DHT11。但增加了三重数据可信度判断DHT11校验和验证接收40位数据后计算sum (humi_inthumi_dectemp_inttemp_dec) 0xFF与第5字节对比DS18B20 CRC校验读取暂存器9字节后用Dallas官方CRC8算法验证第9字节跨传感器温度一致性检查若|DS18B20_temp - DHT11_temp| 3℃则LCD第二行显示Humi: --.%湿度置空提示传感器异常。该策略在Proteus仿真中可通过手动修改DHT11模型参数如将Temperature Error设为5℃触发异常显示验证逻辑健壮性。3.3 LCD1602显示优化避免闪烁与字符残留直接覆盖式刷新会导致“12.5C”变为“23.8C”时出现“23.5C”瞬态错误。工程采用区域擦除增量更新温度显示区域固定为第1行7~11字符含符号、数字、单位湿度显示区域为第2行7~11字符每次刷新前先写入4个空格覆盖旧数据再写入新数值。// 安全刷新函数 void LCD_Safe_Update(unsigned char line, unsigned char pos, float value, unsigned char digit) { unsigned char i; LCD_Write_Cmd(line 1 ? 0x80pos : 0xC0pos); for(i0; i4; i) LCD_Write_Char( ); // 先擦除 LCD_Write_Float(value, digit); }此方法将LCD刷新抖动降低至人眼不可辨识级别且比全屏清屏LCD_Write_Cmd(0x01)节省80%刷新时间。4. Proteus仿真调试关键路径与常见故障定位表4.1 仿真启动失败的三层排查法当Proteus加载LCDShow.DSN后单片机不运行按以下顺序排查电源层确认VCC/GND网络无断连右键Net→Show NetDHT11和DS18B20的VDD引脚是否接5V非3.3V时钟层检查XTAL1/XTAL2是否连接11.0592MHz晶振30pF电容若误用12MHz会导致DS18B20时序偏差程序层双击单片机→Program File选择LCDShow.hex确认Hex文件生成于Keil中且未勾选“Use Memory Layout from Target Dialog”。注意Proteus 8.16中若hex文件路径含中文或空格仿真会静默失败。建议将工程放在D:\Proteus_Project\等纯英文路径。4.2 传感器数据异常对照表故障现象可能原因验证方法解决方案DHT11始终返回0x00000000启动信号时长不足示波器观察P2.0波形确认低电平≥80μs修改DHT11_Start()中_nop_()数量Keil中启用Use Simulator调试时序DS18B20读取CRC错误ROM搜索未完成在DS18B20_Read_Scratchpad()前添加DS18B20_Reset()并检查返回值确认DS18B20_Reset()函数中Presence Pulse采样点位于释放后15μs处LCD显示乱码P0口未接上拉电阻仿真中右键P0→Properties→勾选Pull-up Resistor在原理图中为P0口批量添加10kΩ上拉电阻Proteus默认不启用温度值跳变±5℃DS18B20分辨率配置错误查看DS18B20_Write_Scratchpad()中TH/TL寄存器值将暂存器第4字节配置寄存器设为0x7F12位模式而非默认0x1F9位4.3 Keil编译关键配置项本工程源码需在Keil μVision5中按以下参数编译Target选项卡Crystal设为11.0592MHzCode Rom Size选8KOutput选项卡勾选Create HEX FileHEX File格式选Intel HexC51选项卡Pointer Size设为Large因使用数组指针操作LCDOptimization等级设为6平衡速度与体积Debug选项卡Use Simulator勾选Limit Speed to Real Time取消加速仿真。若编译后hex文件大于8KB需检查是否误启用了printf或未删除调试用while(1)死循环——工程中所有延时均用Delay_ms()实现无阻塞式等待。5. 实战技巧如何将此工程快速迁移到STC15系列单片机5.1 引脚映射转换表从传统51到STC15F2K60S2的IO重定义STC15F2K60S2虽兼容8051指令集但IO结构差异显著P2口不再支持强推挽输出需改用P1口P1M10x01; P1M00x01接DHT11DS18B20单总线推荐使用P3.2INT0引脚因其内置上拉电阻可关闭LCD1602数据线改用P4口STC15新增IO组避免P0口复用冲突。功能原51引脚STC15F2K60S2引脚配置代码DHT11数据线P2.0P1.0P1M1 0x01; P1M0 0x01;DS18B20数据线P2.0P3.2P3M1 ~0x04; P3M0 ~0x04;开漏LCD_RSP2.5P4.0P4M1 0x00; P4M0 0x01;LCD_EP2.6P4.1同上5.2 单总线时序补偿STC15高频下的NOP调整STC15F2K60S2最高主频22MHz相同_nop_()指令执行时间仅为传统51的1/2。需重写延时函数// STC15专用微秒延时22MHz晶振 void Delay_us(unsigned int us) { unsigned int i; for(i0; ius; i) { _nop_(); _nop_(); _nop_(); _nop_(); // 4个NOP≈1μs } }实测表明DHT11启动信号需Delay_us(80)DS18B20 Presence Pulse采样点需在释放后Delay_us(15)否则握手失败率超60%。5.3 Proteus中STC15模型加载步骤Proteus 8.16默认无STC15库需手动导入从STC官网下载STC15F2K60S2.PDS模型文件复制到Proteus\Library目录在Proteus中点击System→Set Path添加该目录到Library Search Path重启Proteus元件库中即可找到STC15F2K60S2Category: Microprocessor ICs → 8051 Family。导入后需右键单片机→Edit Properties→Clock Frequency设为22MHz并在Program File中指定STC-ISP生成的hex文件注意Keil编译hex需勾选STC-ISP Format。完成迁移后原工程功能完全保留且ADC模块可扩展接入土壤湿度传感器构成多参数环境监测节点。本文还有配套的精品资源点击获取