基于单片机火灾报警器仿真设计
一、系统方案
1、本设计采用51单片机作为主控器。
2、DS18B20采集温度值送到液晶1602显示。
3、MQ2采集烟雾值,送到液晶1602显示。
4、按键设置温度报警值,大于报警值,声光报警。

二、硬件设计
原理图如下:

三、单片机软件设计
1、首先是系统初始化
/18b20初始化函数******/
void init_18b20()
{
bit q;
dq = 1; //把总线拿高
delay_uint(1); //15us
dq = 0; //给复位脉冲
delay_uint(80); //750us
dq = 1; //把总线拿高 等待
delay_uint(10); //110us
q = dq; //读取18b20初始化信号
delay_uint(20); //200us
dq = 1; //把总线拿高 释放总线
}
2、液晶显示程序
/********************************************************************
- 名称 : write_com(uchar com)
- 功能 : 1602命令函数
- 输入 : 输入的命令值
- 输出 : 无
***********************************************************************/
void write_com(uchar com)
{
e=0;
rs=0;
rw=0;
P0=com;
delay_uint(3);
e=1;
delay_uint(25);
e=0;
}
/********************************************************************
- 名称 : write_data(uchar dat)
- 功能 : 1602写数据函数
- 输入 : 需要写入1602的数据
- 输出 : 无
***********************************************************************/
void write_data(uchar dat)
{
e=0;
rs=1;
rw=0;
P0=dat;
delay_uint(3);
e=1;
delay_uint(25);
e=0;
}
3、按键程序
/***独立按键程序/
uchar key_can; //按键值
void key() //独立按键程序
{
static uchar key_new;
key_can = 20; //按键值还原
P1 |= 0x0f;
if((P1 & 0x0f) != 0x0f) //按键按下
{
delay_1ms(1); //按键消抖动
if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
{ //确认是按键按下
key_new = 0;
switch(P1 & 0x0f)
{
case 0x0e: key_can = 1; break; //得到k1键值
case 0x0d: key_can = 2; break; //得到k2键值
case 0x0b: key_can = 3; break; //得到k3键值
case 0x08: key_can = 4; break; //得到k4键值
}
}
}
else
key_new = 1;
}
/*按键处理显示函数/
void key_with()
{
if(menu_1 == 0)
{
if(key_can == 3) //布防按键
{
flag_bufang_en = 1;
write_string(2,13," ");
}
if(key_can == 2) //取消报警 把变量清零
{
flag_alarm = 0;
shoudong = 0; //取消手动报警
flag_bufang = 0;
flag_bufang_en = 0;
flag_value = 0;
beep = 1;
flag_time = 0;
shoudong = 0; //取消手动报警
} if(key_can == 4) //紧急报警键 手动报警{if(menu_1 == 0)shoudong = 1;}
}if(key_can == 1) //设置键
{menu_1 ++;if(menu_1 == 1){write_string(1,0," YW:000PPM "); write_string(2,0,"Set W: "); write_zifu(2,10,0XDF); //温度单位}if(menu_1 >= 3){menu_1 = 0;}if(menu_1 == 0)init_1602() ; //初始化显示
}
if(menu_1 == 1) //设置烟物报警
{if(key_can == 2){yanwu_h ++ ; //烟物报警值加1 if(yanwu_h >= 999)yanwu_h = 999;}if(key_can == 3){yanwu_h --; //烟物报警值减1 if(yanwu_h <= 1)yanwu_h = 1;}write_sfm_yanwu(1,7,yanwu_h); //显示烟物write_sfm2(2,8,s_temp); //显示温度write_com(0x80+6); //将光标移动到第2行第到3位write_com(0x0f); //显示光标并且闪烁}
if(menu_1 == 2) //设置高温报警
{if(key_can == 2){s_temp ++ ; //高温报警值加1 if(s_temp > 99)s_temp = 99;}if(key_can == 3){s_temp -- ; //高温报警值减1 if(s_temp <= 10)s_temp = 10 ;}write_sfm_yanwu(1,8,yanwu_h); //显示烟物write_sfm2(2,9,s_temp); //显示温度write_com(0x80+0x40+6); //将光标移动到第2行第到3位write_com(0x0f); //显示光标并且闪烁
}
}
4、核心算法程序
/写18b20内的数据**/
void write_18b20(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{ //写数据是低位开始
dq = 0; //把总线拿低写时间隙开始
dq = dat & 0x01; //向18b20总线写数据了
delay_uint(5); // 60us
dq = 1; //释放总线
dat >>= 1;
}
}
/读取18b20内的数据**/
uchar read_18b20()
{
uchar i,value;
for(i=0;i<8;i++)
{
dq = 0; //把总线拿低读时间隙开始
value >>= 1; //读数据是低位开始
dq = 1; //释放总线
if(dq == 1) //开始读写数据
value |= 0x80;
delay_uint(5); //60us 读一个时间隙最少要保持60us的时间
}
return value; //返回数据
}
/读取温度的值 读出来的是小数**/
uint read_temp()
{
uint value;
uchar low; //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序
init_18b20(); //初始化18b20
write_18b20(0xcc); //跳过64位ROM
write_18b20(0x44); //启动一次温度转换命令
init_18b20(); //初始化18b20write_18b20(0xcc); //跳过64位ROM
write_18b20(0xbe); //发出读取暂存器命令low = read_18b20(); //读温度低字节
value = read_18b20(); //读温度高字节
value <<= 8; //把温度的高位左移8位
value |= low; //把读出的温度低位放到value的低八位中
value *= 0.0625; //转换到温度值
return value; //返回读出的温度
}
四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

