基于51单片机的可燃性气体报警器设计

news2024/9/22 18:34:37

文章目录

  • 前言
  • 资料获取
  • 设计介绍
  • 设计程序
  • 具体实现截图
  • 设计获取


前言

💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
单片机设计精品实战案例
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

资料获取

文章底部名片,详细资料联系我。

设计介绍

基于51单片机的可燃性气体报警器设计旨在实时监测环境中的可燃气体浓度,并在浓度超标时及时发出报警信号,以保障生产和生活环境的安全。以下是对该设计的详细介绍:

设计目标
开发一个基于51单片机的可燃性气体报警器,能够实时监测环境中的可燃气体浓度,并在浓度超标时及时发出报警信号,以防止火灾等安全事故的发生。

核心元件
传感器:采用MQ-4型可燃气体传感器,该传感器灵敏度高、响应速度快、稳定性好。当环境中存在可燃气体时,传感器的电阻值会发生变化,从而检测气体浓度。
单片机:选用51单片机(如AT89S52)作为核心控制器,负责接收传感器采集的数据,并根据预设的阈值判断是否触发报警。
显示模块:采用LCD1602液晶显示屏,用于实时显示当前环境中的可燃气体浓度值,便于用户直观了解环境状况。
报警模块:包含声光报警设备,如蜂鸣器和LED灯。当可燃气体浓度超过安全阈值时,会发出声音和灯光报警,以提醒用户注意安全。

设计程序

#include<REG52.H>
#include "lcd12864.h"

#define uint unsigned int 
#define uchar unsigned char
	
sbit K1=P3^2; //K1按键定义
sbit K2=P3^3; //K2按键定义
sbit K3=P3^4; //K3按键定义
sbit K4=P3^5; //K4按键定义
sbit PLAY=P3^0;//语音报警脚定义
#define AD P1  //AD数据脚定义
sbit A0=P2^6;
sbit B0=P2^7;
sbit C0=P3^7;
unsigned int Send=800;
unsigned int temp=0;
uchar flag=0,flag1=0;
unsigned char EXT=0;
unsigned char bian=0;
  
uchar keynum=0,keynum1=0;

unsigned char keyscan()	   //按键子程序	4个按键按下按键返回对应的按键值 K1:返回1,K2:返回2,K3:返回3,K4:返回4,无按键按下返回0.
{
  if(K1==0)		  //按键一按下
  { 
		delay(5);
      if(K1==0)
		{
		  while(!K1); //松手检测
		  return 1;		//返回1给函数表示按键1按下
		}
  }
    if(K2==0)	 //按键二按下
  {
		delay(5);
		if(K2==0)
		{
		  while(!K2);
		  return 2;	 //返回2给函数表示按键2按下
		}
  }
  if(K3==0)	   //按键三按下
  {
		delay(5);
		if(K3==0)
		{
		  while(!K3);
		  return 3;	   //返回3给函数表示按键3按下
		}
  }
  if(K4==0)		//按键四按下
  {
		delay(5);
		if(K4==0)
		{
		  while(!K4);
		  return 4;	 //返回4给函数表示按键4按下
		}
  }
  return 0;		   //没有按键按下时返回0
}

