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

仿真设计|基于51单片机的温度与烟雾报警系统

目录

具体实现功能

设计介绍

51单片机简介

资料内容

仿真实现(protues8.7)

程序(Keil5)

全部内容

资料获取


具体实现功能

(1)LCD1602实时监测及显示温度值和烟雾浓度值;
(2)可通过三个按键设置烟雾报警值和温度报警值;
(3)可实现手动紧急报警和手动取消报警功能;
(4)温度或烟雾超过阈值时,蜂鸣器响,黄灯亮;
(5)烟物测量范围:0—9等级;温度测量范围:0—99℃。

仿真演示视频:

50-基于51单片机的温度与烟雾报警系统-仿真视频

设计介绍

51单片机简介

51单片是一种低功耗、高性能CMOS-8位微控制器,拥有灵巧的8位CPU和可编程Flash,使得51单片机为众多嵌入式控制应用系统提供灵活、高效的解决方案。

本设计所使用的芯片可兼容以下所有的51系列单片机(包括AT系列和STC系列)。

资料内容

仿真实现(protues8.7)

本设计利用protues8.7软件实现仿真设计,具体如图。

程序(Keil5)

本设计利用KEIL5软件实现程序设计。

主函数如下:

///
void main (void)
{
	u8 key;
	u8 SmokeFlag = false;
	u8 TempFlag = false;
	u8 IntrudeFlag = false;
	wendu=check_wendu();		  //初始化时调用温度读取函数 防止开机85°C
	Init1602();			  				//调用初始化显示函数
	LCD_Write_String(0,0,"SET T:00   E:000");  //开机界面
	LCD_Write_String(1,0,"NOW T:00   E:000");  
	delay_ms(1000);
	wendu=check_wendu();		  //初始化时调用温度读取函数 防止开机85°C
	Mode=0;
	while (1)        					//主循环
	{	
		key=Key_Scan();					//按键扫描
		yanwu=Get_ADC0832();				//读取烟雾值
		yanwu=yanwu/25;					// 缩小CO检测结果(在0-99)
		if(yanwu>99)
		{
			yanwu=99;
		}
		wendu=check_wendu();	  //读取温度值
		
		if(Key1==0)
		{
			delay_ms(10);//去抖动
			if(Key1==0)
			{
				Mode++;
			}
			while(!Key1);
		}
		
		switch(Mode)						//判断模式的值
		{
			case 0:								//监控模式
			{
				write_com(0x38);//屏幕初始化
				write_com(0x0c);//打开显示 无光标 无光标闪烁
				Display_1602(yushe_wendu,yushe_yanwu,wendu,yanwu);  //显示预设温度,预设烟雾,温度值,烟雾值
				if((yanwu>=yushe_yanwu)||(wendu>=(yushe_wendu*10) && wendu<=800))	  //烟雾值或温度值大于等于预设值时
				{
					Buzzer=0;			  		//蜂鸣器报警
				}
				else					  					//烟雾值小于预设值时
				{
					Buzzer=1;			  		 //蜂鸣器报警
				}
				break;	
			}
			case 1://预设温度模式
			{
				SelectPosition(0,7) ;					//指定位置
				write_com(0x0d);							//阴影闪烁
				if(key==KEY_ADD)							//加键按下
				{
					yushe_wendu++;					    //预设温度值(阀值)加1
					if(yushe_wendu>=99)			 		//当阀值加到大于等于99时
					yushe_wendu=99;					 		//阀值固定为99
					LCD_Write_Char(0,6,yushe_wendu,2) ;//显示预设温度
				}
				if(key==KEY_MINUS)				 		//减键按下
				{
					if(yushe_wendu<=1)					//当温度上限值减小到1时
					yushe_wendu=1;          		//固定为1
					yushe_wendu--;							//预设温度值减一,最小为0
					LCD_Write_Char(0,6,yushe_wendu,2) ;//显示预设温度
				}
				break;			  								//执行后跳出switch
			}
			case 2:				//预设烟雾模式
			{
				SelectPosition(0,15) ;				//指定位置	
				write_com(0x0d);							//打开显示 无光标 光标闪烁
				if(key==KEY_ADD)							//加键按下
				{
					if(yushe_yanwu>=255)        //当阀值加到大于等于255时
					yushe_yanwu=254;            //阀值固定为254
					yushe_yanwu++;					    //预设烟雾值(阀值)加1,最大为255
					LCD_Write_Char(0,13,yushe_yanwu,3) ;//显示预设烟雾
				}
				if(key==KEY_MINUS)						//减键按下
				{
					if(yushe_yanwu<=1)					//当烟雾上限值减小到1时
					yushe_yanwu=1;          	//固定为1
					yushe_yanwu--;							//预设温度值减一,最小为0	  
					LCD_Write_Char(0,13,yushe_yanwu,3) ;//显示预设烟雾
				}
				break;
			}
			default	:	
			{
				write_com(0x38);//屏幕初始化
				write_com(0x0c);//打开显示 无光标 无光标闪烁
				Mode=0;			//恢复正常模式
				break;
			}
		}
		if(s1==0)//手动启动火灾报警
		{
			Buzzer=0;
		}
	}
} 

程序运行结果如图:

全部内容

全部资料包括程序(keil5)、protues仿真(protues8.7)、开发资料、资料使用介绍、仿真视频、程序讲解视频、仿真讲解视频、最小系统介绍视频等。

资料获取

https://docs.qq.com/doc/DT0tjWUR1b3J3dWNn


http://www.kler.cn/a/527985.html

相关文章:

  • minimind - 从零开始训练小型语言模型
  • 理解神经网络:Brain.js 背后的核心思想
  • 23.Word:小王-制作公司战略规划文档❗【5】
  • STM32CubeMX6.13.0打开后不显示界面,但是任务管理器显示该程序正在运行
  • FFmpeg(7.1版本)编译:Ubuntu18.04交叉编译到ARM
  • 基于Python的药物相互作用预测模型AI构建与优化(下.代码部分)
  • Spring 通过三级缓存解决循环依赖的深度剖析
  • MySQL 存储函数:数据库的自定义函数
  • 【Python蓝桥杯备赛宝典】
  • 落地 ORB角点检测与sift检测
  • Harbor 部署
  • 一文回顾讲解Java中的集合框架
  • 14-8C++STL的queue容器
  • OPENGLPG第九版学习 - OpenGL概述
  • 计算机网络一点事(20)
  • MySQL注入中load_file()函数的使用
  • 雨晨 27788.2025 企业版
  • Autogen_core源码:_agent_instantiation.py
  • 松灵机器人 scout ros2 驱动 安装
  • Elasticsearch Queries
  • UE学习日志#17 C++笔记#3 基础复习3
  • mysql 数据去重技术——全球数据备份—未来之窗跨平台操作
  • Java手写简单Merkle树
  • 【Java异步编程】基于任务类型创建不同的线程池
  • Python-基于mediapipe,pyautogui,cv2和numpy的电脑手势截屏工具(进阶版)
  • 【Rust】18.2. 可辩驳性:模式是否会无法匹配