51單片機(jī)-智能環(huán)境監(jiān)測(cè)系統(tǒng)程序_第1頁
51單片機(jī)-智能環(huán)境監(jiān)測(cè)系統(tǒng)程序_第2頁
51單片機(jī)-智能環(huán)境監(jiān)測(cè)系統(tǒng)程序_第3頁
51單片機(jī)-智能環(huán)境監(jiān)測(cè)系統(tǒng)程序_第4頁
51單片機(jī)-智能環(huán)境監(jiān)測(cè)系統(tǒng)程序_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

51單片機(jī)智能環(huán)境監(jiān)測(cè)系統(tǒng)程序王維進(jìn)#include<reg52.h>#include<intrins.h>#include<absacc.h>#include<math.h>#include"0832.h"#defineucharunsignedchar#defineuintunsignedint#include"eeprom52.h"sbitDATA=P3^7;//溫濕度sbitE=P2^5; //1602使能引腳sbitRS=P2^7; //1602數(shù)據(jù)/命令選擇引腳sbitRW=P2^6;sbitK1=P1^3;//設(shè)置鍵sbitK2=P1^4;//加sbitK3=P1^5;//減sbitK4=P1^7;//人體sbitK5=P1^6;//布防撤防按鍵sbitLED1=P3^1; //煙霧報(bào)警sbitLED2=P3^2; //溫度上限sbitLED3=P3^3; //溫度下限sbitLED4=P3^4; //濕度上限sbitLED5=P3^5; //濕度下限sbitLED6=P3^6; //紅外報(bào)警sbitalarm=P3^0; //蜂鳴器ucharU8FLAG,U8temp,U8comdata,U8RH_data_H_temp,U8RH_data_L_temp,U8T_data_H_temp,U8T_data_L_temp,U8checkdata_temp;ucharU8RH_data_H,U8RH_data_L,U8T_data_H,U8T_data_L,U8checkdata;ucharMode,humidity,temperature,smog;bitBJ_LED1=1,BJ_LED2=1,BJ_LED3=1,BJ_LED4=1,BJ_LED5=1,BJ_LED6=1;bitbdataFlagStartRH;ucharflag;//記錄當(dāng)前設(shè)置狀態(tài)uintcount;//定時(shí)器0初始化voidTimer0_Init(){ ET0=1;//允許定時(shí)器0中斷 TMOD=0x11;//定時(shí)器工作方式選擇 TL0=0xFF; TH0=0x4B;//定時(shí)器賦予初值 TH1=0xdc; TL1=0x00; ET1=1; TR0=1;//啟動(dòng)定時(shí)器}//定時(shí)器0中斷voidTimer0_ISR(void)interrupt1using0{ ucharRHCounter; TL0=0xFF; TH0=0x4B;//定時(shí)器賦予初值 RHCounter++;if(RHCounter>=15){FlagStartRH=1; RHCounter=0;}}voidDelay1(uintj){uchari;for(;j>0;j--){ for(i=0;i<27;i++);}}voidDelay_10us(void){uchari;i--;i--;i--;i--;i--;i--;} voidCOM(void){uchari;for(i=0;i<8;i++) { U8FLAG=2; while((!DATA)&&U8FLAG++); Delay_10us(); Delay_10us(); Delay_10us(); U8temp=0;if(DATA)U8temp=1; U8FLAG=2; while((DATA)&&U8FLAG++); //超時(shí)則跳出for循環(huán) if(U8FLAG==1)break; //判斷數(shù)據(jù)位是0還是1 //如果高電平高過預(yù)定0高電平值則數(shù)據(jù)位為1 U8comdata<<=1; U8comdata|=U8temp;//0}//rof}//--------------------------------//-----溫濕度讀取子程序------------//--------------------------------//----以下變量均為全局變量--------//----溫度高8位==U8T_data_H------//----溫度低8位==U8T_data_L------//----濕度高8位==U8RH_data_H-----//----濕度低8位==U8RH_data_L-----//----校驗(yàn)8位==U8checkdata-----//----調(diào)用相關(guān)子程序如下----------//----Delay();,Delay_10us();,COM();//--------------------------------ucharRH(void){//主機(jī)拉低18msDATA=0; Delay1(180);//原來為5 DATA=1; //總線由上拉電阻拉高主機(jī)延時(shí)20us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us(); //主機(jī)設(shè)為輸入判斷從機(jī)響應(yīng)信號(hào) DATA=1; //判斷從機(jī)是否有低電平響應(yīng)信號(hào)如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行 if(!DATA) //T! { U8FLAG=2; //判斷從機(jī)是否發(fā)出80us的低電平響應(yīng)信號(hào)是否結(jié)束 while((!DATA)&&U8FLAG++); U8FLAG=2; //判斷從機(jī)是否發(fā)出80us的高電平,如發(fā)出則進(jìn)入數(shù)據(jù)接收狀態(tài) while((DATA)&&U8FLAG++); //數(shù)據(jù)接收狀態(tài) COM(); U8RH_data_H_temp=U8comdata; COM(); U8RH_data_L_temp=U8comdata; COM(); U8T_data_H_temp=U8comdata; COM(); U8T_data_L_temp=U8comdata; COM(); U8checkdata_temp=U8comdata; DATA=1; //數(shù)據(jù)校驗(yàn) U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp==U8checkdata_temp) { U8RH_data_H=U8RH_data_H_temp; U8RH_data_L=U8RH_data_L_temp; U8T_data_H=U8T_data_H_temp; U8T_data_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp; } return1; } else//傳感器不響應(yīng) { return0; }}/*********************************************************************文件名:液晶1602顯示.c*描述:該程序?qū)崿F(xiàn)了對(duì)液晶1602的控制。***********************************************************************//*********************************************************************名稱:delay()*功能:延時(shí),延時(shí)時(shí)間大概為140US。*輸入:無*輸出:無***********************************************************************/voiddelay(){ inti,j; for(i=0;i<=10;i++) for(j=0;j<=2;j++);} /*********************************************************************名稱:enable(uchardel)*功能:1602命令函數(shù)*輸入:輸入的命令值*輸出:無***********************************************************************/voidwrite_1602com(uchardel){ P0=del; RS=0; E=1; delay(); E=0; delay();}/*********************************************************************名稱:write(uchardel)*功能:1602寫數(shù)據(jù)函數(shù)*輸入:需要寫入1602的數(shù)據(jù)*輸出:無***********************************************************************/voidwrite_1602dat(uchardel){ P0=del; RS=1; E=1; delay(); E=0; delay();}/*********************************************************************名稱:L1602_init()*功能:1602初始化,請(qǐng)參考1602的資料*輸入:無*輸出:無***********************************************************************/voidL1602_init(void){ write_1602com(0x38); write_1602com(0x0c); write_1602com(0x06); write_1602com(0x01);//清屏要放在最后}voiddisplay(){write_1602com(0x83);write_1602dat(temperature%100/10+0x30);write_1602dat(temperature%100%10+0x30);write_1602com(0x8c);write_1602dat(humidity%100/10+0x30);write_1602dat(humidity%100%10+0x30);write_1602com(0xc3);write_1602dat(smog%100/10+0x30);write_1602dat(smog%100%10+0x30); write_1602com(0x85); write_1602dat(0xdf); }voiddisplay_1(){write_1602com(0x83);write_1602dat(TH%100/10+0x30);write_1602dat(TH%100%10+0x30);write_1602com(0x8c);write_1602dat(TL%100/10+0x30);write_1602dat(TL%100%10+0x30);write_1602com(0xc3);write_1602dat(HH%100/10+0x30);write_1602dat(HH%100%10+0x30);write_1602com(0xcc);write_1602dat(HL%100/10+0x30);write_1602dat(HL%100%10+0x30);}voidwrite_string(uchar*str){while(*str){write_1602dat(*str);str++;}}/***按鍵函數(shù)***/voidKEY(){if(K1==0){Delay1(200);if(K1==0){ flag++; if(flag==1){ write_1602com(0x80); write_string("TH:CTL:C"); write_1602com(0xc0); write_string("HH:%HL:%"); write_1602com(0x85); write_1602dat(0xdf); write_1602com(0x8e); write_1602dat(0xdf); display_1(); write_1602com(0x84); write_1602com(0x0f); } elseif(flag==2) write_1602com(0x8d); elseif(flag==3) write_1602com(0xc4); elseif(flag==4) write_1602com(0xcd); elseif(flag==5) { write_1602com(0xc0); write_string(""); write_1602com(0x80); write_string("Sg:mg/m3"); write_1602com(0x83); write_1602dat(SM/10+0x30); write_1602dat(SM%10+0x30); write_1602com(0x84); } else { write_1602com(0x80); write_string("Te:CHu:%"); write_1602com(0xc0); if(bufang==1) write_string("Sg:mg/m3B"); else write_string("Sg:mg/m3"); write_1602com(0x85);write_1602dat(0xdf);display(); write_1602com(0x0c); flag=0; write_eeprom(); } while(!K1);}}if(K2==0){Delay1(200);if(K2==0){switch(flag){ case1:TH++;if(TH>99)TH=0;if(TH<=TL)TH=TL+1;write_1602com(0x83);write_1602dat(TH/10+0x30);write_1602dat(TH%10+0x30);write_1602com(0x84);break; case2:TL++;if(TL>98)TL=0;if(TL>=TH)TL=TH-1;write_1602com(0x8c);write_1602dat(TL/10+0x30);write_1602dat(TL%10+0x30);write_1602com(0x8d);break; case3:HH++;if(HH>99)HH=0;if(HH<=HL)HH=HL+1;write_1602com(0xc3);write_1602dat(HH/10+0x30);write_1602dat(HH%10+0x30);write_1602com(0xc4);break; case4:HL++;if(HL>98)HL=0;if(HL>=HH)HL=HH-1;write_1602com(0xcc);write_1602dat(HL/10+0x30);write_1602dat(HL%10+0x30);write_1602com(0xcd);break; case5:SM++;if(SM>9)SM=0;write_1602com(0x83);write_1602dat(SM/10+0x30);write_1602dat(SM%10+0x30);write_1602com(0x84);break; }while(!K2);}}if(K3==0){Delay1(200);if(K3==0){switch(flag){case1:TH--;if(TH>99)TH=99;if(TH<=TL)TH=TL+1;write_1602com(0x83);write_1602dat(TH/10+0x30);write_1602dat(TH%10+0x30);write_1602com(0x84);break;case2:TL--;if(TL>99)TL=98;if(TL>=TH)TL=TH-1;write_1602com(0x8c);write_1602dat(TL/10+0x30);write_1602dat(TL%10+0x30);write_1602com(0x8d);break;case3:HH--;if(HH>99)HH=99;if(HH<=HL)HH=HL+1;write_1602com(0xc3);write_1602dat(HH/10+0x30);write_1602dat(HH%10+0x30);write_1602com(0xc4);break;case4:HL--;if(HL>99)HL=98;if(HL>=HH)HL=HH-1;write_1602com(0xcc);write_1602dat(HL/10+0x30);write_1602dat(HL%10+0x30);write_1602com(0xcd);break;case5:SM--;if(SM>99)SM=9;write_1602com(0x83);write_1602dat(SM/10+0x30);write_1602dat(SM%10+0x30);write_1602com(0x84);break;}while(!K3);}}if(K5==0){Delay1(200);if(K5==0&&flag==0){ if(bufang==2||bufang==1) { bufang=0; count=0; TR1=0; write_eeprom(); write_1602com(0xcf); write_1602dat(''); } else {TR1=1; write_1602com(0xcf); write_1602dat('Z'); bufang=2; }while(K5==0);}}}voidOnealarm(){alarm=0;Delay1(200);alarm=1;}/*********************************************************************名稱:Main()*功能:主函數(shù)***********************************************************************/voidmain(){uinttestnum;EA=0; Timer0_Init();//定時(shí)器0初始化 EA=1; RW=0; L1602_init(); write_1602com(0x85);write_1602dat(0xdf); write_1602com(0x80);write_1602dat('T');display(); init_eeprom(); read_eeprom(); write_1602com(0x80); write_string("Te:CHu:%"); write_1602com(0xc0); if(bufang==1) write_string("Sg:mg/m3B"); else write_string("Sg:mg/m3"); while(1) { if(FlagStartRH==1) //溫濕度轉(zhuǎn)換標(biāo)志檢查 { TR0=0;testnum

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論