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