標題: 單片機DHT11溫濕度系統程序設計-帶仿真 [打印本頁]
作者: gagalonghun 時間: 2019-6-12 15:27
標題: 單片機DHT11溫濕度系統程序設計-帶仿真
制作出來的實物圖如下:
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
作者: 2017080915 時間: 2020-4-2 16:12
在下新手,試著用這個程序練習。發現KEIL程序找不到1602、DHT和2402頭文件。問一下您的頭文件是自己編寫的還是在網上下載的,方便發一下嗎?謝謝
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
九九九视频精品
|
不卡av在线
|
精品欧美乱码久久久久久
|
日本在线免费看最新的电影
|
久久久久亚洲精品国产
|
奇米四色影视
|
日本不卡免费新一二三区
|
久久99精品国产
|
久久这里有精品
|
日韩国产在线观看
|
视频一区 亚洲
|
www.久久.com|
av资源中文在线天堂
|
成人小视频在线观看
|
久久久www成人免费精品
|
91久久精品|
欧美一区二区三区视频在线观看
|
美女视频h
|
日韩一区二区在线视频
|
久久久久久久网
|
欧美成人激情
|
亚州午夜精品
|
jlzzjlzz欧美大全|
国产成人小视频
|
欧美美女爱爱视频
|
日韩欧美一级精品久久
|
一级黄色生活视频
|
亚洲精品456
|
欧美综合一区二区
|
国产精品久久久久久久久久三级
|
欧美二区在线
|
国产中的精品av涩差av
|
国产丝袜一区二区三区免费视频
|
水蜜桃久久夜色精品一区
|
伊人啪啪网
|
日日碰碰
|
免费观看日韩精品
|
亚洲三区在线观看
|
亚洲a在线视频
|
欧美日韩在线综合
|
亚洲国产情侣自拍
|