【Proteus仿真】【51单片机】防火防盗GSM智能家居设计

news2024/10/5 13:14:43

文章目录

  • 一、功能简介
  • 二、软件设计
  • 三、实验现象
  • 联系作者


一、功能简介

本项目使用Proteus8仿真51单片机控制器,使用声光报警模块、LCD1602显示模块、DS18B20温度、烟雾传感器模块、按键模块、PCF8591 ADC模块、红外检测模块等。

主要功能:
系统运行后,LCD1602显示温度和MQ2烟雾传感器检测的温度及烟雾浓度;当检测温度或烟雾浓度高于设置的温度或烟雾阈值,则声光报警。可通过按键K3进入阈值设置模式,K1和K2进行加减调节,K4确定。在正常模式下,K1键开启布防,K2键关闭布防,当系统处于布防状态时,红外检测有人则声光报警,且LCD显示对应YES表示有人,否则取消报警,LCD显示No表示无人。若在布防状态下检测有人声光报警,也可通过K2键撤防取消报警。当有报警时,可将报警信息通过GSM传输手机显示。


二、软件设计

/*
作者:嗨小易(QQ:3443792007)

*/


//系统数据显示
void sys_data_show(void)
{
	while(1)
	{
		//温度显示
		lcd1602_show_nums(3,0,sys_ctrl.temp,2,0);
		//烟雾浓度显示
		lcd1602_show_nums(3,1,sys_ctrl.smoke,2,0);

		//温度阈值显示
		lcd1602_show_nums(10,0,sys_ctrl.temph,2,0);
		//烟雾浓度阈值显示
		lcd1602_show_nums(10,1,sys_ctrl.smokeh,2,0);

		//布防撤防显示
		if(sys_ctrl.fortify==1)lcd1602_show_string(14,0,"BF");
		else lcd1602_show_string(14,0,"CF");	

		//阈值设定,数据位置闪烁
		switch(sys_ctrl.mode)
		{
			case 1://温度
				lcd1602_show_string(10,0,"  ");
				delay_ms(100);
				lcd1602_show_nums(10,0,sys_ctrl.temph,2,0);
				break;
			case 2://烟雾浓度
				lcd1602_show_string(10,1,"  ");
				delay_ms(100);
				lcd1602_show_nums(10,1,sys_ctrl.smokeh,2,0);
				break;	
		}

		//有人显示
		if(sys_ctrl.man==1)lcd1602_show_string(13,1,"Yes");
		else lcd1602_show_string(13,1," No");

		break;			
	}
}

//系统数据设置
void sys_data_set(void)
{
	u8 key=0;
	key=key_scan(0);
	//模式设置
	if(key==KEY3_PRESS)
	{
		sys_ctrl.mode++;
		if(sys_ctrl.mode>=3)sys_ctrl.mode=1;
	}
	//在设置模式下,加
	else if(key==KEY1_PRESS)
	{	
		switch(sys_ctrl.mode)
		{
			case 0://设防
				sys_ctrl.fortify=1;
				break;
			case 1://温度阈值 
				sys_ctrl.temph++;
				if(sys_ctrl.temph>99)sys_ctrl.temph=0;
				break;
			case 2://烟雾浓度阈值 
				sys_ctrl.smokeh++;
				if(sys_ctrl.smokeh>99)sys_ctrl.smokeh=0;
				break;
		}				
	}
	//在设置模式下,减
	else if(key==KEY2_PRESS)
	{
		switch(sys_ctrl.mode)
		{
			case 0://撤防
				sys_ctrl.fortify=0;
				break;
			case 1://温度阈值 
				sys_ctrl.temph--;
				if(sys_ctrl.temph<0)sys_ctrl.temph=99;
				break;
			case 2://烟雾浓度阈值 
				sys_ctrl.smokeh--;
				if(sys_ctrl.smokeh<0)sys_ctrl.smokeh=99;
				break;
		}
	}
	//确定
	else if(key==KEY4_PRESS)
	{
		sys_ctrl.mode=0;		
	}
}

