標題: 基于51單片機的DHT11溫濕度檢測裝置設計 含源碼與實物制作 [打印本頁]
作者: troy8862 時間: 2018-8-21 05:04
標題: 基于51單片機的DHT11溫濕度檢測裝置設計 含源碼與實物制作
總體來說,本次設計主要涉及了溫濕度的測量、顯示以及實現簡單控制。硬件方面有五個模塊,即單片機主控模塊、傳感器模塊、LCD1602液晶顯示模塊、報警模塊以及閾值設置模塊。其中主控模塊已經給出,我們只需適當增加驅動電路即可。
傳感器模塊使用的是DHT11數字溫濕度傳感器。通過DHT11檢測出當前環境下的溫濕度,將所測數據交給AT單片機進行分析和處理,并分別存入不同數組以便顯示時候用。其中,為了顯示穩定,本系統每間隔5s采集一次數據送入單片機。
1602液晶顯示模塊就是實現溫濕度檢測值和閾值的顯示。其分兩行顯示,上邊一行顯示濕度,下邊顯示溫度值,兩行的末尾兩位是閾值顯示位,正常工作的時候可以通過按鍵將其隱藏,需要調節閾值時,再顯示出來方便調整,相對構建了比較友好的人機交互。
小燈報警模塊實現了檢測值超過閾值的時候相應顏色的燈亮報警。本系統采用的是不同顏色的led燈,實際可以換成繼電器驅動電機、加熱器等,因此無論溫度還是濕度超出范圍led會進行報警提示。提醒工作人員此時溫度濕度數據出現異常、需及時調整,及時啟用升溫器、加濕器、降溫風扇以及噴霧器來有效的調整實驗室內溫濕度。
閾值設置模塊通過四個按鍵來實現閾值設置功能的。使得在不同環境下設置閾值提供了極大的方便,不需要每次都在程序里改動然后再燒錄,省去了復雜的過程。
STC89C52單片機每2秒鐘從DHT11溫濕度傳感器中讀入溫度和濕度,在液晶屏上即時顯示。液晶屏上同時顯示溫濕度上限值,該上限值保存外外部EEPROM存儲器中,掉電不失,并且可以通過四只按鍵上調或下調。當溫度或濕度值超過上限值時,報警信號點亮相應報警燈。該報警信號可以通過三極管驅動繼電器,以控制外部風機或加熱器。
制作出來的實物圖如下:
IMG_20180525_212603.jpg (3.1 MB, 下載次數: 127)
下載附件
溫濕度檢測值
2018-8-21 05:00 上傳
IMG_20180525_212610.jpg (2.92 MB, 下載次數: 115)
下載附件
上電顯示界面
2018-8-21 05:00 上傳
單片機源程序:
- #include <reg52.h>
- #include "1602.h"
- #include "dht.h"
- #include "2402.h"
- //定義三個LED燈
- sbit Led_qushi=P1^6; //去濕燈
- sbit Led_jiangwen=P1^5; //降溫燈
- sbit fmq=P1^3; //蜂鳴器
- 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; //有鍵按下
- volatile bit fmqt = 0;
- volatile bit fmqh = 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;
- 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,"Hua Hua`s Design");
- L1602_string(2,1,"HaHaHaHa");
- //延時
- for (i=0;i<700;i++)
- for (j=0;j<700;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;
- fmqt=1;
- }
- else
- {
- Led_jiangwen = 1;
- fmqt=0;
- } //降溫
- if (humidity > HH)
- {
- Led_qushi = 0;
- fmqh=1;
- }
- else
- {
- Led_qushi = 1;
- fmqh=0;
- } //去濕
- if((fmqt==1)||(fmqh==1))
- fmq=0;
- else
- fmq=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;
- else keyTH1 = 1;
- if (!Key_TH2) keyTH2 = 0;
- else keyTH2 = 1;
- if (!Key_HH1) keyHH1 = 0;
- else keyHH1 = 1;
- if (!Key_HH2) keyHH2 = 0;
- else keyHH2 = 1;
-
- }
- }
復制代碼
全部資料51hei下載地址:
溫濕度檢測程序.zip
(82.08 KB, 下載次數: 417)
2018-8-21 05:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者: 308154278 時間: 2019-1-10 12:17
怎么連線?
作者: troy8862 時間: 2019-1-19 17:29
電路原理圖附件
-
-
原理圖.pdf
2019-1-19 17:26 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
51.46 KB, 下載次數: 202, 下載積分: 黑幣 -5
作者: yxwdzero 時間: 2019-2-18 19:49
好厲害啊
作者: ontheroad 時間: 2019-2-20 15:44
給樓主點贊!
作者: 遷就 時間: 2019-12-20 09:52
謝謝分享
作者: sick 時間: 2020-4-3 21:32
是不是只能設置上限
作者: sasafair 時間: 2020-4-3 22:46
DHT溫度實在不準
作者: 布靈布靈 時間: 2020-4-4 11:06
謝謝分享
作者: 春林初盛a 時間: 2020-4-17 12:29
請問這個是你自己焊接的嗎
作者: 705800782 時間: 2020-5-13 14:09
怎么下載打不開啊?
作者: songfengshili 時間: 2020-5-13 14:53
謝謝分享
作者: 195470880 時間: 2020-5-14 21:40
謝謝樓主,
謝謝分享!
作者: 705800782 時間: 2020-5-17 16:21
下載了 打不開程序
作者: abcd因 時間: 2020-5-18 12:22
下載了,打不開程序
作者: 705800782 時間: 2020-5-22 19:36
你所說四個按鍵 有個閾值設置 ??感覺原理圖不太符合啊?
作者: faridzled 時間: 2020-7-3 12:14
thanks for sharing
作者: chenqi369 時間: 2022-4-12 14:53
這個有電路板的文件嘛?
作者: zbfdyw 時間: 2022-4-13 08:24
做的真是不錯,不點贊都不行,所以堅定的點贊!
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
欧美性video
精品亚洲一区二区
|
一区二区三区四区在线免费观看
|
亚洲日韩中文字幕一区
|
国产日韩精品在线
|
亚州午夜精品
|
日韩在线视频一区
|
国产高清不卡
|
国产一区二区在线看
|
国产精品黄视频
|
精品一区二区三区在线观看国产
|
在线视频 欧美日韩
|
亚洲一区自拍
|
免费在线一区二区三区
|
国产区视频在线观看
|
亚洲激情综合
|
av片免费|
野狼在线社区2017入口
|
久久久久国产一区二区三区
|
国产日韩欧美
|
天堂在线www
|
91久久国产综合久久
|
韩国久久|
99精品欧美一区二区三区综合在线
|
九九综合
|
国产精品亚洲第一
|
精品国产一区二区三区在线观看
|
色呦呦在线|
国产一区在线视频
|
最新av片|
欧美电影免费网站
|
欧美一级全黄
|
欧美在线视频网
|
91在线第一页|
欧美最猛性xxxxx亚洲精品
|
免费看黄色视屏
|
国产盗摄视频
|
欧美1区|
免费av手机在线观看
|
丁香婷婷久久久综合精品国产
|
青青久在线视频
|
中文字幕在线中文
|