久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 新人求助,做mq-2煙霧報(bào)警器 [打印本頁]

作者: zzz6661231123    時(shí)間: 2017-4-27 15:19
標(biāo)題: 新人求助,做mq-2煙霧報(bào)警器
新人一枚,想做一個(gè)基于AT89C51的沼氣泄露檢測(cè)儀,氣體傳感器用MQ-2,只需要進(jìn)行簡(jiǎn)單的聲光報(bào)警就可以

作者: 13819348    時(shí)間: 2017-5-6 14:00
煙霧報(bào)警器制作過程及相關(guān)程序
//程序頭函數(shù)
#include <reg52.h>

//宏定義
#define uint unsigned int
#define uchar unsigned char
#define Data_ADC0809 P1
//管腳聲明
sbit Feng = P3^0;
//ADC0809
sbit ST=P3^3;
sbit EOC=P3^4;
sbit OE=P3^2;
//按鍵
sbit Key1=P3^5;
sbit Key2=P3^6;
sbit Key3=P3^7;
//顯示數(shù)組 0-9+F
uchar Data_[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x71,0x3f};
sbit Wei1 = P2^7;
sbit Wei2 = P2^6;
sbit Wei3 = P2^5;
sbit Wei4 = P2^4;
//函數(shù)聲明
extern uchar ADC0809();
void Display(uchar X,uchar Data);
void delay(uint t);
//酒精含量變量
uchar temp=0;
//蜂鳴器變量
uchar FF=10;
//顯示模式
uchar Mode=0;
uchar p;
void main()
{
while(1)
{
//正常模式
if(Mode==0)
{
//讀取AD值
temp=ADC0809();
for(p=0;p<30;p++)
Display(0,temp);
//判斷是否報(bào)警
if(temp>FF)
{
Feng=0;
}
else
{
Feng=1;
}
}
//調(diào)整模式
else
{
Display(1,FF);
}
//功能鍵
if(Key3==0)
{
Feng=0;
delay(100);
while(Key3==0)
{
if(Mode==0)
Display(0,temp);
else
Display(1,FF);
}
if(Mode==0)
Mode=1;
else
Mode=0;
Feng=1;
}
//增加
if(Key2==0&&Mode==1)
{
Feng=0;
delay(100);
while(Key2==0)
{
Display(1,FF);
}
FF++;
if(FF==251)
FF=250;
Feng=1;
}
//減少
if(Key1==0&&Mode==1)
{
Feng=0;
delay(100);
while(Key1==0)
{
Display(1,FF);
}
FF--;
if(FF==0xff)
FF=0;
Feng=1;
}
}
}
//ADC0809讀取信息
uchar ADC0809()
{
uchar temp_=0x00;
//初始化高阻太
OE=0;
//轉(zhuǎn)化初始化
ST=0;
//開始轉(zhuǎn)換
ST=1;
ST=0;
//外部中斷等待AD轉(zhuǎn)換結(jié)束
while(EOC==0)
//讀取轉(zhuǎn)換的AD值
OE=1;
temp_=Data_ADC0809;
OE=0;
return temp_;
}
//延時(shí)
void delay(uint t)
{
uint i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++);
}
//顯示 X表示狀態(tài) Data表示數(shù)據(jù)
void Display(uchar X,uchar Data)
{
Wei1=1;
Wei2=1;
Wei3=1;
Wei4=1;
P0=0xff;
//正常模式
if(X==0)
{
P0=~Data_[11];
}
//非正常
else
{
P0=~Data_[10];
}
Wei1=0;
Wei2=1;
Wei3=1;
Wei4=1;
delay(10);
Wei1=1;
Wei2=1;
Wei3=1;
Wei4=1;
P0=~Data_[Data/100];
Wei1=1;
Wei2=0;
Wei3=1;
Wei4=1;
delay(10);
Wei1=1;
Wei2=1;
Wei3=1;
Wei4=1;

P0=~Data_[Data/10%10];
Wei1=1;
Wei2=1;
Wei3=0;
Wei4=1;
delay(10);
Wei1=1;
Wei2=1;
Wei3=1;
Wei4=1;
P0=~Data_[Data%10];
Wei1=1;
Wei2=1;
Wei3=1;
Wei4=0;
delay(10);
Wei1=1;
Wei2=1;
Wei3=1;
Wei4=1;
}   


