【毕业设计】30-基于单片机矿井瓦斯_气体浓度_烟雾浓度报警设计(原理图+源代码+仿真+答辩论文+答辩PPT)

news2024/10/7 10:16:26

【毕业设计】30-基于单片机矿井瓦斯/气体浓度/烟雾浓度报警设计(原理图+源代码+仿真+答辩论文+答辩PPT)

文章目录

  • 【毕业设计】30-基于单片机矿井瓦斯/气体浓度/烟雾浓度报警设计(原理图+源代码+仿真+答辩论文+答辩PPT)
    • 任务书
    • 设计说明书
      • 摘要
      • 设计框架架构
      • 设计说明书及设计文件
      • 源码展示

任务书

研究内容:
瓦斯等可燃危险气体的浓度检测是保证煤矿安全生产的重要前提。利用单片机智能控制技术设计一种瓦斯检测系统对矿井瓦斯浓度自动进行实时监测,并在超过安全值时报警。
研究方法:
本次矿井瓦斯浓度检测系统设计以单片机为控制核心,由气体传感器电路、显示电路、报警电路等电路模块组成硬件电路,编制相关控制软件,实现矿井瓦斯气体的浓度进行实时监测,并在超过安全值时报警。
要求:
1、对矿井瓦斯浓度检测系统进行系统结构总体设计;
2、设计瓦斯浓度检测系统的硬件电路;
3、编写瓦斯浓度检测的软件实现程序,并对电路进行仿真研究。
资料链接
1.原理图
2.仿真工程
3.源代码
4.原理图截图
5.仿真截图
6.答辩论文
7.答辩PPT

设计说明书

摘要

本设计第一章主要讲述了矿井瓦斯气体浓度检测系统设计的现状、通过对于目前社会中使用的气体检测系统的使用调查、功能介绍、以及对于当前气体检测的看法、气体使用过程中遇到的问题。针对与目前对于气体检测系统的使用场景分析。第二章主要讲述了矿井瓦斯气体浓度检测系统设计的设计与实现方案分析,是否可以满足目前设计的要求,根据设计要求来对元器件选型,驱动电路选择。绘制出大概的设计框架。第三章主要讲述了矿井瓦斯气体浓度检测系统设计的硬件设计,分别对单片机的最小系统;按键模块、报警模块、LCD1602显示模块、蜂鸣器模块、ADC采集模块、LED显示模块电路原理讲解、析,最后并对整个电路进行了总结。第四章主要讲述了矿井瓦斯气体浓度检测系统设计的软件设计,编程软件Keil进行了详细的介绍,编写单个模块的程序流程,通过流程图来对程序编写,按键模块、报警模块、LCD1602显示模块、蜂鸣器模块、ADC采集模块、LED显示模块程序。第五章主要讲述了矿井瓦斯气体浓度检测系统设计的仿真实现,通过Proteus软件对系统仿真,并验证所设计的功能是否满足要求。

设计框架架构

在这里插入图片描述前 言 1
第一章 绪论 2
第一节 研究背景 2
第二节 研究意义 3
第三节 研究现状 3
第四节 本文的主要研究内容 4
第五节 本章小结 4
第二章 矿井瓦斯气体浓度检测系统设计方案分析 6
第一节 气体传感器介绍 6
一、气体传感器原理 6
二、气体传感器分类 6
第二节 系统设计方案需求 7
第三节 系统结构总框图 8
第四节 本章小结 9
第三章 矿井瓦斯气体浓度检测系统设计硬件电路设计 10
第一节 单片机最小系统模块设计 10
一、单片机的简介 10
二、复位电路设计 11
三、晶振电路设计 11
第二节 气体传感器电路设计 12
第三节 按键电路设计 13
第四节 LED显示电路设计 13
第五节 LCD液晶显示电路设计 14
第六节 蜂鸣器报警电路设计 15
第七节 系统总电路图 16
第八节 本章小结 16
第四章 矿井瓦斯气体浓度检测系统设计的软件设计 18
第一节 Keil软件介绍 18
第二节 软件总设计 18
第三节 按键模块程序设计 19
第四节 LED显示及蜂鸣器模块程序设计 20
第五节 LCD液晶显示模块程序设计 21
第六节 气体传感器模块程序设计 22
第七节 本章小结 23
第五章 瓦斯气体浓度检测系统的仿真 24
第一节 仿真软件介绍 24
第二节 功能仿真并分析 24
一、仿真总电路 24
二、系统功能仿真 25
第三节 本章小结 30
结 论 32
致 谢 33
参考文献 34
附 录 36
一、英文原文 36
二、英文翻译 38
三、工程图纸 40
四、源程序 41

