标题:
单片机烟雾可燃气体甲烷天然气检测程序
[打印本页]
作者:
f三人行
时间:
2017-8-22 16:14
标题:
单片机烟雾可燃气体甲烷天然气检测程序
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)
2017-8-22 16:14 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1