作者: SDGHJK    時(shí)間: 2018-11-13 15:56
#include<reg51.h>#define LCD1602_4PINS#define LCD1602_DATAPINS P0sbit LCD1602_E=P2^7;sbit LCD1602_RW=P2^5;sbit LCD1602_RS=P2^6;#define uchar unsigned char#define uint unsigned intvoid Lcd1602_Delay1ms(uint c)  //誤差 0us{  uchar a,b;for (; c>0; c--){for (b=199;b>0;b--){ for(a=1;a>0;a--);}   }  }void LcdWriteCom(uchar com) //寫入命令{LCD1602_E = 0;//使能清零LCD1602_RS = 0;//選擇寫入命令LCD1602_RW = 0;//選擇寫入LCD1602_DATAPINS = com;//由于4位的接線是接到P0口的高四位,所以傳送高四位不用改Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時(shí)序Lcd1602_Delay1ms(5);LCD1602_E = 0;// Lcd1602_Delay1ms(1);LCD1602_DATAPINS = com << 4; //發(fā)送低四位Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時(shí)序Lcd1602_Delay1ms(5);LCD1602_E = 0;}void LcdWriteData(uchar dat) //寫入數(shù)據(jù){LCD1602_E = 0;//使能清零LCD1602_RS = 1;//選擇寫入數(shù)據(jù)LCD1602_RW = 0;//選擇寫入LCD1602_DATAPINS = dat;//由于4位的接線是接到P0口的高四位,所以傳送高四位不用改Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時(shí)序Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = dat << 4; //寫入低四位Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時(shí)序Lcd1602_Delay1ms(5);LCD1602_E = 0;}void LcdInit() //LCD初始化子程序{LcdWriteCom(0x32);//將8位總線轉(zhuǎn)為4位總線LcdWriteCom(0x28);//在四位線下的初始化LcdWriteCom(0x0c); //開顯示不顯示光標(biāo)LcdWriteCom(0x06); //寫一個(gè)指針加1LcdWriteCom(0x01); //清屏LcdWriteCom(0x80); //設(shè)置數(shù)據(jù)指針起點(diǎn)}

main.c文件:
/**CS_ :片選使能,低電平芯片使能。*CH0 :模擬輸入通道 0,或作為 IN+/-使用。*CH1 :模擬輸入通道 1,或作為 IN+/-使用。*GND :芯片參考 0 電位(地)。*DI :數(shù)據(jù)信號(hào)輸入,選擇通道控制。*DO :數(shù)據(jù)信號(hào)輸出,轉(zhuǎn)換數(shù)據(jù)輸出。*CLK :芯片時(shí)鐘輸入。*Vcc/REF :電源輸入及參考電壓輸入(復(fù)用)。*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit key1=P1^4; /* 報(bào)警值設(shè)定位選擇器 */sbit key2=P1^5; /* 報(bào)警值加一 */sbit key3=P1^6; /* 報(bào)警值減一*/sbit key4=P1^7; /* 報(bào)警功能開關(guān)鍵*/sbit LED1=P2^0; /* 報(bào)警指示燈LED1*/sbit LED2=P2^1; /* 報(bào)警指示燈LED2*/sbit beep=P2^2; /* 蜂鳴器報(bào)警*/sbit ADC_CS=P1^0;  /* ADC使能管腳 */sbit ADC_CLK=P1^1; /* ADC時(shí)鐘信號(hào)管腳 */sbit ADC_IO=P1^2;  /* ADC輸入輸出管腳*/void Lcd1602_Delay1ms(uint c);  //誤差 0usvoid LcdWriteCom(uchar com); /*LCD1602寫入8位命令子函數(shù)*/void LcdWriteData(uchar dat); /*LCD1602寫入8位數(shù)據(jù)子函數(shù)*/  void LcdInit(); /*LCD1602初始化子程序*/unsigned char *buff=" max value :";unsigned int set_value=100;   /* 報(bào)警值默認(rèn)設(shè)置為100 ,三位數(shù)字*/unsigned int adc_value=0;unsigned char Key_Scan()  /* 按鍵掃描函數(shù) */{unsigned char key_num = 0 ;/* check key if press */if ((key1 ==0)||(key2 ==0)||(key3 ==0)||(key4 ==0)){Delay10ms(1);  //消除抖動(dòng)if ((key1 ==0)||(key2 ==0)||(key3 ==0)||(key4 ==0)){if(key1==0) key_num=1;if(key2==0) key_num=2;if(key3==0) key_num=3;if(key4==0) key_num=4;}}while((key1 ==0)||(key2 ==0)||(key3 ==0)||(key4 ==0));return key_num;  //將讀取到鍵值的值返回}void all_init(void){ unsigned char i; LcdInit();/* 初始化LCD顯示 */ LED1=0;  /* 熄滅報(bào)警燈 */ LED2=0;  /* 熄滅報(bào)警燈 */  beep=0;  /* 關(guān)閉蜂鳴器 */ ADC_CS=1; /* 使能為1 */ LcdWriteCom(0x80); for(i=0;i<sizeof(buff),i++) LcdWriteData(buff[i]);} unsigned int get_adc_value(){} void main(){ unsigned char key_num; unsigned char beep_on_off=0;  /* 默認(rèn)為關(guān)閉狀態(tài) */ unsigned char set_value_ hundreds; /* 百位 */ unsigned char set_value_ decade;  /* 十位 */ unsigned char set_value_ single;  /* 個(gè)位 */ unsigned char set_value_bit_select=0; all_init(); while(1) {  adc_value=get_adc_value();key_num=Key_Scan();set_value_ hundreds=set_value/100;set_value_ decade =(set_value%100)/10;set_value_ single =set_value%10;switch(key_num){case 1:{set_value_bit_select++;if(set_value_bit_select>=3) set_value_bit_select=0;key_num=0;break;  }case 2:{ switch(set_value_bit_select){ case 0:{set_value_ single++;if(set_value_ single>9)set_value_ single=0;} case 1:{set_value_ decade++;if(set_value_ decade>9)set_value_ decade=0;} case 2:{set_value_ hundreds++;if(set_value_ hundreds>9)set_value_ hundreds=0;} default:break;} key_num=0;break;}case 3:{ switch(set_value_bit_select){ case 0:{set_value_ single--;if(set_value_ single<0)set_value_ single=9;} case 1:{set_value_ decade--;if(set_value_ decade<0)set_value_ decade=9;} case 2:{set_value_ hundreds--;if(set_value_ hundreds<0)set_value_ hundreds=9;} default:break;}key_num=0;break;}case 4:{beep_on_off=~beep_on_off;key_num=0;break;}default:break;}set_value=set_value_ hundreds*100+set_value_ decade*10+set_value_ single;LcdWriteCom(0x80+sizeof(buff));LcdWriteData(set_value/100);    /* 寫入百位 */LcdWriteData((set_value%100)/10);  /* 寫入十位 */LcdWriteData(set_value%10);/* 寫入個(gè)位 */if(beep_on_off==1){if(adc_value>=set_value)  /* 判斷氣體濃度是否大于設(shè)定值 */{LED1=1;  /* 點(diǎn)亮報(bào)警燈 */LED2=1;  /* 點(diǎn)亮報(bào)警燈 */ beep=1;  /* 打開蜂鳴器 */}else{LED1=0;  /* 熄滅報(bào)警燈 */LED2=0;  /* 熄滅報(bào)警燈 */ beep=0;  /* 關(guān)閉蜂鳴器 */}}  else{LED1=0;  /* 熄滅報(bào)警燈 */LED2=0;  /* 熄滅報(bào)警燈 */ beep=0;  /* 關(guān)閉蜂鳴器 */}  }}




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: av黄色免费 | 国产aa| 成人免费视频观看视频 | 国产精品视频一区二区三区不卡 | 国产乱码精品一品二品 | 国产成人福利在线观看 | 在线中文字幕亚洲 | 午夜免费电影 | 成人综合视频在线 | 午夜免费福利影院 | 国产视频二区在线观看 | 国产精品伦理一区二区三区 | 日韩久久综合 | 成人三级av | 久久国产精品一区二区三区 | 国产精品自产拍 | 六月婷婷久久 | 久草久 | 久久国产精品亚洲 | xx视频在线观看 | 国产亚洲精品美女久久久久久久久久 | 91精品国产综合久久久久久首页 | 日韩在线观看中文字幕 | 在线国产中文字幕 | 亚洲高清一区二区三区 | 国产精品免费在线 | 日韩精品一区二区三区四区 | 国产高清毛片 | 久久精品亚洲精品国产欧美 | 午夜精品久久久久久久99黑人 | 久久精品69| 日韩av免费看 | 国产大学生情侣呻吟视频 | 日日日日操 | 日韩在线一区二区 | 国产精品久久久久久亚洲调教 | 日韩欧美综合在线视频 | 伊人久久免费视频 | 影视一区| 孰女乱色一区二区三区 | 欧美一区二 |