#include <reg52.h> #include <intrins.h> #include <absacc.h> #include <math.h> //包含頭文件 #define uchar unsigned char #define uint unsigned int //宏定義 //定義四個輸出端口 sbit Led_jiashi=P3^4; //加濕 sbit Led_qushi=P3^3; //去濕 sbit Led_jiangwen=P3^1; //降溫 sbit Led_shengwen=P3^2; //升溫 //定義三個設置按鍵 sbit Key_SET = P2^0; //設置按鍵 sbit Key_ADD = P2^1; //加按鍵 sbit Key_SUB = P2^2; //減按鍵 sbit Key_OK = P2^3; //確定按鍵 //定義24C02數據口 sbit SCL = P1^0; sbit SDA = P1^1; //定義DHT11數據口 sbit DATA = P1^7; sbit buzz=P3^5; //蜂鳴器接口 //定義LCD1602端口 sbit E=P1^3; //1602使能引腳 //sbit RW=P2^6; //1602讀寫引腳 我們只需要向液晶里寫數據,不需要讀取數據,所以就把讀寫引腳直接接地,程序里就不用單獨控制了 sbit RS=P1^2; //1602數據/命令選擇引腳 //定義全局變量 uchar U8FLAG,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; uchar Mode,humidity,temperature; //設置模式、讀取到的濕度溫度數據存儲變量 char TH,TL,HH,HL; //溫濕度的上下限變量 bit bdataFlagStartRH,hot,cold,humid,dry,BJ; //開啟轉換溫濕度標志位、熱冷濕干和報警變量 //定時器0初始化 void Timer0_Init() { ET0= 1; //允許定時器0中斷 TMOD= 0x11; //定時器工作方式選擇 TL0= 0xb0; TH0= 0x3c; //定時器賦予初值50ms TR0= 1; //啟動定時器T0 } //定時器0中斷 void Timer0_ISR (void) interrupt 1 using 0 { ucharRHCounter; //定義計數變量 TL0= 0xb0; TH0= 0x3c; //定時器賦予初值 RHCounter++; //每進一次中斷就是50ms,此變量加一 if(RHCounter%10==0&&BJ==1) //加到10的整數倍,并且報警標志位為1 buzz=!buzz; //開啟報警,每500ms蜂鳴器引腳取反一次,就是蜂鳴器一秒響一次 elseif(BJ==0) //報警標志位為0時 buzz=1; //關閉報警 //每2秒鐘啟動一次溫濕度轉換 if (RHCounter >= 40) //計數到40次,就是2s,啟動一次溫濕度轉換 { FlagStartRH = 1; //啟動轉換變量置1 RHCounter = 0; //計數變量清零 } } 余下完整程序見附件
|