//系统功能控制
void sys_fun_ctrl(void)
{
	static u8 i=0;
	static u8 tponeflag=0; 
	static u8 ywoneflag=0;
	static u8 rqoneflag=0;
	//正常工作模式下
	if(sys_ctrl.mode==0)
	{
		//不管是否布防或撤防,只要监测到温度或烟雾浓度高于阈值则开启声光报警
		if(sys_ctrl.temp>sys_ctrl.temph || sys_ctrl.smoke>sys_ctrl.smokeh)
			beep_alarm(1,1000);
		if(sys_ctrl.temp>sys_ctrl.temph)//温度超限
		{
			LED_WD=0;
			i++;
			if(i%10==0)
				UART_SendString("\r\n注意...温度高\r\n");
			tponeflag=1;		
		}
		else 
		{
			LED_WD=1;
			if(tponeflag==1)
			{
				tponeflag=0;
				UART_SendString("\r\n温度在范围内\r\n");
			}		
		}
		//烟雾超限
		if(sys_ctrl.smoke>sys_ctrl.smokeh)
		{
			LED_YW=0;
			i++;
			if(i%10==0)
				UART_SendString("\r\n注意...烟雾高\r\n");
			ywoneflag=1;
		}
		else 
		{
			LED_YW=1;
			if(ywoneflag==1)
			{
				ywoneflag=0;
				UART_SendString("\r\n烟雾在范围内\r\n");
			}	
		}			
		
		//如果布防
		if(sys_ctrl.fortify==1)	
		{
			//检测到有人,声光报警
			if(sys_ctrl.man==1)
			{
				LED_RQ=0;
				beep_alarm(1,1000);
				i++;
				if(i%10==0)
					UART_SendString("\r\n注意...有人闯入!\r\n");
				rqoneflag=1;
			}
			//没有检测到有人,取消声光报警
			else
			{
				BEEP=1;LED_RQ=1;
				if(rqoneflag==1)
				{
					rqoneflag=0;
					UART_SendString("\r\n无人\r\n");
				}
			}
		}
		//如果撤防,不管有无人检测,均不声光报警
		else
		{
			BEEP=1;LED_RQ=1;		
		}					
	}		
}



三、实验现象

B站演示视频:https://space.bilibili.com/444388619

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

联系作者

视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1223937.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

合伙人如何承担合伙公司债务

合伙企业有不同的组织方式&#xff0c;包括普通合伙企业、特殊的普通合伙企业、有限合伙企业这三种&#xff0c;合伙人对于合伙企业的债务承担方式有以下几种情形&#xff1a; 1.普通合伙人合伙企业债务的承担 普通合伙企业由普通合伙人组成&#xff0c;合伙人对合伙企业债务承…

kernel32.dll下载地址分享,Kernel32.DLL文件丢失的修复指南

作为计算机用户&#xff0c;我们可能都曾遭遇过这样一条令人烦恼的错误信息&#xff1a; "程序无法启动&#xff0c;因为您的计算机中缺少Kernel32.dll"。在这种情况下&#xff0c;往往会引发一系列疑问&#xff1a; Kernel32.dll是什么&#xff1f;为什么它对我的电…

Java学习之路 —— Java高级

文章目录 前言1. 单元测试2. 反射2.1 获取Class对象的三种方式2.2 获取类的构造器的方法2.3 获取类的成员变量2.4 获取类的成员方法2.5 反射的作用 3. 注解3.1 自定义注解3.2 注解的原理3.3 元注解3.4 注解的解析 4. 动态代理5. 总结 前言 终于走到新手村的末端了&#xff0c;…

竞赛 题目:基于深度学习的中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分&#xff1a;4.2 损失函数&#xff1a;4.3 搭建seq2seq框架&#xff1a;4.4 测试部分&#xff1a;4.5 评价NLP测试效果&#xff1a;4.6 梯度截断…

Leetcode—142.环形链表II【中等】

2023每日刷题&#xff08;三十三&#xff09; Leetcode—142.环形链表II 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode *detectCycle(struct ListNode *head) {struct ListNode* …

腾讯云服务器怎么样好用吗?腾讯云服务器性能评测

近年来&#xff0c;腾讯云作为一家领先的云服务提供商&#xff0c;备受关注。尤其是最近两年&#xff0c;腾讯云在优惠活动上的力度非常大&#xff0c;被誉为良心云。其优惠政策吸引了越来越多的用户选择腾讯云作为他们的云服务提供商。 腾讯云双十一领9999代金券 https://111…

微信小程序动态生成表单来啦!你再也不需要手写表单了!

