【012】基于51单片机的可燃气体报警装置proteus仿真与实物设计

一、资料内容

  • (1)、基于51单片机的可燃气体报警器proteus仿真设计一份;
  • (2)、基于51单片机的可燃气体报警器proteus仿真设计keli源代码一份;
  • (3)、基于51单片机的可燃气体报警器设计Altium designer 原理图一份;
  • (4)、基于51单片机的可燃气体报警器设计Altium designer PCB一份;
  • (5)、基于51单片机的可燃气体报警器设计元器件清单一份;
  • (6)、基于51单片机的烟雾报警系统proteus仿真设计视频讲解一份;

二、设计要求

  • 1、完成51单片机最小系统的设计与仿真搭建;
  • 2、通过单片机编程实现ADC0832模数转换功能;
  • 3、通过模数转换功能实现可燃气体检测;
  • 4、超过阈值启动声光报警功能;
  • 6、根据上述要求完成实物制作与仿真;

三、相关资料截图

图1. 系统proteus仿真界面截图

图2. 系统Keil编程界面源代码截图

图3. 系统原理图工程文件

图4. PCB工程文件

图5. 系统实物照片

四、视频讲解

部分代码:

#include<reg51.h>    //包含单片机寄存器的头文件
#include<intrins.h>  //包含_nop_()函数定义的头文件
unsigned char flag=0; //紧急报警标示位
unsigned char flag1=0; //传感器检测报警标示位
sbit CS=P1^0;       //将CS位定义为P3.4引脚
sbit CLK=P1^1;      //将CLK位定义为P1.0引脚
sbit DIO=P1^2;       //将DIO位定义为P1.1引脚
sbit K1=P2^4;
sbit LED1=P2^0;		 //警情指示灯
sbit LED2=P2^1;		 //正常指示灯
sbit BEEP=P2^2;
/*****************************************************
函数功能:延时1ms
(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒
***************************************************/
void delay1ms()
{
   unsigned char i,j;	
	 for(i=0;i<10;i++)
	  for(j=0;j<33;j++)
	   ;		 
 }

/*****************************************************
函数功能:延时若干毫秒
入口参数:n
***************************************************/
 void delaynms(unsigned char n)
 {
   unsigned char i;
	for(i=0;i<n;i++)
	   delay1ms();
 }

 /*****************************************************
函数功能:按键控制子程序

******************************************************/
void key()
{
	if(K1==0)
	{
		delaynms(5);
		if(K1==0)
		{
			while(!K1);
			flag++;
			if(flag==2)
			flag=0;
		}
	}
}
/*****************************************************

 函数功能:报警子程序

*****************************************************/
void baojing()
{
	if(flag==1||flag1==1)
	{
		LED2=1;
		LED1=0;
		BEEP=0;
		delaynms(500);
		BEEP=1;
		delaynms(500);
	}
	if(flag==0&&flag1==0)
	{
		LED2=0;
		LED1=1;
		BEEP=1;
	}
}

/*****************************************************
函数功能:将模拟信号转换成数字信号
***************************************************/ 
unsigned int  A_D()
{
  unsigned char i,dat;
   CS=1;   //一个转换周期开始
   CLK=0;  //为第一个脉冲作准备
   CS=0;  //CS置0,片选有效

   DIO=1;    //DIO置1,规定的起始信号  
   CLK=1;   //第一个脉冲
   CLK=0;   //第一个脉冲的下降沿,此前DIO必须是高电平
   DIO=1;   //DIO置1, 通道选择信号  
   CLK=1;   //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0 
   CLK=0;   //第二个脉冲下降沿 
   DIO=0;   //DI置0,选择通道0
   CLK=1;    //第三个脉冲
   CLK=0;    //第三个脉冲下降沿 
   DIO=1;    //第三个脉冲下沉之后,输入端DIO失去作用,应置1
   CLK=1;    //第四个脉冲
   for(i=0;i<8;i++)  //高位在前
    {
      CLK=1;         //第四个脉冲
      CLK=0; 
      dat<<=1;       //将下面储存的低位数据向右移
		dat|=(unsigned char)DIO; 	 //将输出数据DIO通过或运算储存在dat最低位 
    }	  		        
    CS=1;          //片选无效 
	 return dat;	 //将读书的数据返回     
  }
/*****************************************************

  函数功能:警情检测子程序

*****************************************************/
void jq()
{
	unsigned int AD_val;    //储存A/D转换后的值
	AD_val=A_D();    //进行A/D转换
	if(AD_val>=100)
	flag1=1;
	else
	flag1=0;
}
/*****************************************************
函数功能:主函数
***************************************************/ 

  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

B站小邓子分享官

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值