仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語言:C語言
設(shè)計編號:【F01】
1.? 簡介
? 本文提出了一種基于51單片機的LCD1602溫濕度報警系統(tǒng)。該設(shè)計使用STC89C52單片機、DHT11傳感器模塊、LCD1602液晶顯示屏模塊以及報警模塊,簡單明了的實現(xiàn)可提要求。DHT11數(shù)字溫濕度傳感器把采集到的溫濕度數(shù)據(jù)傳給單片機,經(jīng)過單片機的處理,準確的顯示到液晶屏上。同時,手動設(shè)置溫濕度的上下限值,當實時溫濕度超出閾值時,對應(yīng)的工作指示燈亮,蜂鳴器報警。
2.? 主要功能
a.通過LCD1602顯示當前溫濕度值,溫度測量范圍:0-99攝氏度。
b.通過獨立按鍵設(shè)置溫濕度上下限值,按加減鍵就可以修改對應(yīng)值。
c.當溫濕度低于下限或高于上限時,蜂鳴器和LED燈同時報警。
3.? 源程序(Keil5)
本設(shè)計采用keil5 C51軟件(內(nèi)附安裝包)實現(xiàn)程序設(shè)計。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。
#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;//設(shè)置鍵
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 = 20,th = 30,hl = 30,hh = 60;//溫濕度上下限初始值
unsigned char setn = 0;//設(shè)置標志
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)//設(shè)置鍵按下
{
delay_ms(10);
if(key1 == 0)
{
beep = 0;
delay_ms(100);
beep = 1;
while(key1 == 0);//等待按鍵松開
setn++;
if(setn > 4)//按下次數(shù)超過4次,退出設(shè)置
{
setn = 0;
lcd_write_com(0x0c);//關(guān)閉光標
lcd_write_str(0,0,"Tem: C Hum: %");
lcd_write_str(0,1," ");
}
if(setn == 1)//設(shè)置溫度下限
{
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);
}
}
}
4.? 仿真proteus8.6
? 本設(shè)計采用proteus8.6軟件(內(nèi)附安裝包)實現(xiàn)仿真設(shè)計,如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導(dǎo)出的,所以請盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
當前溫濕度:
設(shè)置溫濕度上下限:
當溫度高于上限時,蜂鳴器和LED燈報警:
當溫度低于下限時,蜂鳴器和LED燈報警:
當濕度高于上限時,蜂鳴器和LED燈報警:
當濕度低于下限時,蜂鳴器和LED燈報警:
5.? 設(shè)計報告
設(shè)計報告主要包括硬件電路、軟件設(shè)計、仿真調(diào)試等等,僅供參考。
6.? 資料清單
設(shè)計資料主要包括C程序+仿真+設(shè)計報告+使用說明+元件清單+操作視頻等。
百度網(wǎng)盤下載鏈接:【F01】百度網(wǎng)盤下載鏈接
更多單片機仿真設(shè)計合集:單片機仿真設(shè)計合集