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

2023-10-29

一、系统方案
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();		   //初始化18b20

write_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仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于单片机火灾报警器仿真设计 的相关文章

  • @With,@Accessors(chanins=true),@ExtensionMethod——Lombok常用注解

    目录 一 With 很少用 二 Accessors 非常好用 一 fluent 布尔型 二 chain 布尔型 三 ExtensionMethod 实验阶段 一 With 很少用 这个注解可以用在类上也可以用在单个的成员变量上 使lombo
  • C++中的指针概念梳理

    在C 中指针通常难以理解 即使是有经验的程序员也常常因为调试指针引发的错误而备受折磨 笔者在学习C 时常常被指针弄得晕头转向 于是决定对指针的概念做一次梳理 希望本文能够对C 入门者有些许作用 1 指针的概念 指针 pointer 是 指向
  • Electron 实现切换暗_亮模式与主题

    文章末尾附上仓库地址 清单 模板基于 electron vite vue vue3 ts vite 组件库 element plus hooks库 vueuse useElementPlusTheme 初始化工程 使用 electron v
  • Tensorflow(二)MNIST数据集分类

    1 获取数据集 有两种方式可以得到数据集 第一是直接通过mnist input data read data sets MNIST data one hot True 进行联网下载 但这个方法可能很慢或者连接不到服务器 所以推荐使用第二个
  • 富文本 解决HTML字段

    转载自 https blog csdn net qq 36467463 article details 79072428 RichText Android平台下的富文本解析器 流式操作 低侵入性 支持Html和Markdown格式文本 支持
  • USRP B210常用软件安装

    系统需求 硬件配置 intel i5或以上 USB3 0接口 树莓派也可以 操作系统 ubuntu 20 04 ubuntu 18 04环境配置有些差异 如果按照这里的命令操作可能会出问题 可以用虚拟机吗 当然没问题 虚拟机是多好的发明 等