void Task1()
{
  unsigned int vout;//	AD百分比值
	unsigned int VGET;	//AD电压值
  uchar str[]="0123";
	unsigned char str4[]="012";
	uchar str3[]="00000000";
	uchar str1[]="0120";
	uchar str2[]="0124";
	unsigned char str5[]="0000";
	 
	str2[0]='9'+14;	//将通道和通道值存入对应的显示数组
  str2[1]='9'+15;
	str2[2]='5'+10;
  str2[3]='5'+EXT;
	if(EXT==0)			//判断通道标志等于零
	{
	   A0=0;B0=0;C0=0;	//开通道0
	}
	if(EXT==1)		  //判断通道标志等于一
	{
		A0=1;B0=0;C0=0;	  //开通道1
	}
	if(EXT==2)		//判断通道标志等于二
	{
		A0=0;B0=1;C0=0;	 //开通道2
	}
	if(EXT==3)		//判断通道标志等于三
	{
		A0=1;B0=1;C0=0;//开通道3
	}	 
	if(EXT==4)	  //判断通道标志等于四
	{
	  A0=0;B0=0;C0=1;	 //开通道4
	}//str4[0]='5'+12;
	temp=AD;
	str4[0]='9'+8;		 //将设置的报警值存入显示数组
	str4[1]='9'+9;
	str4[2]='9'+19;
	str5[0]='5'+10;
	str5[1]='5'+Send%1000/100;
	str5[2]='5'+Send%100/10;
  str5[3]='5'+11;
	disnumstr2(3,0,str4,1);	 //显示设置的报警值
	disnumstr2(3,6,str5,1);
	vout=1020/255*temp;	 //AD值转成百分比
	VGET=5100/255*temp;	 //AD值转成电压值
	if(VGET>5100)VGET=5000;
	if(vout>1000)vout=1000;
	if(vout>=1000)
	str1[0]='5'+vout/1000;
	else
	str1[0]='5'+10;				 //将百分比值存入显示数组
	str1[1]='5'+vout%1000/100;
	str1[2]='5'+vout%100/10;
  str1[3]='5'+11;
	str3[0]='9'+17;
	str3[1]='9'+18;
	str3[2]='9'+19;
	str3[3]='5'+10;
	str3[4]='5'+VGET/1000;	  //将电压值存入显示数组
	str3[5]='9'+20;
	str3[6]='5'+VGET%1000/100;
	str3[7]='9'+16;
   //str1[0]='5'+temp%100/10;
  disnumstr2(0,0,str,1);	//显示百分比
  disnumstr2(0,8,str1,1);
	disnumstr2(1,4,str2,1);	//显示通道值
	disnumstr2(2,0,str3,1);//显示电压值
	if(vout>Send) //超过报警值则报警
	{
		PLAY=1;
	}
	else		//否则不报警
	{
	    PLAY=0;	
	}	
}
void Task2()
{
	 unsigned char str4[]="012345";
	 unsigned char str3[]="0123";  
	 
	if(keynum1==1)		  //加按键按一下设置值加1%
	{
    	 Send=Send+10;
		 if(Send>=1000)
		 Send=0;
		 keynum1=0;
	}
	if(keynum1==2)	 //减按键按一下设置值减1%
	{
	     Send=Send-10;
		 if(Send==65535)
		 Send=990;
		 keynum1=0;
    }
	str4[0]='5'+12;		 //将设置值存入显示数组
	str4[1]='5'+13;
	str4[2]='5'+14;
	str4[3]='5'+15;
  str4[4]='5'+16;
	str4[5]='5'+17;
	str3[0]='5'+10;
	str3[1]='5'+Send%1000/100;
	str3[2]='5'+Send%100/10;
  str3[3]='5'+11;
	disnumstr2(1,4,str3,1);	   //显示设置界面和设置值
	disnumstr2(0,2,str4,1);

}
void main()
{
  uchar i;uchar xx=0xe0;
	init();    //液晶初始化
	delay(100);
	lcdclr();
  PLAY=0;
  for(;;)
  {
    keynum=keyscan();	   //取出按键值
	  if(keynum!=0)	       //判断是否有按键按下
    {
		   keynum1=keynum;	 //将按键的值固定起来
		   keynum=0;		     //清空按键中间变量的值  
	  }
	  if(keynum1==3)	     //当设置键按下 浓度显示界面和浓度报警设置界面切换
	  {
	    keynum1=0;	  //清空按键值方便按键下次检测
		  flag++;		    //任务标志位切换
		  if(flag==2)	  //flag的值最多只能是0,和1.当flag到2时
		  flag=0;		    //则将flag的值清空
		  lcdclr();	    //每次任务切换都要做清屏
	  }
  	if(flag==0)	      //判断是否是浓度显示界面
	  Task1();          //浓度显示界面
	  if(flag==1)	      //判断是否是浓度报警设置界面
    Task2();		      //浓度报警设置界面
	  if(keynum1==4)	  //当通道按键按下
	  {
	     EXT++;		   //通道标志加一
		   if(EXT==5)  //加到5时
		   EXT=0;	     //通道清零
       keynum1=0;	 //清空按键值
	  }
  }
}


具体实现截图

在这里插入图片描述

在这里插入图片描述

设计获取

文章下方名片联系我即可~

