标题: 51hei单片机,MQ-5天然气传感器,1602显示 [打印本页]

作者: lspcdzx2012    时间: 2012-7-24 22:09
标题: 51hei单片机,MQ-5天然气传感器,1602显示

用51hei板,买了个MQ-5天然气传感器,做了个燃气漏泄报警器兼读数。

用打火机检验,灵敏,满足要求

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define lcd P0
sbit adc_cs=P2^0;
sbit adc_rd=P3^7;
sbit adc_wr=P3^6; 
sbit en=P3^4;
sbit rw=P2^7;
sbit rs=P3^5;
sbit busybit=P0^7;
sbit beep=P2^2;
sbit P26=P2^6;
sbit P27=P2^7;
sbit P24=P2^4;
bit beep_flag;
bit adc_flag;
bit adc_start;
uchar tab[]="0123456789";
//////
void lcd_init(void);
//////////
void delay(uint temp)
{
 while(temp--);
}
void init(void)
{
 P24=0;
 P27=1;
 P0=0xff;
 P27=0;
 P26=1;
 P0=0x00;
 P26=0;
 lcd_init();
 TMOD=0x01;
 TH0=0x3c;
 TL0=0xb0;
 ET0=1;
 TR0=1;
 IT1=0;
 EX1=1;
 IT0=1;
 EX0=1;
 EA=1;
}        
void  int0_srv() interrupt 0
{
 adc_flag=1;
}
void int1_srv() interrupt 2
{  
 beep_flag=1;  
}
void timer0_srv() interrupt 1
{
 uchar temp;
 TH0=0x3c;
 TL0=0xb0;
 temp++;
 if(temp==20)
 {
  temp=0;
  adc_start=1;
 } 
}
void testbusy(void)//read com
{
 busybit=1;
 en=0;
 rs=0;
 rw=1;
 delay(5);
 en=1;
 delay(5);
 while (busybit);
 en=0;
}
void wr_dat(uchar dat,busyflag)
{
 if(busyflag)
 testbusy();
 en=0;
 rs=1;
 rw=0;
 lcd=dat;
 delay(5);
 en=1;
 delay(5);
 en=0;
}
void wr_com(uchar com,busyflag)
{
 if(busyflag)
 testbusy();
 en=0;
 rs=0;
 rw=0;
 lcd=com;
 delay(5);
 en=1;
 delay(5);
 en=0;
}
void lcd_init(void)
{
 delay(1650);//time
 wr_com(0x38,0);
 delay(550);//time
 wr_com(0x38,0);
 delay(550);
 wr_com(0x38,0);
 wr_com(0x38,1);
 wr_com(0x08,1);
 wr_com(0x01,1);
 wr_com(0x06,1);
 wr_com(0x0c,1);
}
uchar adc_change(void)
{
 uchar value;
 adc_cs=1;
 adc_wr=1;
 delay(2);
 adc_cs=0;
 delay(2);
 adc_wr=0;
 delay(10);
 adc_wr=1;
 delay(2);
 adc_cs=1;
 while(!adc_flag);
 adc_flag=0;
 adc_rd=1;
 _nop_();
 adc_cs=0;
 delay(2);
 adc_rd=0;
 _nop_();
 value=P1;
 _nop_();
 adc_rd=1;
 delay(2);
 adc_cs=1;
 return value;
}
void main()
{
 uchar adc_value;
 uchar ge,shi,bei;
 init();
 while(1)
 {
  if(beep_flag)
  {
   beep_flag=0;
   beep=0;
   delay(10000);
   beep=1;
   delay(10000);
  }
  if(adc_start)
  {
   adc_start=0;
   adc_value=adc_change();
   bei=adc_value/100;
   adc_value=adc_value%100;
   shi=adc_value/10;
   ge=adc_value%10;
  }
  wr_com(0x80,1);
  wr_dat('M',1);
  delay(3);
  wr_dat('Q',1);
  delay(3);
  wr_dat('-',1);
  delay(3);
     wr_dat('5',1);
  delay(3);
  wr_dat(':',1);
  delay(3);
     wr_com(0xc0,1);
  wr_dat(tab[bei],1);
  delay(3);
  wr_dat(tab[shi],1);
  delay(3);
  wr_dat(tab[ge],1);
  delay(3);    
 } 
}

作者: lspcdzx2012    时间: 2012-7-24 23:01

上电3小时,MQ-5有点烫,灵敏度没有降低


作者: lspcdzx2012    时间: 2012-7-24 23:09
去掉USB接口线显示暗淡,加上USB线显示正常,供电要考虑
作者: admin    时间: 2012-7-25 04:38

牛人啊  期待更多 精彩分享


作者: liuyang    时间: 2012-7-26 15:21
我也有这个模块,问下你这个程序是用51hei板载的ad检测的吗?可以不用ad直接用io口来检测行吗?
作者: lspcdzx2012    时间: 2012-7-26 20:51

用hei51板上的ADC0804是为了量化漏泄浓度

MQ-5模块有4个引脚,DOUT#就是你说的直接IO测,我也用到了。

而AOUT脚,就是量化浓度。

另外这个程序有漏洞,我已经作了完善处理。

[此贴子已经被作者于2012-7-26 20:55:59编辑过]

作者: kinglucifun    时间: 2014-7-6 15:11
学习学习
作者: 过客的思念    时间: 2016-1-17 09:18
MQ-4可不可以用这个
作者: 不离不弃    时间: 2016-2-26 15:13
请问有没有MQ5和单片机的连接电路图啊  
作者: fshjie    时间: 2016-3-1 11:25
牛人啊,程序先收藏私,待我的单片机到货了来验证.
作者: jinlin    时间: 2016-5-9 01:57
请问有没有基于DM430-A ,MQ-5可燃气体传感器,lcd1602 显示器的编程,求答,毕业论文用
作者: XMODS1234    时间: 2017-1-20 16:14
传感器接到单片机I/O口?怎么扫描?
作者: 非黄腾达    时间: 2017-8-10 15:01
程序都没有注释,看着费力不懂




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1