僅供學習師兄參考,文件中包括原理圖和程序,有問題評論
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (34.91 KB, 下載次數: 76)
下載附件
2020-12-8 01:37 上傳
單片機源程序如下:
- #include "common.h"
- #include "lcd1602.h"
- #include "dht.h"
- extern unsigned char U8RH_data_H;
- extern unsigned char U8T_data_H;
- sbit key1 = P1^0;//設置鍵
- sbit key2 = P1^1;//加鍵
- sbit key3 = P1^2;//減鍵
- sbit relay1 = P1^6;//加熱繼電器
- sbit relay2 = P1^7;//降溫繼電器
- sbit relay3 = P3^6;//加濕繼電器
- sbit relay4 = P3^7;//除濕繼電器
- sbit beep = P2^0;//蜂鳴器
- unsigned char tl = 10,th = 35,hl = 15,hh = 70;//溫濕度上下限初始值
- unsigned char setn = 0;//設置標志
- void display_alarm()//顯示報警值
- {
- lcd_write_char(4,0,tl/10+0x30);
- lcd_write_char(5,0,tl%10+0x30);
- lcd_write_char(13,0,th/10+0x30);
- lcd_write_char(14,0,th%10+0x30);
- lcd_write_char(4,1,hl/10+0x30);
- lcd_write_char(5,1,hl%10+0x30);
- lcd_write_char(13,1,hh/10+0x30);
- lcd_write_char(14,1,hh%10+0x30);
- }
- void keyscan()
- {
- if(key1 == 0)//設置鍵按下
- {
- delay_ms(10);
- if(key1 == 0)
- {
- beep = 0;
- delay_ms(100);
- beep = 1;
- while(key1 == 0);//等待按鍵松開
- setn++;
- if(setn > 4)//按下次數超過4次,退出設置
- {
- setn = 0;
- lcd_write_com(0x0c);//關閉光標
- lcd_write_str(0,0,"Tem: C Hum: %");
- lcd_write_str(0,1," ");
- }
- if(setn == 1)//設置溫度下限
- {
- lcd_write_str(0,0,"Tml: C Tmh: C");
- lcd_write_str(0,1,"Hml: % Hmh: %");
- display_alarm();
- lcd_write_com(0x80+5);
- lcd_write_com(0x0f);
- }
- if(setn == 2)//溫度上限
- {
- lcd_write_com(0x80+14);
- lcd_write_com(0x0f);
- }
- if(setn == 3)//濕度下限
- {
- lcd_write_com(0x80+0x40+5);
- lcd_write_com(0x0f);
- }
- if(setn == 4)//濕度上限
- {
- lcd_write_com(0x80+0x40+14);
- lcd_write_com(0x0f);
- }
- }
- }
- if(key2 == 0)//加鍵按下
- {
- delay_ms(10);
- if(key2 == 0)
- {
- beep = 0;
- delay_ms(100);
- beep = 1;
- while(key2 == 0);
- if(setn == 1)
- {
- if(th - tl > 1)//上限必須大于下限,下限才能加
- tl ++;
- display_alarm();
- lcd_write_com(0x80+5);
- lcd_write_com(0x0f);
- }
- if(setn == 2)
- {
- if(th < 99)//最大到99
- th++;
- display_alarm();
- lcd_write_com(0x80+14);
- lcd_write_com(0x0f);
- }
- if(setn == 3)
- {
- if(hh - hl > 1)//上限必須大于下限,下限才能加
- hl++;
- display_alarm();
- lcd_write_com(0x80+0x40+5);
- lcd_write_com(0x0f);
- }
- if(setn == 4)
- {
- if(hh < 99)//最大到99
- hh++;
- display_alarm();
- lcd_write_com(0x80+0x40+14);
- lcd_write_com(0x0f);
- }
- }
- }
- if(key3 == 0)//減鍵按下
- {
- delay_ms(10);
- if(key3 == 0 )
- {
- beep = 0;
- delay_ms(100);
- beep = 1;
- while(key3 == 0);
- if(setn == 1)
- {
- if(tl > 0)//最小到0
- tl --;
- display_alarm();
- lcd_write_com(0x80+5);
- lcd_write_com(0x0f);
- }
- if(setn == 2)
- {
- if(th - tl > 1)//上限必須大于下限,上限才能減
- th--;
- display_alarm();
- lcd_write_com(0x80+14);
- lcd_write_com(0x0f);
- }
- if(setn == 3)
- {
- if(hl > 0)
- hl--;
- display_alarm();
- lcd_write_com(0x80+0x40+5);
- lcd_write_com(0x0f);
- }
- if(setn == 4)
- {
- if(hh - hl > 1)//上限必須大于下限,上限才能減
- hh--;
- display_alarm();
- lcd_write_com(0x80+0x40+14);
- lcd_write_com(0x0f);
- }
- }
- }
- }
- void main()
- {
- unsigned int count;
- short temperature;
- short humidity;
- lcd_init();//1602液晶初始化
- lcd_write_str(0,0,"Tem: C Hum: %");
- lcd_write_str(0,1," ");
- do
- {
- RH();delay_ms(100);
- }while(U8RH_data_H==0&&U8T_data_H==0);
- while(1)
- {
- keyscan();//按鍵掃描
- if(count++>=10 && setn == 0)
- {
- count=0;
- RH();
-
- //讀出溫濕度,只取整數部分
- humidity = U8RH_data_H;
- temperature = U8T_data_H;
-
- lcd_write_char(4,0,temperature/10+0x30);
- lcd_write_char(5,0,temperature%10+0x30);
- lcd_write_char(13,0,humidity/10+0x30);
- lcd_write_char(14,0,humidity%10+0x30);
- if(humidity>=hh)//濕度高于上限,除濕繼電器開啟。否則關閉
- relay4 = 0;
- else
- relay4 = 1;
- if(humidity<=hl)//濕度低于下限,加濕繼電器開啟。否則關閉
- relay3 = 0;
- else
- relay3 = 1;
- if(temperature>=th)//溫度高于上限,降溫繼電器開啟。否則關閉
- relay2 = 0;
- else
- relay2 = 1;
- if(temperature<=tl)//溫度低于下限,加熱繼電器開啟。否則關閉
- relay1 = 0;
- else
- relay1 = 1;
- if(humidity>=hh || humidity<=hl || temperature>=th || temperature<=tl)//溫濕度超限
- {
- beep = ~beep;//蜂鳴器報警
- delay_ms(100);
- }
- else
- {
- beep = 1;
- }
- }
- }
- }
復制代碼
所有資料51hei提供下載:
仿真.rar
(75.32 KB, 下載次數: 258)
2020-12-7 20:39 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
程序.rar
(67.44 KB, 下載次數: 221)
2020-12-7 20:39 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|