当前位置: 首页 > news >正文

基于单片机火灾报警器仿真设计

一、系统方案
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采集烟雾值&#xff0c;送到液晶1602显示。 4、按键设置温度报警值&#xff0c;大于报警值&#xff0c;声光报警。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计…...

阿里测开面试大全(一)附答案完整版

万字长文&#xff0c;建议收藏 1 什么是POM&#xff0c;为什么要使用它&#xff1f; POM是Page Object Model的简称&#xff0c;它是一种设计思想&#xff0c;而不是框架。大概的意思是&#xff0c;把一个一个页面&#xff0c;当做一个对象&#xff0c;页面的元素和元素之间操…...

STL-常用容器

string容器 string构造函数 string本质&#xff1a;类 string和char*区别&#xff1a; char* 是一个指针 string是一个类&#xff0c;类内部封装了char*&#xff0c;管理这个字符串&#xff0c;是一个char*型的容器。 特点&#xff1a; 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是什么&#xff1f; Spring是一个开源的Java应用框架&#xff0c;它提供了广泛的基础设施支持&#xff0c;用于构建Java应用程序。极大提高了开发效率。它提供了一种轻量级的编程模型&#xff0c;通过依赖注入&#xff08;Dependency Injection&#xff09;和面向切面…...

【算法思想-排序】根据另一个数组次序排序 - 力扣 1122 题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐: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原生修改定位 第七章 安卓…...

找单身狗。一个数组中只有两个数字出现一次,其他数字出现了两次,编写一个函数找出这两个只出现一次的数字

例&#xff1a;在{1 2 3 4 5 6 1 2 3 4}找出5和6 方法二&#xff1a; 设计思想&#xff1a; 1.分组原理 &#xff08;1&#xff09;将所有数字进行异或&#xff0c;相同数字异或为零&#xff0c;所以只会剩5^6&#xff0c;即为异或的结果xor_result &#xff08;…...

Java数据结构技巧

Java数据结构技巧 1、循环 for-each循环如果不是"[]"的数组类型&#xff0c;则需要提前判断数据结构是否为空&#xff0c;否则有可能会有空指针异常。 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的现代、快速&#xff08;高性能&#xff09;的web框架&#xff0c;它使用Starlette作为其底层Web框架。FastAPI有很好的文档和丰富的功能&#xff0c;包括自动为路由生成API文档、查询参数验证、依赖注入、WebSocket等等。 以下是一个FastAPI的基…...

C语言的结构体的认识

注&#xff1a;类似于①、②……是代码的编写顺序&#xff0c;也是对下方代码的注解 【①】、【②】……是用到了之前的代码 #include <stdio.h> //②定义生日结构体&#xff0c;必须声明在前面不然会报错&#xff0c;c语言是从上到下执行的&#xff08;这点要注意&#…...

只通过在vimrc文件写东西来实现或安装vim的插件

2023年9月23日&#xff0c;周日上午 有时候觉得用插件管理器来安装插件太麻烦了&#xff0c; 所以我就在想能不能只通过在vimrc文件写东西来实现或安装vim的插件&#xff0c; 不过这样做肯定有很大的局限性&#xff0c;但我会尽量做到最好的效果 不定期更新 把下面这些代码…...

云原生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

论文作者&#xff1a;Zhimeng Xin,Tianxu Wu,Shiming Chen,Yixiong Zou,Ling Shao,Xinge You 作者单位&#xff1a;Huazhong University of Science and Technology; UCAS-Terminus AI Lab 论文链接&#xff1a;http://arxiv.org/abs/2309.08196v1 内容简介&#xff1a; 1&…...

Android 10.0 系统开启和关闭黑白模式主题功能实现

1. 概述 在10.0的rom系统开发定制化中,在系统SystemUI的下拉状态栏中,产品开发功能需求要求添加黑白模式功能开关的功能,就是打开黑白模式,系统颜色就会变成黑白颜色, 关闭黑白模式开关系统就会变成彩色模式,所以就需要了解下系统是怎么设置黑白模式和彩色模式的,然后添…...

Linux-VI和VIM

目录 VI的使用 VI的三种模式 进入VI 切换至插入模式&#xff08;Insert mode&#xff09;编辑文件 Insert 的切换 退出VI及保存文件 搜索 快捷删除 光标定位到最后一行 VIM查找字符串 全匹配 模糊匹配&#xff08;正则表达式&#xff09; 快速查找​​​​​​…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

spring Security对RBAC及其ABAC的支持使用

RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型&#xff0c;它将权限分配给角色&#xff0c;再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...