制作出來的實物圖如下:
22.jpg (257.04 KB, 下載次數: 72)
下載附件
實物圖
2019-6-12 15:22 上傳
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
33QQ截圖20190612152236.jpg (49.86 KB, 下載次數: 65)
下載附件
仿真電路圖
2019-6-12 15:23 上傳
本文通過使用AT89C52單片機、DHT11傳感器模塊、1602液晶顯示屏模塊以及繼電器控制模塊。簡單明了的實現的溫濕度的控制要求。DHT11數字溫濕度傳感器把采集到的溫濕度數據傳給單片機。經過單片機的處理。準確的顯示到液晶屏上。如果溫度超過閥值,將會驅動繼電器工作。繼電器將驅動負載相應的工作。在整個系統的工作中,測控系統測得的溫濕度參數通過液晶顯示屏顯示出來供用戶參考。仿真結果表明,該系統完全能夠對倉庫的溫濕度進行監控并對過程中出現的偏差進行調節。
硬件主要以AT89C52型單片機為核心,通過LCD1602實時地顯示傳感器DHT11檢測到的溫濕度值,閥值可以通過AT24C02存儲,實現斷電保存。
#include <reg52.h> #include "1602.h" #include "dht.h" #include "2402.h"
//定義三個LED燈 sbit Led_qushi=P1^6; //去濕燈 sbit Led_jiangwen=P1^5; //降溫燈 sbit Led_shengwen=P1^4; //升溫燈 sbit Key_TH1 = P3^2; sbit Key_TH2 = P3^3; sbit Key_HH1 = P3^4; sbit Key_HH2 = P3^5;
//定義標識 volatile bit FlagStartRH = 0; //開始溫濕度轉換標志 volatile bit FlagKeyPress = 0; //有鍵按下
//定義溫濕度傳感器用外部變量 extern U8 U8FLAG,k; extern U8 U8count,U8temp; extern U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata; extern U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp; extern U8 U8comdata; extern U8 count,count_r;
U16 temp; S16 temperature, humidity; S16 idata TH, HH; //溫度上限和濕度上限 char * pSave; U8 keyvalue, keyTH1, keyTH2, keyHH1, keyHH2;
//定義變量 U16 RHCounter;
//數據初始化 void Data_Init() { RHCounter = 0; Led_qushi = 1; Led_jiangwen =1; Led_shengwen =1; TH = 40; HH = 85; keyvalue = 0; keyTH1 = 1; keyTH2 = 1; keyHH1 = 1; keyHH2 = 1;
}
//定時器0初始化 void Timer0_Init() { ET0 = 1; //允許定時器0中斷 TMOD =1; //定時器工作方式選擇 TL0 =0x06; TH0 =0xf8; //定時器賦予初值 TR0 = 1; //啟動定時器 }
//定時器0中斷 void Timer0_ISR (void) interrupt 1 using 0 { TL0 = 0x06; TH0 =0xf8; //定時器賦予初值
//每2秒鐘啟動一次溫濕度轉換 RHCounter ++; if (RHCounter>= 1000) { FlagStartRH= 1; RHCounter = 0; } }
//存入設定值、 void Save_Setting() { pSave = (char *)&TH; //地址低位對應低8位,高位對應高8位 wrteeprom(0,*pSave); //存溫度上限值TH低8位 DELAY(500); pSave ++; wrteeprom(1,*pSave); //存溫度上限值TH高8位 DELAY(500); pSave = (char *)&HH; wrteeprom(2,*pSave); //存濕度上限值RH低8位 DELAY(500); pSave ++; wrteeprom(3,*pSave); //存濕度上限值RH高8位 DELAY(500);
}
//載入設定值、 void Load_Setting() { pSave = (char *)&TH; *pSave++ =rdeeprom(0); *pSave =rdeeprom(1); pSave = (char*)&HH; *pSave++ =rdeeprom(2); *pSave =rdeeprom(3); if((TH>99)||(TH<0)) TH = 40; if((HH>99)||(HH<0)) HH = 85; }
void KeyProcess(uint num) { switch (num) { case 1: if (TH<99) TH++; L1602_char(1, 15, TH/10+48); L1602_char(1, 16, TH%10+48); break; case 2: if (TH>1) TH--; L1602_char(1, 15, TH/10+48); L1602_char(1, 16, TH%10+48); break; case 3: if (HH<99) HH++; L1602_char(2, 15, HH/10+48); L1602_char(2, 16, HH%10+48); break; case 4: if (HH>1) HH--; L1602_char(2, 15, HH/10+48); L1602_char(2, 16, HH%10+48); break; default: break; } Save_Setting();
}
/******************************************************************** * 名稱 : Main() * 功能 : 主函數 ***********************************************************************/ void main() { U16 i, j,testnum;
EA = 0;
Timer0_Init(); //定時器0初始化
Data_Init(); EA = 1;
L1602_init(); L1602_string(1,1,"Welcome to T&H "); L1602_string(2,1,"Control System! "); //延時 for(i=0;i<500;i++) for (j=0;j<1000;j++) {;} //清屏 L1602_string(1,1," "); L1602_string(2,1," "); L1602_string(1,1,"Tem: C TH:"); L1602_string(2,1,"Hum: % HH:");
//載入溫度上限和濕度上限設定值 Load_Setting(); L1602_char(1,15, TH/10+48); L1602_char(1,16, TH%10+48); L1602_char(2,15, HH/10+48); L1602_char(2,16, HH%10+48);
while(1) { //溫濕度轉換標志檢查 if (FlagStartRH == 1) { TR0 = 0; testnum = RH(); FlagStartRH = 0; TR0 = 1; //讀出溫濕度,只取整數部分 humidity = U8RH_data_H; temperature = U8T_data_H; //顯示溫濕度 L1602_int(1,5,temperature); L1602_int(2,5,humidity); } //溫濕度控制 if(temperature > TH) Led_jiangwen = 0; elseLed_jiangwen = 1; //降溫 if(humidity > HH) Led_qushi = 0; elseLed_qushi = 1; //去濕
//鍵盤查詢,在彈起時響應 if((Key_TH1)&&(keyTH1==0)) {FlagKeyPress = 1; keyvalue = 1;} else if((Key_TH2)&&(keyTH2==0)) {FlagKeyPress = 1; keyvalue = 2;} else if((Key_HH1)&&(keyHH1==0)) {FlagKeyPress = 1; keyvalue = 3;} else if((Key_HH2)&&(keyHH2==0)) {FlagKeyPress = 1; keyvalue = 4;} if(FlagKeyPress == 1) { KeyProcess(keyvalue); FlagKeyPress = 0; } if (!Key_TH1)keyTH1 = 0; elsekeyTH1 = 1; if(!Key_TH2) keyTH2 = 0; elsekeyTH2 = 1; if(!Key_HH1) keyHH1 = 0; elsekeyHH1 = 1; if(!Key_HH2) keyHH2 = 0; elsekeyHH2 = 1;
} }
0.png (3.69 KB, 下載次數: 61)
下載附件
2019-6-12 21:20 上傳
全部資料51hei下載地址:
基于單片機的溫濕度系統設計.zip
(257.92 KB, 下載次數: 112)
2019-6-12 15:26 上傳
點擊文件名下載附件
帶仿真電路 下載積分: 黑幣 -5
|