基于单片机的厨房天燃气泄漏检测报警系统设计

1.设计任务

基于单片机的厨房天然气泄漏检测报警系统设计

基本要求:能检测厨房内天然气泄漏,并报警。

创新:当厨房内烟雾、蒸汽达到设定值时同时报警。

任务区分:A——通过播放蜂鸣声音报警,频率不同,报警的含义不同。

2. 设计要求

2.1系统方案论证

根据设计任务,分析设计系统的组成,给出实现设计任务的几种方案,分析比较几种设计方案的优略,本着尽量以软件代替硬件,同时力求电路简单,工作可靠的原则,确定总体设计方案。

2.2系统硬件电路设计

根据系统设计方案进行软、硬件的分配,软、硬件设计分别进行。硬件设计包括单片机最小系统和扩展接口及配置,硬件结构在设计时要选择合适的元器件,硬件电路要简洁、工作可靠,需用Proteus绘制整个系统的电路仿真原理图。

主函数

//³ÌÐòÍ·º¯Êý
#include <reg52.h>
#include <intrins.h>	
//ÏÔʾº¯Êý
#include <display.h>

//ºê¶¨Òå
#define uint unsigned int 
#define uchar unsigned char
 
//¹Ü½ÅÉùÃ÷
sbit LED_R= P2^2;			  
sbit LED_G= P2^0;			  
sbit FENG = P2^5;			 
sbit CS   = P1^4;
sbit Clk = P1^2;
sbit DATI = P1^3;
sbit DATO = P1^3;			
sbit Key1=P2^6;
sbit Key2=P2^7;
sbit Key3=P3^7;

unsigned char dat = 0;      //
unsigned char CH=0;       //
unsigned int sum=0;			 //
unsigned char m=0;
bit bdata flag;				  //
uchar set;					  //
uchar   K_ZERO=40;       //

void gaopin(void);
//º¯ÊýÉùÃ÷
extern void Key();

void delay(uint z)
{
	uint i,j;
	for(i=0;i<z;i++)
	for(j=0;j<121;j++);
}


//CH4Ũ¶È±äÁ¿
uchar temp=0;



uchar WARNING=150;		//


/****************************************************************************

****************************************************************************/
unsigned char adc0832(unsigned char CH)
{
	unsigned char i,test,adval;
	adval = 0x00;
	test = 0x00;
	Clk = 0;       //³õʼ»¯
	DATI = 1;
	_nop_();
	CS = 0;
	_nop_();
	Clk = 1;
	_nop_();
	
	
	if ( CH == 0x00 )      
	{
		Clk = 0;
		DATI = 1;      
		_nop_();
		Clk = 1;
		_nop_();
		Clk = 0;
		DATI = 0;    
		_nop_();
		Clk = 1;
		_nop_();
	} 
	else
	{
		Clk = 0;
		DATI = 1;    
		_nop_();
		Clk = 1;
		_nop_();
		Clk = 0;
		DATI = 1;      
		_nop_();
		Clk = 1;
		_nop_();
	}
	
	Clk = 0;
	DATI = 1;
	for( i = 0;i < 8;i++ )      
	{
		_nop_();
		adval <<= 1;
		Clk = 1;
		_nop_();
		Clk = 0;
		if (DATO)
		adval |= 0x01;
		else
		adval |= 0x00;
	}
	for (i = 0; i < 8; i++)      
	{
		test >>= 1;
		if (DATO)
		test |= 0x80;
		else 
		test |= 0x00;
		_nop_();
		Clk = 1;
		_nop_();
		Clk = 0;
	}
	if (adval == test)   
	dat = test;
	nop_();
	CS = 1;     
	DATO = 1;
	Clk = 1;
	return dat;
}

void init()				
{
	TMOD=0x01;			//
 	TL0=0xb0;
 	TH0=0x3c;			//
 	EA=1;				//
	ET0=1;				//
 	TR0=1;				//
}

void AlcoholCalibration(void)     
{
	sum = 0;
	for(m=0;m<50;m++)			
	{
		sum = adc0832(0)+sum;		
	}
	temp=sum/50;				
	K_ZERO = 500 * temp / 256;       
	Display_1602(0,WARNING);	 
}

void main()				
{
	Init1602();						 //
	init();							 //
	while(1)						 
	{
		for(m=0;m<50;m++)			
		sum = adc0832(0)+sum;		
		temp=sum/50;				
		if (temp > K_ZERO) 
				temp = temp - K_ZERO;              
		else
				temp= 0; 
		sum=0; 						//
		if(set==0)					 //
		Display_1602(temp,WARNING);	 //
		if(temp<WARNING&&set==0)	 //
		{
			flag=0;					 //
		}
		else if(temp>WARNING&&set==0)//
		{
			flag=1;					 
		}
		Key();						 
		gaopin();
	}
}

void Key()					  
{
	if(Key1==0)				  
	{
		while(Key1==0);		  
		FENG=0;				
		set++;				 
		flag=0;				
		TR0=0;			
	}
	if(set==1)				 
	{
		write_com(0x38);
		write_com(0x80+0x40+8);
		write_com(0x0f);//
		write_com(0x06);//
		FENG=1;	

	}
	else if(set>=2)		
	{
		set=0;			
		write_com(0x38);
		write_com(0x0c);
		FENG=1;			
		flag=1;			
		TR0=1;			
	}
	if(Key2==0&&set!=0)			//
	{
		while(Key2==0);			//
		FENG=0;					//
		WARNING++;				//
		if(WARNING>=255)		//
		WARNING=0;				//
		write_com(0x80+0x40+6);	   
		write_data('0'+WARNING/100);   
		write_data('0'+WARNING%100/10);//
		write_data('0'+WARNING%100%10);//
		write_com(0x80+0x40+8);//λÖÃ
		FENG=1;						//
	}
	else if(Key2==0&&set==0)
	{
		AlcoholCalibration(); //
	}
	if(Key3==0&&set!=0)				//
	{
		while(Key3==0);
		FENG=0;
		WARNING--;
		if(WARNING<=0)
		WARNING=255;
		write_com(0x80+0x40+6);
		write_data('0'+WARNING/100);
		write_data('0'+WARNING/10%10);
		write_data('0'+WARNING%10);
		write_com(0x80+0x40+8);//
		FENG=1;
	}
}

void gaopin()
{
	unsigned char i;
	if(temp>170)
	{
		for(i=0;i<10;i++)
		{
			FENG=!FENG;
			delay(100);
		}

	}
}


void  time1_int(void) interrupt 1		  
{
	uchar count;						  
	TL0=0xb0;
 	TH0=0x3c;							
  	count++;							
	if(count==10)						 
	{
		if(flag==0)						  //
		{
			LED_G=0;					  
			LED_R=1;					  
			FENG=1;						  //
		}
		if(flag==1)						  
		{
			LED_G=1;					  
			LED_R=0;					  
			FENG=0;						  
		}
	}

  	if(count==20)						
   	{									  
		count=0;					
		if(flag==0)						  
		{
			LED_G=1;
			LED_R=1;
			FENG=1;
		}
		if(flag==1)					
		{
			LED_G=1;
		

仿真Proteus

完整代码点开链接私信  免费  获取。

【iBot机器人工作室的个人空间-哔哩哔哩】 https://b23.tv/ryUWVKa

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

K11mvp

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

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

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

打赏作者

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

抵扣说明:

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

余额充值