精彩专栏推荐订阅:在下方专栏👇🏻

毕业设计精品实战案例

收藏关注不迷路!!

🌟文末获取设计🌟

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

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

相关文章

《财富之眼:用经济思维看清世界》pdf电子书下载

《财富之眼&#xff1a;用经济思维看清世界》pdf电子书下载 内容简介 一切社会现象都是经济现象&#xff0c;我们只能赚到自己认知范围内的 钱。我国社会主要矛盾已经转化为人民日益增长的美好生活需要和不 平衡不充分的发展之间的矛盾&#xff0c;其中“不平衡不充分”很大程…

无法删除选定的端口,不支持请求【笔记】

场景&#xff1a;在删除打印机端口时&#xff0c;提示&#xff1a;“无法删除选定的端口&#xff0c;不支持请求”&#xff0c;如下图所示。 以下以删除USB036端口为示例&#xff0c;操作步骤如下&#xff1a; 在注册表编辑器中&#xff0c;从以下注册表项中“计算机\HKEY_LO…

C++_22_异常

文章目录 异常概念&#xff1a;**抛出异常&#xff1a;**关键字&#xff1a; **捕获异常&#xff1a;****栈解旋&#xff1a;****异常的接口声明&#xff1a;****异常对象的生命周期&#xff1a;**1 传递异常对象【不使用】2 传递异常对象指针【不使用】3 传递异常对象引用【**…

Xilinx系FPGA学习笔记(八)FPGA与红外遥控

系列文章目录 文章目录 系列文章目录红外通信简单介绍红外协议分析 FPGA实现红外通信 红外通信 简单介绍 利用红外线来传送&#xff0c;不干扰其他电器设备工作&#xff0c;也不会影响周边环境&#xff0c;若对发射信号进行编码&#xff0c;可实现多路红外遥控功能。 红外遥控…

全面介绍 CSS 属性值计算 —— 掌握它就了解大部分 CSS

CSS 的核心之一就在此&#xff0c;直接影响我们开发中的调试和布局&#xff01;&#xff01;&#xff01; 举个 &#x1f330;&#xff1a;页面上存在一个 h1 元素&#xff0c;不设置任何样式&#xff0c;但是当我们点开 computed 查看&#xff0c;几乎 MDN 上的 CSS 属性都存…

C++高精度计时方法总结(测试函数运行时间)

文章目录 一、clock()函数——毫妙级二、GetTickCount()函数&#xff08;精度16ms左右&#xff09;——毫妙级三、高精度时控函数QueryPerformanceCounter()——微妙级四、高精度计时chrono函数——纳妙级五、几种计时比较六、linux下的计时函数gettimeofday()-未测试参考文献 …

C语言6大常用标准库 -- 4.<math.h>

目录 引言 4. C标准库--math.h 4.1 简介 4.2 库变量 4.3 库宏 4.4 库函数 4.5 常用的数学常量 &#x1f308;你好呀&#xff01;我是 程序猿 &#x1f30c; 2024感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#xff0c;挖掘无限可能&#xff0c;共同成长&…

《他们的奇妙时光》圆满收官,葛秋谷新型霸总获好评

9月21日&#xff0c;由王枫、张开法执导&#xff0c;周洁琼、葛秋谷领衔主演的奇幻爱情题材都市喜剧《他们的奇妙时光》圆满收官。该剧讲述了意外被游戏角色刑天附体的设计师宋灵灵&#xff0c;为修复游戏漏洞&#xff0c;被迫与能压制刑天的甲方总裁萧然同居&#xff0c;两人在…

LDR6020在索尼PS5 VR2适配器中的应用技术方案探讨

随着虚拟现实&#xff08;VR&#xff09;技术的日益成熟&#xff0c;索尼PlayStation VR2&#xff08;简称PS VR2&#xff09;作为新一代VR设备&#xff0c;凭借其出色的性能和沉浸式体验&#xff0c;成为了游戏界的焦点。为了进一步扩大PS VR2的应用范围&#xff0c;索尼推出了…

深度学习02-pytorch-01-张量的创建

