找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9039|回复: 12
收起左侧

51hei单片机,MQ-5天然气传感器,1602显示

  [复制链接]
ID:42637 发表于 2012-7-24 22:09 | 显示全部楼层 |阅读模式

用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);    
 } 
}

评分

参与人数 1黑币 +5 收起 理由
ssfc + 5 赞一个!

查看全部评分

回复

使用道具 举报

ID:42637 发表于 2012-7-24 23:01 | 显示全部楼层

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

回复

使用道具 举报

ID:42637 发表于 2012-7-24 23:09 | 显示全部楼层
去掉USB接口线显示暗淡,加上USB线显示正常,供电要考虑
回复

使用道具 举报

ID:1 发表于 2012-7-25 04:38 | 显示全部楼层

牛人啊  期待更多 精彩分享

回复

使用道具 举报

ID:29947 发表于 2012-7-26 15:21 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

ID:42637 发表于 2012-7-26 20:51 | 显示全部楼层

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

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

而AOUT脚,就是量化浓度。

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

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

使用道具 举报

ID:61997 发表于 2014-7-6 15:11 | 显示全部楼层
学习学习
回复

使用道具 举报

ID:102765 发表于 2016-1-17 09:18 | 显示全部楼层
MQ-4可不可以用这个
回复

使用道具 举报

ID:106437 发表于 2016-2-26 15:13 | 显示全部楼层
请问有没有MQ5和单片机的连接电路图啊  
回复

使用道具 举报

ID:106804 发表于 2016-3-1 11:25 | 显示全部楼层
牛人啊,程序先收藏私,待我的单片机到货了来验证.
回复

使用道具 举报

ID:119416 发表于 2016-5-9 01:57 | 显示全部楼层
请问有没有基于DM430-A ,MQ-5可燃气体传感器,lcd1602 显示器的编程,求答,毕业论文用
回复

使用道具 举报

ID:162555 发表于 2017-1-20 16:14 | 显示全部楼层
传感器接到单片机I/O口?怎么扫描?
回复

使用道具 举报

ID:183779 发表于 2017-8-10 15:01 | 显示全部楼层
程序都没有注释,看着费力不懂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表