随机推荐

  • Flutter实现CombineExecutor进行多个异步分组监听,监听第一个异步执行的开始和最后一个异步执行结束时机。

    1 场景 我们在调用接口时 很多时候会同时调用多个接口 接口都是异步执行 我们很难知道调用的多个接口哪个会最后执行完成 我们有时候需要对最后一个接口执行完成的时机监听 所以基于该需求 设计了CombineExecutor 对类似的需求进行监
  • [pytest源码5]-pluggy深挖调用逻辑

    前言 本篇将详细分析如何通过PluginManager hook调用plugin实现 个人拙见 有错请各位指出 如果的我的文章对您有帮助 不符动动您的金手指给个Star 予人玫瑰 手有余香 不胜感激 GitHub pytest pluggy
  • PostgreSQL启动失败:本地计算机上的postgresq-x64-11服务启动后停止。某些服务或程序使用时将自动停止。

    PostgreSQL启动失败 本地计算机上的postgresq x64 11服务启动后停止 某些服务或程序使用时将自动停止 问题描述 安装PostgreSQL数据库后 启动服务时提示 本地计算机上的postgresq x64 11服务启动后
  • 云存储技术分析和架构框架设计

    摘要 随着互联网类新兴业务的激增 业务数据快速增长 云存储技术应运而生 本文深入剖析了云存储通用框架 硬件架构以及其底层原理这三个技术层面的差异性 为云存储架构框架设计提供了理论依据 再结合细分行业及其业务应用场景的差异性需求 最终确定了满
  • 小程序充值功能总结

    1 功能介绍 1 1 充值 功能描述 拉起小程序的支付组件 1 1 1 实现代码 1 1 2 注意要点 充值的关键点是openId和appId能匹配上 因为公众号和小程序生成的openId是不一样的 1 1 3 报错提示 1 request
  • 深度学习面试题总结-2022总结

    背景 社招 我估摸着校招聘一样会问 主要方向 自动驾驶 祝愿每一个求职者都可以顺利 谢谢大家的支持 我刷题的思路就是repeat repeat repeat 背 背 背 背着背着就懂了 刷的dp 二叉树目前一题没考 好苦 地平线1面 自我介
  • 用Android Studio制作一个简易的计算器,Android开发经验的有效总结

    首先建立按钮 这只是单单的建议按钮 连接按钮的代码在底下 public class MainActivity extends AppCompatActivity implements View OnClickListener private
  • spring boot + sql server大数据量批量新增

    先发出来 注释慢慢完善 获取类中所有属性注解 TableId和 TableField param instance return throws NoSuchFieldException public static Map
  • 安装ubuntu22.04系统,配置国内源以及ssh远程登录

    一 安装ubuntu22 04系统 原文连接 Ubuntu操作系统22 04版本安装教程 VMware虚拟机 wx63f86e949a470的技术博客 51CTO博客 1 点击界面左侧的开启此虚拟机 即可进入Ubuntu操作系统安装界面 点
  • Maven:搭建私服Nexus

    Nexus 安装 下载地址 小诀窍 使用迅雷下载比直接用浏览器下载快很多 https download sonatype com nexus 3 latest unix tar gz 上传 解压 上传到 Linux 系统 解压后即可使用 不
  • 【Blog 5】软件构造落幕,计算人生启程

    经历了7周的学习 软件构造课落下帷幕 但我知道 这对我而言 才只是一个开始 最后几章介绍面向可复用性 可维护性 正确性与健壮性的软件构造的技术 过程等等 看似是不同的角度 其实内部联系密切 尤其是关于继承 委托 SOLID原则等有关知识 都
  • FindObjectsOfType返回场景中所有该类型的组件集合

    做一个简单的demo 场景中准备七个空物体 层级关系如下 查找场景中所有出现的gggg组件 然后把test这个类挂在MainCamera这个物体上 然后运行场景 控制台打印结果为 3 总结 FindObjectsOfType返回场景中所有改
  • 测试产品说明书

    本篇文档是来自csdn 我觉得比较好 于是就收录了 尽管测试产品说明书不是所以软测人员都有机会去做 但还是值得一谈的 如果有幸在项目早期介入软件开发 并有一定的话语权的话 就相当有用了 在软件开发初始阶段发现软件缺陷将可能为项目节省大笔的开
  • 数据结构:队列Queue详解

    文章目录 一 队列的概念和特点 二 队列的使用 三 队列的简单实现 四 循环队列 一 队列的概念和特点 队列 只允许在一端进行插入数据操作 在另一端进行删除数据操作的特殊线性表 进行插入操作的一端称为队尾 删除操作的一端称队头 入队列 进行
  • 管理系统的设计与实现方法总结

    项目总结 1 项目开发背景 目前 国内外毕业论文选题一般采用两种方式 一种将毕业设计存在软盘上交 另一种则存放到教师的电脑上的一个共享目录内 但这两种方法都有各自的弊端 前一种方法不方便携带 速度慢 容量小 易损坏 后一种方法虽然解决了软盘
  • 关于互联网思维与技术团队的一些总结

    2017 7 4更 真正在底层工作的人员 跟站在高层的人看到的东西都是两个东西 真正的从底层走到高层才能看的更精准 同样的 从底层走到高层的人 也没有一直处在高层的远见与见识 我信奉公司处于什么阶段用什么样的人 没必要一开始就弄高精尖的人和
  • 基于Docker的Hadoop集群搭建

    基于Docker的Hadoop集群搭建 本文为在阿里云服务器上基于docker的Hadoop集群搭建 安装思路为 安装docker gt 运行docker导入ubuntu镜像 gt 运行ubuntu系统 gt 在系统中配置好单个节点 gt
  • FreeMarker整合Spring 3

    开发环境 System Windows WebBrowser IE6 Firefox3 JavaEE Server tomcat5 0 2 8 tomcat6 IDE eclipse MyEclipse 8 开发依赖库 JavaEE5 Sp
  • [QT编程系列-9]:C++图形用户界面编程,QT框架快速入门培训 - 3- QT窗体设计 - 自动布局

    目录 3 QT窗体设计 3 7 自动布局 3 7 1 自动布局 3 7 2 在主窗口中自动布局 3 7 3 在自动布局容器中自动布局 3 7 4 在widget中自动布局 3 7 5 自动布局工件 3 QT窗体设计 3 7 自动布局 3 7
  • 基于单片机火灾报警器仿真设计

    一 系统方案 1 本设计采用51单片机作为主控器 2 DS18B20采集温度值送到液晶1602显示 3 MQ2采集烟雾值 送到液晶1602显示 4 按键设置温度报警值 大于报警值 声光报警 二 硬件设计 原理图如下 三 单片机软件设计 1