相关文章:
基于单片机火灾报警器仿真设计
一、系统方案 1、本设计采用51单片机作为主控器。 2、DS18B20采集温度值送到液晶1602显示。 3、MQ2采集烟雾值,送到液晶1602显示。 4、按键设置温度报警值,大于报警值,声光报警。 二、硬件设计 原理图如下: 三、单片机软件设计…...
阿里测开面试大全(一)附答案完整版
万字长文,建议收藏 1 什么是POM,为什么要使用它? POM是Page Object Model的简称,它是一种设计思想,而不是框架。大概的意思是,把一个一个页面,当做一个对象,页面的元素和元素之间操…...
STL-常用容器
string容器 string构造函数 string本质:类 string和char*区别: char* 是一个指针 string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。 特点: string类内部封装了很多成员方法 …...
【owt】关闭microk8s 等无关服务
打算部署下owt,发现之前跑了microk8s ,一直运行:操作指令 // 1. 启动 microk8s.start// 2. 关闭 microk8s.stop// 3. kubectl 操作 // --- 查看 cluster microk8s.kubectl cluster-info// --- 查看 nodes microk8s.kubectl get nodes// --- 查看 pods microk8s.kubectl get …...
【面试题】——Spring
1.Spring是什么? Spring是一个开源的Java应用框架,它提供了广泛的基础设施支持,用于构建Java应用程序。极大提高了开发效率。它提供了一种轻量级的编程模型,通过依赖注入(Dependency Injection)和面向切面…...
【算法思想-排序】根据另一个数组次序排序 - 力扣 1122 题
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…...
毕业设计|基于stm32单片机的app视频遥控抽水灭火小车设计
基于stm32单片机的app视频遥控抽水灭火水泵小车设计 1、项目简介1.1 系统构成1.2 系统功能 2、部分电路设计2.1 L298N电机驱动电路设计2.2 继电器控制电路设计 3、部分代码展示3.1 小车控制代码3.1 水泵控制代码 4 演示视频及代码资料获取 1、项目简介 视频简介中包含资料http…...
编译原生安卓aosp源码,实现硬改以及定位
系列文章目录 第一章 安卓aosp源码编译环境搭建 第二章 手机硬件参数介绍和校验算法 第三章 修改安卓aosp代码更改硬件参数 第四章 编译定制rom并刷机实现硬改(一) 第五章 编译定制rom并刷机实现硬改(二) 第六章 不root不magisk不xposed lsposed frida原生修改定位 第七章 安卓…...
找单身狗。一个数组中只有两个数字出现一次,其他数字出现了两次,编写一个函数找出这两个只出现一次的数字
例:在{1 2 3 4 5 6 1 2 3 4}找出5和6 方法二: 设计思想: 1.分组原理 (1)将所有数字进行异或,相同数字异或为零,所以只会剩5^6,即为异或的结果xor_result (…...
Java数据结构技巧
Java数据结构技巧 1、循环 for-each循环如果不是"[]"的数组类型,则需要提前判断数据结构是否为空,否则有可能会有空指针异常。 2、对于List对象的i到j位进行排序 for(List<String> now_result:result){List<String> sublist …...
easyui disabled 属性设置
1.设置disabled $("#id").attr("disabled",true); 或 $("#id").attr("disabled","随意字符"); easyui写法 $("#id").numberbox("textbox").attr("disabled", true); $("#id")…...
使用容器运行Nginx应用及Docker命令
目录 一、使用容器运行Nginx应用 1.1 使用docker run命令运行Nginx应用 1.1.1 观察下载容器镜像过程 1.1.2 观察容器运行情况 编辑 1.2 访问容器中运行的Nginx服务 1.2.1 确认容器IP地址 1.2.2 容器网络说明 1.2.3 在主机中使用curl命令容器IP地址访问 二、Docker命…...
fastapi 基本介绍+使用
FastAPI是一个基于Python 3.6的现代、快速(高性能)的web框架,它使用Starlette作为其底层Web框架。FastAPI有很好的文档和丰富的功能,包括自动为路由生成API文档、查询参数验证、依赖注入、WebSocket等等。 以下是一个FastAPI的基…...
C语言的结构体的认识
注:类似于①、②……是代码的编写顺序,也是对下方代码的注解 【①】、【②】……是用到了之前的代码 #include <stdio.h> //②定义生日结构体,必须声明在前面不然会报错,c语言是从上到下执行的(这点要注意&#…...
只通过在vimrc文件写东西来实现或安装vim的插件
2023年9月23日,周日上午 有时候觉得用插件管理器来安装插件太麻烦了, 所以我就在想能不能只通过在vimrc文件写东西来实现或安装vim的插件, 不过这样做肯定有很大的局限性,但我会尽量做到最好的效果 不定期更新 把下面这些代码…...
云原生Kubernetes:K8S存储卷
目录 一、理论 1.存储卷 2.emptyDir 存储卷 3.hostPath卷 4.NFS共享存储 5.PVC 和 PV 6.静态创建PV 7.动态创建PV 二、实验 1.emptyDir 存储卷 2.hostPath卷 3.NFS共享存储 4.静态创建PV 5.动态创建PV 三、问题 1.生成pod一直pending 2.shoumount -e未显示共享…...
“五育”并举育人体系构建的实践研究课题实施方案
目录 一、研究背景与意义 二、课题理论依据 三、国内外研究情况与现状 四、研究目标...
小样本目标检测:ECEA: Extensible Co-Existing Attention for Few-Shot Object Detection
论文作者:Zhimeng Xin,Tianxu Wu,Shiming Chen,Yixiong Zou,Ling Shao,Xinge You 作者单位:Huazhong University of Science and Technology; UCAS-Terminus AI Lab 论文链接:http://arxiv.org/abs/2309.08196v1 内容简介: 1&…...
Android 10.0 系统开启和关闭黑白模式主题功能实现
1. 概述 在10.0的rom系统开发定制化中,在系统SystemUI的下拉状态栏中,产品开发功能需求要求添加黑白模式功能开关的功能,就是打开黑白模式,系统颜色就会变成黑白颜色, 关闭黑白模式开关系统就会变成彩色模式,所以就需要了解下系统是怎么设置黑白模式和彩色模式的,然后添…...
Linux-VI和VIM
目录 VI的使用 VI的三种模式 进入VI 切换至插入模式(Insert mode)编辑文件 Insert 的切换 退出VI及保存文件 搜索 快捷删除 光标定位到最后一行 VIM查找字符串 全匹配 模糊匹配(正则表达式) 快速查找…...
Agent在供应链场景能降低多少出错率?2026年智能体企业供应链应用深度解析
站在2026年的技术深水区回望,供应链管理已完成从“信息化、自动化”向“智能化、人机共生”的范式转移。在复杂的全球贸易与工业协同背景下,AI Agent(智能体)已正式跨越对话式助手的初级阶段,演进为具备自主执行能力的…...
PaddleOCR模型选型避坑指南:从‘轻量级模型缺失文件’到‘通用模型实战’
PaddleOCR模型选型避坑指南:从轻量级到通用模型的实战解析 第一次接触PaddleOCR时,面对琳琅满目的模型选择,很多开发者都会陷入困惑:轻量级模型和通用模型到底有什么区别?为什么下载的轻量级模型总是提示缺少文件&…...
2025年大中华区21个主要城市甲级写字楼市场数据
、大中华区主要城市甲级写字楼市场数据速览(2025年)美通社消息:全球领先的房地产服务公司戴德梁行发布《大中华区写字楼供应/需求前沿趋势》年度报告,针对2025年大中华区21个主要城市甲级写字楼市场的整体表现展开研究,聚焦市场供需关系深入分…...
2026.4.3要闻
百度首页 哈哈哈分享万岁 最大、首艘!中国“超级装备”密集上新 正观新闻 2026-04-03 07:52正观新闻官方账号 关注 近日,国内高端装备制造领域迎来密集突破,多款具有里程碑意义的新产品相继首发、试航或“上岸”。一系列“超级装备”的亮相,彰显了我国自主研发与制造…...
【实战技巧】利用rclone高效下载Google Drive共享大数据集
1. 为什么需要rclone下载Google Drive大数据集 做深度学习的朋友们应该都遇到过这样的场景:好不容易找到一个理想的开源数据集,结果发现它存放在Google Drive上,而且体积动辄几十GB甚至上百GB。这时候如果按照传统方法先下载到本地电脑再上传…...
双模型混搭方案:OpenClaw同时接入千问3.5-27B与Llama3
双模型混搭方案:OpenClaw同时接入千问3.5-27B与Llama3 1. 为什么需要多模型混搭 去年我在尝试用AI自动化处理技术文档时,发现单一模型总是存在能力短板。比如用纯文本模型生成示意图说明时,要么需要手动补充描述,要么得额外调用…...
2026年上海,这些行业内正规的GEO企业,你知道有哪些吗?
在上海这座充满活力与创新的城市,GEO(地理信息)行业发展得如火如荼。随着科技的不断进步,地理信息技术在各个领域的应用越来越广泛,众多正规的GEO企业也如雨后春笋般涌现。今天,就让我们一起来了解一下上海…...
RVC与ElevenLabs对比:开源可控性vs商业易用性深度分析
RVC与ElevenLabs对比:开源可控性vs商业易用性深度分析 想用AI克隆自己的声音,或者让喜欢的角色开口唱歌?现在市面上有两大主流选择:开源的RVC和商业化的ElevenLabs。一个免费但需要折腾,一个付费但开箱即用。到底哪个…...
程序实现多参数联动判断,单一参数异常不报警,多参数契合才报警,零误报。
一、实际应用场景描述某高校《智能仪器》综合实验项目中,有一套电机运行状态监测系统:- 监测参数:- 电流(A)- 振动(mm/s)- 温度(℃)现场现象:- 电机启动时&am…...
告别SDK迷宫:手把手教你用CCS12.1.0为TMS320F280039搭建纯净工程骨架(附文件屏蔽指南)
告别SDK迷宫:手把手教你用CCS12.1.0为TMS320F280039搭建纯净工程骨架(附文件屏蔽指南) 第一次打开C2000Ware MotorControl SDK时,那种被数百个文件夹和文件淹没的感觉,相信很多开发者都深有体会。面对如此庞大的资源库…...