设计说明书及设计文件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

源码展示

在这里插入图片描述

#include <reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include "intrins.h"											   
#define     u8  			unsigned char
#define     u16   		unsigned int
#define     uchar  			unsigned char
#define     uint   		unsigned int
uchar yushe_yanwu=100;				//瓦斯预设值
uchar yanwu;					 			//用于读取ADC数据
//运行模式  
uchar Mode=0;				 				//=1是设置温度阀值  =2是设置瓦斯阀值	=0是正常监控模式
//管脚声明
sbit Led_Reg		 =P2^2;				 //红灯
sbit Led_Yellow  =P2^4;				 //黄灯
sbit Buzzer    	 =P2^0;				 //蜂鸣器
sbit Fan    	 	 =P3^3;				 //
/********************************************************************
* 名称 : delay_1ms()
* 功能 : 延时1ms函数
* 输入 : q
* 输出 : 无
***********************************************************************/
void delay_ms(uint q)
{
	uint i,j;
	for(i=0;i<q;i++)
		for(j=0;j<110;j++);
}
/***********************************************************************************************************
LCD1602相关函数
***********************************************************************************************************/
//LCD管脚声明 (RW引脚实物直接接地,因为本设计只用到液晶的写操作,RW引脚一直是低电平)
sbit LCDRS = P2^7;
sbit LCDEN = P2^6;
sbit D0		 = P0^0;
sbit D1		 = P0^1;
sbit D2		 = P0^2;
sbit D3		 = P0^3;
sbit D4		 = P0^4;
sbit D5		 = P0^5;
sbit D6		 = P0^6;
sbit D7		 = P0^7;
//LCD延时
void LCDdelay(uint z)		  //该延时大约100us(不精确,液晶操作的延时不要求很精确)
{
  uint x,y;
  for(x=z;x>0;x--)
    for(y=10;y>0;y--);
}
void LCD_WriteData(u8 dat)	  
{
	if(dat&0x01)D0=1;else D0=0;
	if(dat&0x02)D1=1;else D1=0;
	if(dat&0x04)D2=1;else D2=0;
	if(dat&0x08)D3=1;else D3=0;
	if(dat&0x10)D4=1;else D4=0;
	if(dat&0x20)D5=1;else D5=0;
	if(dat&0x40)D6=1;else D6=0;
	if(dat&0x80)D7=1;else D7=0;
}
//写命令
void write_com(uchar com)
{
  LCDRS=0;				  
	LCD_WriteData(com);
//  DAT=com;
  LCDdelay(5);
  LCDEN=1;
  LCDdelay(5);
  LCDEN=0;
}
//写数据
void write_data(uchar date)
{
  LCDRS=1;
	LCD_WriteData(date);
//  DAT=date;
  LCDdelay(5);
  LCDEN=1;
  LCDdelay(5);
  LCDEN=0;
}
/*------------------------------------------------
              选择写入位置
------------------------------------------------*/
void SelectPosition(unsigned char x,unsigned char y) 
{     
	if (x == 0) 
	{     
		write_com(0x80 + y);     //表示第一行
	}
	else 
	{      
		write_com(0xC0 + y);      //表示第二行
	}        
}
/*------------------------------------------------
              写入字符串函数
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) 
{     
	SelectPosition(x,y) ;
	while (*s) 
	{     
		write_data( *s);     
		s ++;     
	}
}
//========================================================================
// 函数: void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l)
// 应用: LCD_Write_Char(0,1,366,4) ;
// 描述: 在第0行第一个字节位置显示366的后4位,显示结果为 0366
// 参数: x:行,y:列,s:要显示的字,l:显示的位数
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注: 最大显示65535
//========================================================================
void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l) 
{     
	SelectPosition(x,y) ;
	if(l>=5)
		write_data(0x30+s/10000%10);	//万位
	if(l>=4)
		write_data(0x30+s/1000%10);		//千位
	if(l>=3)
		write_data(0x30+s/100%10);		//百位
	if(l>=2)
		write_data(0x30+s/10%10);			//十位
	if(l>=1)
		write_data(0x30+s%10);		//个位
}
/*1602指令简介
  write_com(0x38);//屏幕初始化
  write_com(0x0c);//打开显示 无光标 无光标闪烁
  write_com(0x0d);//打开显示 阴影闪烁
  write_com(0x0d);//打开显示 阴影闪烁*/
