H34基于51单片机火焰烟雾温度报警器proteus设计,keil程序,c语言,AT89C51,课题设计,设计报告
作者:单片机仿真   类别:51单片机仿真    日期:2026-10-31 14:07:57    阅读:21 次   消耗积分:0 分

H34 火焰烟雾温度报警器用 DS18B20 实时测温、ADC0832 采集模拟烟雾传感器的浓度、火焰传感器电平直判,任一超限即报警并启动水泵灭火。这是 H22 家用烟雾报警器的工程化升级版:单文件拆成三模块,比较值加连续 10 次稳定性过滤,温度向上取整后再参与比较。

H34基于51单片机火焰 图1

01 设计任务

功能介绍:

使用51单片机设计一个火焰烟雾温度三合一报警器,双传感器监测 + 阈值设定 + 报警联动水泵,要求如下:

1、双传感器监测:DS18B20 实时测温(12 位分辨率 0.25℃),ADC0832 采集模拟烟雾传感器换算成百分制浓度,LCD 第一行显示设定值 S:、第二行显示实时值 R:;

2、火焰检测:模拟火焰传感器接 P3.0,低电平有效——检测到火焰无需比较阈值,立即触发报警;

3、按键设定:K1 切换设定项(温度/浓度,光标闪烁定位)、K2 加、K3 减、K4 确认——设定完成后必须按确认才生效;设定值限幅(温度 30~120℃、浓度 20~100%)防误设;

4、三路报警条件:烟雾浓度超限 / 温度超限 / 火焰触发,任一满足即报警;

5、报警动作:警铃响 + 继电器吸合启动水泵灭火 + LED 分路指示烟雾/温度越限 + LCD 显示 Danger!!!。

 特别注意:这个框架在 H22(家用烟雾报警器)讲过,但别当成换皮重复——这期是它的"工程化升级版",有三处实打实的进化:工程拆成三个模块文件、比较用温度加了连续 10 次的稳定性过滤、小数进 1 取整比较。框架相同、内核升级,03/04 节把两个新招讲透。


02 工程结构升级:从单文件到三模块

Keil 工程里三个源码文件平级摆放:main 只做按键、显示、报警比较这些业务调度,lcd1602 管液晶的初始化、写命令、写数据与定位打印,adc0832 管通道选择和一次采集。

对比 H22 的 693 行单文件,这期把液晶驱动和 ADC 驱动拆成独立 .c 文件,主文件只留 468 行业务逻辑。三个好处:

· 找代码快:改显示就开 lcd1602.c,改采集就开 adc0832.c,不用在 693 行里翻;

· 复用零成本:下一个项目要液晶?把 lcd1602.c/h 拷过去就能用,#include "lcd1602.h" 一行接好;

· 编译器各管各的:改一个模块只重编译它,链接出错了定位也准。

这就是嵌入式工程的标准姿势——main.c 只做调度和业务,驱动归驱动。以后你们做课设答辩,被问"为什么这么分文件",答案就是这三条。ADC0832 的三线时序(CS/CLK/DO/DI、通道选择 8 个节拍)H22 拆过,这里不重复;DS18B20 的单总线时序和负温补码还原也在 H22/H32 讲过,covert1() 里那段高低温字节拼接 + dotcode{0,25,50,75} 小数查表照旧。

03 新招一:比较用温度的"连续 10 次"稳定性过滤

报警比较最怕什么?读数在阈值边缘抖。设了 50℃ 报警,实际温度 49.8 和 50.2 来回横跳,蜂鸣器就"滴——滴——"断续响,像接触不良。H22 直接拿实时值比较,这期在定时器中断里加了一层过滤:

每读到一个新温度,先和上一次留下的比较值对一遍:不相等就计数器加一,攒够 10 次才把比较值换成新读数并清零计数;中间只要读回一次相等,计数立刻清零重来。

逻辑拆开看三步:

· 新值 ≠ 旧值:连续计数器 temp++,攒次数;

· 攒满 10 次(约 10×200ms = 2 秒的连续偏移)才把 real_tempure 换成新值;

· 中途哪怕读回一次旧值,计数清零重来——毛刺根本活不到更新那一刻。

效果:显示值依旧灵敏(每 200ms 刷),但报警比较用的是"确认稳定 2 秒"的温度。传感器抖动、电源毛刺被挡在比较环节之外,蜂鸣器不会神经质。

注意这和 H33 的均值滤波是两种不同思路:均值滤波是"把噪声平均掉"(对付高频小幅抖动),稳定性过滤是"新值够稳才采纳"(对付跳变和毛刺)。实测里两个经常配合用——采样环节滤波、比较环节过滤,各守一道门。

04 新招二:小数进 1 的取整比较

第二个新招在温度换算上。DS18B20 给的是 27.25℃ 这种带小数的值,设定阈值是整数 50,怎么比?这期的做法:

温度读数的小数位字节只要非零,就把十位乘十加个位再进一;小数位为零时按十位乘十加个位原样取值,参与比较的始终是整数。

有小数就进 1:27.25℃ 按 28 参与比较,50.00℃ 才算 50。为什么这么干?两边单位对齐——阈值是整数,实时值取整成整数,比较才有意义(H22 的做法是反向操作:把阈值 ×10 去凑 0.1℃ 精度的实时值,两条路都通,但都要对齐)。

