用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); } }
上電3小時,MQ-5有點燙,靈敏度沒有降低
牛人啊 期待更多 精彩分享
用hei51板上的ADC0804是為了量化漏泄濃度
MQ-5模塊有4個引腳,DOUT#就是你說的直接IO測,我也用到了。
而AOUT腳,就是量化濃度。
另外這個程序有漏洞,我已經作了完善處理。
歡迎光臨 (http://www.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |