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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4409|回復: 1
收起左側

51單片機之煙霧報警器(MQ-2)

[復制鏈接]
ID:316627 發表于 2018-4-28 19:46 來自觸屏版 | 顯示全部樓層 |閱讀模式
51單片機之煙霧報警器(MQ-2)
今天朋友做畢業設計,讓我幫他寫下程序,花了兩個小時,給了他們一個模板,雖然很簡單,但是還是拿出來分享吧,適用于初學者。高手不要忘下看了


要求:液晶屏顯示.四個按鍵分別控制選擇設定值位數,加一,減一。報警功能開關鍵
lcd.c文件
#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;//寫入時序Lcd1602_Delay1ms(5);LCD1602_E = 0;// Lcd1602_Delay1ms(1);LCD1602_DATAPINS = com << 4; //發送低四位Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時序Lcd1602_Delay1ms(5);LCD1602_E = 0;}void LcdWriteData(uchar dat) //寫入數據{LCD1602_E = 0;//使能清零LCD1602_RS = 1;//選擇寫入數據LCD1602_RW = 0;//選擇寫入LCD1602_DATAPINS = dat;//由于4位的接線是接到P0口的高四位,所以傳送高四位不用改Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時序Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = dat << 4; //寫入低四位Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時序Lcd1602_Delay1ms(5);LCD1602_E = 0;}void LcdInit() //LCD初始化子程序{LcdWriteCom(0x32);//將8位總線轉為4位總線LcdWriteCom(0x28);//在四位線下的初始化LcdWriteCom(0x0c); //開顯示不顯示光標LcdWriteCom(0x06); //寫一個指針加1LcdWriteCom(0x01); //清屏LcdWriteCom(0x80); //設置數據指針起點}

main.c文件:
/**CS_ :片選使能,低電平芯片使能。*CH0 :模擬輸入通道 0,或作為 IN+/-使用。*CH1 :模擬輸入通道 1,或作為 IN+/-使用。*GND :芯片參考 0 電位(地)。*DI :數據信號輸入,選擇通道控制。*DO :數據信號輸出,轉換數據輸出。*CLK :芯片時鐘輸入。*Vcc/REF :電源輸入及參考電壓輸入(復用)。*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit key1=P1^4; /* 報警值設定位選擇器 */sbit key2=P1^5; /* 報警值加一 */sbit key3=P1^6; /* 報警值減一*/sbit key4=P1^7; /* 報警功能開關鍵*/sbit LED1=P2^0; /* 報警指示燈LED1*/sbit LED2=P2^1; /* 報警指示燈LED2*/sbit beep=P2^2; /* 蜂鳴器報警*/sbit ADC_CS=P1^0;  /* ADC使能管腳 */sbit ADC_CLK=P1^1; /* ADC時鐘信號管腳 */sbit ADC_IO=P1^2;  /* ADC輸入輸出管腳*/void Lcd1602_Delay1ms(uint c);  //誤差 0usvoid LcdWriteCom(uchar com); /*LCD1602寫入8位命令子函數*/void LcdWriteData(uchar dat); /*LCD1602寫入8位數據子函數*/  void LcdInit(); /*LCD1602初始化子程序*/unsigned char *buff=" max value :";unsigned int set_value=100;   /* 報警值默認設置為100 ,三位數字*/unsigned int adc_value=0;unsigned char Key_Scan()  /* 按鍵掃描函數 */{unsigned char key_num = 0 ;/* check key if press */if ((key1 ==0)||(key2 ==0)||(key3 ==0)||(key4 ==0)){Delay10ms(1);  //消除抖動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;  /* 熄滅報警燈 */ LED2=0;  /* 熄滅報警燈 */  beep=0;  /* 關閉蜂鳴器 */ 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;  /* 默認為關閉狀態 */ unsigned char set_value_ hundreds; /* 百位 */ unsigned char set_value_ decade;  /* 十位 */ unsigned char set_value_ single;  /* 個位 */ 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);/* 寫入個位 */if(beep_on_off==1){if(adc_value>=set_value)  /* 判斷氣體濃度是否大于設定值 */{LED1=1;  /* 點亮報警燈 */LED2=1;  /* 點亮報警燈 */ beep=1;  /* 打開蜂鳴器 */}else{LED1=0;  /* 熄滅報警燈 */LED2=0;  /* 熄滅報警燈 */ beep=0;  /* 關閉蜂鳴器 */}}  else{LED1=0;  /* 熄滅報警燈 */LED2=0;  /* 熄滅報警燈 */ beep=0;  /* 關閉蜂鳴器 */}  }}
04243A61-F77C-4495-B5D5-B5F77B6EB95F.jpeg
回復

使用道具 舉報

ID:312830 發表于 2018-4-29 19:19 | 顯示全部樓層
方便加下你qq嗎?我想看原格式的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产做a爱片久久毛片 | 一区二区三区网站 | 成人免费在线观看视频 | 久久久91精品国产一区二区三区 | 国产日韩欧美一区 | 香蕉久久a毛片 | 久久爱黑人激情av摘花 | 久久r免费视频 | 91香蕉| 99久久99 | 91视频一区二区三区 | 久久九九99| 国产乱码精品一区二区三区五月婷 | 激情欧美日韩一区二区 | 亚洲精品天堂 | 黄色片免费在线观看 | 在线播放精品视频 | 国产精品一区二区久久久久 | 国产精品久久久久久久久污网站 | 亚洲自拍偷拍欧美 | 欧美日韩国产一区二区三区 | 精品视频在线观看 | 国产精品美女久久久久aⅴ国产馆 | 国产精品一区二区久久 | 免费a v网站 | 91精品久久久 | 精品久久伊人 | 一级片片| 亚洲高清视频一区二区 | 国产人成精品一区二区三 | 伊人网99| 伊人免费网 | 国产在线一区二区三区 | 久久精品视频一区二区 | 亚洲成人精品一区 | av影音在线| 一a级片| 久久99精品久久久 | 97精品一区二区 | 久久久精品一区二区 | 午夜精品久久久久久久久久久久久 |