而"向上取整"而不是四舍五入,是报警系统的保守哲学:宁可早点报、不可漏一分——50.75℃ 按 51 比,51>50 触发报警,比四舍五入成 51 看似一样,但 50.25℃ 按 51 比就直接报了(四舍五入成 50 就漏过)。火灾报警这种场景,漏报的代价远大于误报,进位取整就是这条原则的代码化。

05 设定交互与报警联动(框架回顾)

按键、显示、报警联动三块沿用 H22 框架,快速过一遍要点:

· K1 切换 + 光标闪烁:cursor_position 换挡(6=温度位、12=浓度位),write_com(0x0e) 开光标、write_com(0x0c) 关光标——"数码管的光标是闪出来的,液晶的光标是指令开出来的";

· 限幅回绕:温度加过 120 回 30,减过 30 回 120,浓度 20~100 同理——用户按坏了也不出界;

· 三条件或运算一行判:if((real_smokescope>=set_smokescope)||(real_tempure>set_tempure)||(Fire==0)),火焰是电平直判不走阈值;

· 报警后显示让位:LCD 清出来给 "Danger!!!",退出报警用 init_lcd1602() 整屏重刷恢复——和 H22 同款的"报警占屏、恢复重刷";

· 双定时器分工:T0 50ms×4=200ms 读一次 DS18B20(温度变化慢),T1 10ms 读一次 ADC0832(烟雾要跟手)——采样周期按物理量的变化速度定,这句话比代码值钱。

06 设计报告与视频讲解

H34基于51单片机火焰 图2H34基于51单片机火焰 图3

火焰烟雾温度报警器proteus仿真整机图本设计配套资料齐全(H 系列标准四件套):

· Proteus 仿真:51 单片机 + LCD1602 + DS18B20 + ADC0832 + 火焰传感器 + 警铃 + 继电器水泵,模块分区标注;

· Keil 程序:三模块工程,编译 0 Error 0 Warning(code=2392);

· 设计报告:系统框图、传感器原理、程序流程与源码;

· 视频讲解:原理图讲解 + 程序讲解两段,重点看模块划分和稳定性过滤两段。

Keil编译0错误

07 排错清单

1、温度显示一直不动 → 先查 DS18B20 的 DQ 是否接 P2.6,再查 T0 中断有没有跑(LED2 会随报警状态变化说明主循环活着);首次上电要读两次才开始转换(first_read_tempe 防开机误报机制),等 1 秒再动电位器;

2、阈值边缘蜂鸣器断续响 → 这期自带稳定性过滤不该出现;若出现,检查你改的代码是不是把 else temp=0;(回稳清零)删了——没有清零,毛刺攒 10 次也能过;

3、改了设定值不生效 → 必须按 K4 确认(mode 回 0 才参与比较),这是设计行为不是 bug;

4、烟雾显示差一位/怪数字 → 百分制换算 (x<<1)/5 配套的 data_to_hex 十进制转 BCD 别动——浓度是按 BCD 位写给液晶的,直接写十进制会花屏;

5、水泵不转 → 继电器由 Motor(P2.7) 经 PNP 管 Q2 驱动,报警时 Motor=0 才吸合;先手动拉低 P2.7 看继电器响不响,分清驱动问题和逻辑问题;

6、火焰一碰就报、拿开不恢复 → 退出报警靠主循环每轮重判,若卡死在 Danger 页,查 temp_dis 恢复标志和 init_lcd1602() 重刷是否被改动;

7、ADC083X 元件报错 → Proteus 元件库补丁问题,参照 51mcu.top/article/198 的解决方法处理(H22 同款问题)。

08 系列回顾

报警器这条线到这期画了个闭环:

· H22 家用烟雾报警器:三路报警框架从零搭,单文件入门;

· H34 火焰烟雾温度报警器:同框架的工程化重构——模块化分文件、比较值稳定性过滤、小数进 1 保守取整。

三招合起来看,是一个完整的方法论:采样有滤波(H33 均值)、比较有过滤(H34 连续 10 次)、取整有倾向(宁误报不漏报)。把这三层装进任何报警类设计,数据这条链路就算"既有灵敏度、又有稳态"了。传感器 + 报警的玩法到此集齐,后面往通信类、综合类设计走。

需要本设计的仿真 + 程序 + 报告 + 视频全套资料,公众号回复 H34 免费领取。下期见!


09 文件日期修改

如果你想把文件修改为最新的日期,又不想新建工程,那么你可以参考下面的文章。

"如何不打开程序的情况下更改proteus和keil程序的日期?"

工具和仿真文件在一起,见下面的下载链接。


10 资料下载

全套资料包含 Keil 工程(C 语言源码 + hex 文件)、Proteus 仿真工程、设计报告、程序流程图、讲解视频,以及编译截图和仿真截图。下载后可直接打开运行,也可用于课程设计、毕业设计参考。

点我下载全套资料 →

也可以关注公众号「单片机仿真」,回复 H34 获取下载入口。公众号内还有 A / T / H 全系列 400 多个单片机仿真实例,回复「目录」可查看完整清单。

同类设计合集:H 系列单片机仿真合集目录(含设计报告、视频讲解、流程图);全部系列合集总目录

版权所有,转载本站文章请注明出处:proteus单片机
上一篇:H33基于51单片机ADC0809采集温度proteus设计,keil程序,c语言,AT89C51
下一篇:H35基于51单片机烟雾温湿度报警器proteus设计,keil程序,c语言,AT89C51
${comment['nickname']}   ${comment['createtime']}
  
       
${comment.content}
${reply.nickname} 回复 ${comment.nickname}    ${reply.createtime}
     
  
回复内容:${reply.content}