//1602初始化
void Init1602()
{
  uchar i=0;
  write_com(0x38);//屏幕初始化
  write_com(0x0c);//打开显示 无光标 无光标闪烁
  write_com(0x06);//当读或写一个字符是指针后一一位
  write_com(0x01);//清屏	
}
void Display_1602(yushe_yanwu,temp)
{
	//显示预设温度

	
	//显示预设瓦斯
	LCD_Write_Char(0,13,yushe_yanwu,3) ;
	
	
	//时时瓦斯
	LCD_Write_Char(1,13,temp,3) ;
}
/***********************************************************************************************************
ADC0832相关函数
***********************************************************************************************************/
sbit ADCS 	=P1^5; //ADC0832 片选
sbit ADCLK  =P1^2; //ADC0832 时钟
sbit ADDI 	=P1^3; //ADC0832 数据输入		/*因为单片机的管脚是双向的,且ADC0832的数据输入输出不同时进行,
sbit ADDO 	=P1^3; //ADC0832 数据输出		/*为节省单片机引脚,简化电路所以输入输出连接在同一个引脚上
//========================================================================
// 函数: unsigned int Adc0832(unsigned char channel)
// 应用: 		temp=Adc0832(0);
// 描述: 读取0通道的AD值
// 参数: channel:通道0和通道1选择
// 返回: 选取通道的AD值
// 版本: VER1.0
// 日期: 2015-05-29
// 备注: 
//========================================================================
unsigned int Adc0832(unsigned char channel)
{
	uchar i=0;
	uchar j;
	uint dat=0;
	uchar ndat=0;
	uchar  Vot=0;
	if(channel==0)channel=2;
	if(channel==1)channel=3;
	ADDI=1;
	_nop_();
	_nop_();
	ADCS=0;//拉低CS端
	_nop_();
	_nop_();
	ADCLK=1;//拉高CLK端
	_nop_();
	_nop_();
	ADCLK=0;//拉低CLK端,形成下降沿1
	_nop_();
	_nop_();
	ADCLK=1;//拉高CLK端
	ADDI=channel&0x1;
	_nop_();
	_nop_();
	ADCLK=0;//拉低CLK端,形成下降沿2
	_nop_();
	_nop_();
	ADCLK=1;//拉高CLK端
	ADDI=(channel>>1)&0x1;
	_nop_();
	_nop_();
	ADCLK=0;//拉低CLK端,形成下降沿3
	ADDI=1;//控制命令结束
	_nop_();
	_nop_();
	dat=0;
	for(i=0;i<8;i++)
	{
		dat|=ADDO;//收数据
		ADCLK=1;
		_nop_();
		_nop_();
		ADCLK=0;//形成一次时钟脉冲
		_nop_();
		_nop_();
		dat<<=1;
		if(i==7)dat|=ADDO;
	}
	for(i=0;i<8;i++)
	{
		j=0;
		j=j|ADDO;//收数据
		ADCLK=1;
		_nop_();
		_nop_();
		ADCLK=0;//形成一次时钟脉冲
		_nop_();
		_nop_();
		j=j<<7;
		ndat=ndat|j;
		if(i<7)ndat>>=1;
	}
	ADCS=1;//拉低CS端
	ADCLK=0;//拉低CLK端
	ADDO=1;//拉高数据端,回到初始状态
	dat<<=8;
	dat|=ndat;
	return(dat);            //return ad data
}

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

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