dc-vant-form 由于我们在小程序上涉及到数据采集业务&#xff0c;需要经常使用表单&#xff0c;微信小程序的表单使用起来非常麻烦&#xff0c;数据和表单是分离的&#xff0c;每个输入框都需要做数据处理才能实现响应式数据&#xff0c;所以我开发了dc-vant-form&#xff0c;…

shopee选品工具:Shopee选品工具—知虾精准选品与科学运营的利器

在如今竞争激烈的电商市场中&#xff0c;如何进行精准选品和科学运营成为了每个卖家都需要面对的问题。而Shopee选品工具——知虾&#xff0c;作为一款强大的大数据采集及分析平台&#xff0c;为卖家提供了全面的市场分析、产品分析和店铺分析功能&#xff0c;帮助卖家发现市场…

IPv4数据报格式

IPv4是IP协议的第四个版本(版本1-3和版本5都未曾使用过)IP地址不能反映任何有关主机位置的地理信息以前还有个逆地址解析协议RAPR(Reverse APR)&#xff0c;它的作用是使只知道自己MAC地址的主机能通过RAPR找到其IP地址&#xff0c;而现在的DHCP(Dynamic Host Configuration Pr…

Leetcode—876.链表的中间结点【简单】

2023每日刷题&#xff08;三十三&#xff09; Leetcode—876.链表的中间结点 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* middleNode(struct ListNode* head) {struct ListNod…

vue-组件通信(二)

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue-组件通信(二) 目录 组件通信(二) &#xff08;1&#xff09; props / $emit 1. 父组件向子组…

动手学深度学习——循环神经网络(原理解释与代码详解)

文章目录 一、循环神经网络1. 无隐状态的神经网络2. 有隐状态的循环神经网络3. 基于循环神经网络的字符级语言模型4. 困惑度5. 小结 二、循环神经网络的从零开始实现1. 独热编码2. 初始化模型参数3. 循环神经网络模型4. 预测5. 梯度裁剪6. 训练 一、循环神经网络 n元语法模型&…

想要精通算法和SQL的成长之路 - 摩尔投票法的运用

想要精通算法和SQL的成长之路 - 摩尔投票法的运用 前言一. 多数元素1.1 摩尔投票法 二. 多数元素II2.1 分析 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 多数元素 原题链接 1.1 摩尔投票法 简单来说&#xff0c;假设数组 num 的众数是 x&#xff0c;数组长度为n。 有…

超聚变服务器关闭超线程CPU的步骤(完整版)

前言: 笨鸟先飞&#xff0c;好记性不如烂笔头。 我们项目都用不到超线程CPU&#xff0c;所以调测设备的时候都需要关掉&#xff0c;最近新设备换成了超聚变的服务器&#xff0c;这篇记录我关闭&#xff08;超聚变&#xff09;服务器超线程CPU的方法步骤。 关闭超线程CPU的步骤…

【SpringBoot3+Vue3】四【实战篇】-前端(vue基础)

目录 一、项目前置知识 二、使用vscode创建 三、vue介绍 四、局部使用vue 1、快速入门 1.1 需求 1.2 准备工作 1.3 操作 1.3.1 创建html 1.3.2 创建初始html代码 1.3.3 参照官网import vue 1.3.4 创建vue应用实例 1.3.5 准备div 1.3.6 准备用户数据 1.3.7 通过…

C++题目练习第二十天__有效的完全平方数

题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目&#xff1a; 给你一个正整数 num 。如果 num 是一个完全平方数&#xff0c;则返回 true &#xff0c;否则返回 false 。 完全平方数 是一个可以写成某个整数的平方的整数。…

python基础练习题库实验3

题目1 编写一个程序&#xff0c;根据以下定价计算成本。 Number of itemsCost1-50每件3美元 邮费: 10美元超过50每件2美元 邮寄&#xff1a;免费 举个例子&#xff1a; 代码 items_num input("Enter the number of items: ") items_num_i int(items_num) ite…

Vite 启动默认只能访问localhost解决方法

事情的经过是因为我需要测试本地项目的接口,然后因为burp默认不抓取localhost,127.0.0.1 .而且我也不想去修改burp. 所以我通过本地IP地址访问项目, 发现项目无法访问。 默认启动 所以特此记录一下。 在本地项目的package.json 中需要运行的脚本后 添加 --host即可。 具体如下…