基于单片机火灾报警器仿真设计
一、系统方案
 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查找字符串 全匹配 模糊匹配(正则表达式) 快速查找…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...
AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...