相关文章

Kafka(二)- Kafka集群部署

文章目录一、安装部署1. 集群规划2. 虚拟机前置准备工作&#xff08;1&#xff09;配置IP&#xff08;2&#xff09;修改主机名称和hosts文件&#xff08;3&#xff09;关闭防火墙&#xff0c;关闭防火墙开机自启&#xff08;4&#xff09;克隆虚拟机3. 集群部署&#xff08;1&…

Oracle中ALTER TABLE的五种用法(三)

首发微信公众号&#xff1a;SQL数据库运维 原文链接&#xff1a;https://mp.weixin.qq.com/s?__bizMzI1NTQyNzg3MQ&mid2247485212&idx1&sn450e9e94fa709b5eeff0de371c62072b&chksmea37536cdd40da7a94e165ce4b4c6e70fb1360d51bed4b3566eee438b587fa231315d0a5a…

BP神经网络PID从Simulink仿真到PLC控制实现(含博途PLC完整SCL源代码)

单神经元自适应PID控制博途PLC完整源代码,请参看下面的文章链接: 博途PLC单神经元自适应PID控制_RXXW_Dor的博客-CSDN博客_单神经元pid控制1、单神经元作为构成神经网络的基本单位,具有自学习和自适应能力,且结构简单易于计算,传统的PID具有结构简单、调整方便和参数整定…

RationalDMIS 2020一平面与两偏置圆找正(原点不在偏置圆上)

在批量加工箱体、杠杆、盖板类零件时,大多是以工件上一个平面和两定位孔作为定位基准实现组合定位,简称"一面两孔(一面两销)定位。 采用"一面两孔,定位,能使工件在各道工序上的定位基准统一,进而可减少因定位基准多次变换而产生的定位误差,提高工件的加工精…

学术论文引言、正文和致谢格式规范标准 - 易智编译EaseEditing

1 引言1.1 定义 国家标准GB7713-87规定&#xff1a;“引言(或绪论)简要说明研究工作的目的、范围、相关领域的前人工作和知识空白、理论基础和分析、研究设想、研究方法和实验设计、预期结果和意义等。 引言应言简意赅&#xff0c;不要与摘要雷同&#xff0c;不要成为摘要的注…

vue3 antd table表格的增删改查(二)input输入框根据关键字搜索【后台管理系统 请求后端接口 前后端交互】

input输入框——关键字模糊搜索知识调用场景复现准备工作解决方法step1 请求接口step2 根据id搜索step3 优化处理&#xff08;输入框监听&#xff09;知识调用 功能实现可能要用到的知识&#xff1a;vue3数据变化侦测&&信息筛选过滤.filter() .map() .forEach(). find…

【SVA】SystemVerilog assertion语法速查

seq与property|->,|>\##[*n ][n ]andintersectorfirst_match![在这里插入图片描述](https://img-blog.csdnimg.cn/015bf766991947e0bbe95356ba2a0036.png)throughoutwithinifended局部变量与赋值在sequence、property中调用display[->1]$rose $fell $isunknow$stable$…

#国产工业软件#外行人看工业软件,接轨还是出轨?

​ 有些人整天特么的自毁自恨&#xff0c;说&#xff1a;“什么我们中国人不追求真理&#xff0c;什么我们中国人没有科学精神&#xff0c;我们大部分科研人员都是混饭吃的&#xff0c;所有人都忙着生活没有人拼搏搞科研。“ 你们这些神经病该歇歇了&#xff0c;要是欧洲社会…

springboot高校学生宿舍水电费报修考勤管理系统

