51单片机做的烟雾可燃气体甲烷天然气检测程序
单片机源程序如下:
- /*
- 用打火机,液晶显示的第二行是阈值,大于该值,报警。
- 阈值不宜大于400
- */
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define IO_1602 P0 //IO 口
- sbit RS_1602=P2^5;
- sbit RW_1602=P2^6;
- sbit E_1602=P2^7;
- sbit CS=P1^0;
- sbit CLK=P1^1;
- sbit DIO=P1^2;
- sbit beed=P1^7;
- sbit key0=P3^0;
- sbit key1=P3^1;
- void delay_ms(unsigned int t)//11.0592MHz 1ms
- {
- uchar x,y;
- for(t;t>0;t--)
- {
- for(x=0;x<114;x++)
- for(y=0;y<1;y++);
- }
- }
- void Wr1602Cmd(unsigned char dat)
- {//写命令函数
- E_1602=0;
- IO_1602=dat;
- RS_1602=0;
- RW_1602=0;
- E_1602=1;
- delay_ms(1);
- E_1602=0;
- delay_ms(1);
- }
- void Wr1602Dat(unsigned char dat)
- {//写数据函数
- E_1602=0;
- IO_1602=dat;
- RS_1602=1;
- RW_1602=0;
- E_1602=1;
- delay_ms(1);
- E_1602=0;
- delay_ms(1);
- }
- void Init1602(void)
- {
- delay_ms(20);
- Wr1602Cmd(0x38);
- delay_ms(5);
- Wr1602Cmd(0x38);
- delay_ms(5);
- Wr1602Cmd(0x06);
- Wr1602Cmd(0x0c);//
- Wr1602Cmd(0x01);//清屏
- Wr1602Cmd(0x80);//设置地址
- }
- uchar RdAdc0832(bit Hx)
- {
- uchar value0,value1,i;
- CS=1;CLK=0;DIO=1;
- CS=0;
- DIO=1;_nop_();_nop_();_nop_();_nop_(); //写 ST 位
- CLK=1;_nop_();_nop_();_nop_();_nop_();
- CLK=0;_nop_();_nop_();_nop_();_nop_();
- DIO=1;_nop_();_nop_();_nop_();_nop_();//写 SGL 位
- CLK=1;_nop_();_nop_();_nop_();_nop_();
- CLK=0;_nop_();_nop_();_nop_();_nop_();
- DIO=Hx;_nop_();_nop_();_nop_();_nop_();//写通道号
- //位
- CLK=1;_nop_();_nop_();_nop_();_nop_();
- CLK=0;_nop_();_nop_();_nop_();_nop_();
- DIO=1;
- for(i=0;i<8;i++)
- {
- CLK=1;_nop_();_nop_();_nop_();_nop_();
- CLK=0;_nop_();_nop_();_nop_();_nop_();
- value0<<=1;
- if(DIO==1) value0|=0x01;
- else value0&=0xfe;
- }
- for(i=0;i<8;i++)
- {
- value1>>=1;
- if(DIO==1) value1|=0x80;
- else value1&=0x7f;
- CLK=1;_nop_();_nop_();_nop_();_nop_();
- CLK=0;_nop_();_nop_();_nop_();_nop_();
- }
- CS=1;
- if(value0!=value1) P1&=0X7F;
- else P1|=0X80;
- return value0;
- }
- void main()
- {
- unsigned long i,a,b,c,d,temp=200,x,y,z;
- Init1602();
- while(1)
- {
- Wr1602Cmd(0x80);
- i=RdAdc0832(0);
- i=(i*5000/255);
- a=i/1000;
- b=i%1000/100;
- c=i%1000%100%10;
- Wr1602Dat('V');
- Wr1602Dat('O');
- Wr1602Dat('L');
- Wr1602Dat('=');
- Wr1602Dat('0'+a);
- Wr1602Dat('.');
- Wr1602Dat('0'+b);
- Wr1602Dat('0'+c);
- Wr1602Dat('0'+i%1000%100%10);
- Wr1602Dat('V');
- d=a*100+b*10+c;
- Wr1602Cmd(0xC0);
- Wr1602Dat('S'); //阈值 threshold
- Wr1602Dat('e');
- Wr1602Dat('t');
- Wr1602Dat(' ');
- Wr1602Dat('V');
- Wr1602Dat('a');
- Wr1602Dat('l');
- Wr1602Dat('u');
- Wr1602Dat('e');
- Wr1602Dat(':');
- if(key0==0)
- {
-
- delay_ms(10); //消抖
- if(key0==0)
- {
- while(!key0);//等待按键松开。
- temp+=20;
- }
- }
- if(key1==0)
- {
-
- delay_ms(10); //消抖
- if(key1==0)
- {
- while(!key1);//等待按键松开。
- temp-=20;
- }
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
烟雾可燃气体甲烷天然气检测程序.zip
(26.76 KB, 下载次数: 82)
|