深度学习 pytorch 框架 是目前最热门的。 深度学习 pytorch 框架相当于 机器学习阶段的 numpy sklearn 它将数据封装成张量(Tensor)来进行处理&#xff0c;其实就是数组。也就是numpy 里面的 ndarray . pip install torch1.10.0 -i https://pypi.tuna.tsinghua.edu.cn/simp…

LLMs之LCM:《MemLong: Memory-Augmented Retrieval for Long Text Modeling》翻译与解读

LLMs之LCM&#xff1a;《MemLong: Memory-Augmented Retrieval for Long Text Modeling》翻译与解读 导读&#xff1a;MemLong 是一种新颖高效的解决 LLM 长文本处理难题的方法&#xff0c;它通过外部检索器获取历史信息&#xff0c;并将其与模型的内部检索过程相结合&#xff…

分布式网络存储技术是什么?分布式存储技术有哪些

分布式储存是指将数据分散存储在多个节点上的一种技术。但是你们知道分布式网络存储技术是什么&#xff1f;相比传统的集中式存储&#xff0c;分布式储存具有更高的可靠性和可用性。分布式网络存储是一种将数据分散存储在多个节点或服务器上的架构。 分布式网络存储技术是什么&…

开源 AI 智能名片 S2B2C 商城小程序与营销工具的快速迭代

摘要&#xff1a;本文以开源 AI 智能名片 S2B2C 商城小程序为研究对象&#xff0c;探讨在营销工具快速迭代的背景下&#xff0c;该小程序如何借鉴以拼多多为代表的“小程序拼团”、以蘑菇街为代表的“小程序直播”、以花点时间为代表的“小程序按月订花”等经典案例&#xff0c…

springboot注册和注入组件方式概览

IoC&#xff1a;Inversion of Control&#xff08;控制反转&#xff09; 控制&#xff1a;资源的控制权&#xff08;资源的创建、获取、销毁等&#xff09; 反转&#xff1a;和传统的方式不一样了 DI &#xff1a;Dependency Injection&#xff08;依赖注入&#xff09; 依赖&…

【HTTPS】对称加密和非对称加密

HTTPS 是什么 HTTPS 是在 HTTP 的基础上&#xff0c;引入了一个加密层&#xff08;SSL&#xff09;。HTTP 是明文传输的&#xff08;不安全&#xff09; 当下所见到的大部分网站都是 HTTPS 的&#xff0c;这都是拜“运营商劫持”所赐 运营商劫持 下载⼀个“天天动听“&…

剖析枚举类型的使用与优点

枚举类型顾名思义——就是把所有的值一一列举出来 列如星期 把每一项都列举出来就是枚举 这些可能取值都是有值的&#xff0c;默认从0开始&#xff0c;依次递增1&#xff0c;当然在声明枚举类型的时候也可以赋初值&#xff0c; 要是在某一项赋初值之后&#xff0c;后面的就会…

客户转化预测以及关键因素识别_支持向量机与相关性分析

数据入口&#xff1a;数字营销转化数据集 - Heywhale.com 数据集记录了客户与数字营销活动的互动情况。它涵盖了人口统计数据、营销特定指标、客户参与度指标以及历史购买数据&#xff0c;为数字营销领域的预测建模和分析提供了丰富的信息。 数据说明&#xff1a; 字段说明Cu…

JavaEE: 创造无限连接——网络编程中的套接字

文章目录 Socket套接字TCP和UDP的区别有连接/无连接可靠传输/不可靠传输面向字节流/面向数据报全双工/半双工 UDP/TCP api的使用UDPDatagramSocketDatagramPacketInetSocketAddress练习 TCPServerSocketSocket练习 Socket套接字 Socket是计算机网络中的一种通信机制&#xff0…

Clion使用vcpkg管理C/C++包

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Clion安装vcpkg二、使用步骤1.切换到清单模式2.开始安装包 三、测试代码总结 前言 Linux上的库基本都可以通过apt或yum等包管理工具来在线安装包&#xff…

cgroup基本原理与使用

Linux cgroups是Linux内核中的一项强大功能&#xff0c;允许用户对进程进行**资源限制、优先级控制、监控和隔离。它主要用于管理和控制计算资源的分配&#xff0c;特别是在容器技术&#xff08;如 Docker 和 LXC&#xff09;中得到了广泛应用。 1. Cgroups的基本概念和原理 …