宿舍水电管理系统的开发过程中&#xff0c;采用B / S架构&#xff0c;主要使用jsp技术进行开发&#xff0c;中间件服务器是Tomcat服务器&#xff0c;使用Mysql数据库和Eclipse开发环境。该宿舍水电管理系统包括学生、维修员和管理员。其主要功能包括宿舍公告、维修员、学生、宿…

IBO对中文A文学课程IA有何规定?

又到11月中旬&#xff0c;许多IB学校开始确定IA和EE选题。在IB选课时&#xff0c;IB学生必选语言A&#xff08;母语&#xff09;和语言B。在语言A科目组的课程中&#xff0c;大部分中国的IB学生都会选择IB语文&#xff08;中文A&#xff09;。 众所周知&#xff0c;历经改革&am…

解决nginx: [emerg] unknown directive “stream“ in /etc/nginx/nginx.conf问题

文章目录1.未报错时nginx配置&#xff1a;2.报错时nginx配置&#xff1a;3.增加配置报错&#xff1a;4.增加配置位置如下&#xff1a;5.解决办法&#xff1a;6.测试&#xff1a;nginx -t1.未报错时nginx配置&#xff1a; #user nginx; user root; worker_processes auto;er…

【C++】STL —— map和set的模拟实现

目录 一、基础铺垫 二、基本结构分析 1. 节点结构分析 2. 模板参数中仿函数分析 三、正向迭代器 四、封装完成的红黑树 五、map的模拟实现 六、set的模拟实现 一、基础铺垫 在前面的博客中我们了解了map和set的基本使用&#xff0c;以及对二叉搜索树、AVL树和红黑树的…

数据结构学习笔记(VI):图

目录 1 图的基本概念 6.1 图的基本概念 1.定义 2.边 3.连通 4.子图 5.连通分量 6. 生成树与森林 7.权 8.特殊的图 2 图的存储 2.1 邻接矩阵法 1.实现 2.性能分析 3.性质 2.2 邻接表法 1.实现 2.对比 2.3 十字链表与邻接多重表 1.十字链表存储有向图 2…

梦开始的地方——C语言柔性数组

文章目录柔性数组什么是柔性数组&#xff1f;柔性数组的使用柔性数组的优点柔性数组 什么是柔性数组&#xff1f; 在C99中&#xff0c;结构体最后一个元素它允许是一个未知大小的数组&#xff0c;这就叫做柔性数组成员。 这个概念听起来可能有点不可以思议&#xff0c;但它的…

KVC原理与数据筛选

作者&#xff1a;宋宏帅 1 前言 在技术论坛中看到一则很有意思的KVC案例&#xff1a; interface Person : NSObject property (nonatomic, copy) NSString *name; property (nonatomic, assign) NSInteger age; end Person *person [Person new]; person.name "Tom&q…

[附源码]计算机毕业设计springboot基于JavaWeb的学校社团活动管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

小知识· Zigbee 简介

1. 介绍 ZigBee是一种近距离、低复杂度、低功耗、低速率、低成本的双向无线通讯技术 ZigBee建立在IEEE 802.15.4标准&#xff08;定义了PHY和MAC层&#xff09;之上&#xff0c;ZigBee联盟对其网络层和应用层进行了标准化 ZigBee协议栈可分为五层 - 物理层&#xff08;PHY&a…

时间序列建模三部曲

与大多数高级分析解决方案不同&#xff0c;时间序列建模是一种低成本解决方案&#xff0c;可提供强大的洞察力。 本文将介绍构建质量时间序列模型的三个基本步骤&#xff1a;使数据平稳&#xff0c;选择正确的模型并评估模型的准确性。这篇文章中的例子使用了一家主要汽车营销…

[附源码]Python计算机毕业设计SSM旅行网的设计与实现(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

从零搭建开发脚手架 注意Logback多个配置文档导致配置紊乱问题

文章目录背景查找logback内部状态以及生效的配置文件解决背景 最近项目中出现个问题&#xff0c;自定义的logback.xml不生效&#xff0c;排查发现项目中出现了2个logback.xml&#xff0c;另一个在依赖Jar中&#xff0c;使用的在依赖Jar中的logback.xml&#xff0c;导致我们自定…