仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語言:C語言
設計編號:【F03】
1.? 簡介
? 本文提出了一種基于51單片機的LCD12864溫濕度報警系統(tǒng)。該設計使用ATC89C51單片機、DHT11傳感器模塊、LCD12864液晶顯示屏模塊以及報警模塊,簡單明了的實現可提要求。DHT11數字溫濕度傳感器把采集到的溫濕度數據傳給單片機,經過單片機的處理,準確的顯示到液晶屏上。同時,手動設置溫濕度的上下限值,當實時溫濕度超出上下限值時,對應的風扇/水泵啟動,蜂鳴器報警。
2.? 主要功能
a.通過LCD12864顯示當前溫濕度值及報警閾值,溫度測量范圍:0-99攝氏度。
b.通過獨立按鍵設置溫濕度報警上下限值。
c.當溫濕度超過上下限值時,對應的風扇/水泵啟動,蜂鳴器報警。
3.? 源程序(Keil5)
本設計采用keil5 C51軟件(內附安裝包)實現程序設計。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。
unsigned char i;//臨時變量
unsigned char cnt_100ms=0;//計時變量100ms
unsigned char time_100ms_flag=0;//100ms到標志變量
unsigned char tim_500ms_flg=0;//倒計時標志500ms一次
unsigned char cnt_500ms=0;//計時變量500ms
sbit beep = P1^0;//蜂鳴器IO
sbit LedTL_P = P1^3; // 溫度過低報警指示燈
sbit LedTH_P = P1^4; // 溫度過高報警指示燈
sbit LedHL_P = P1^5; // 濕度過低報警指示燈
sbit LedHH_P = P1^6; // 濕度過高報警指示燈
/*******************************************************************************
* 函 數 名 : delay_ms
* 函數功能 : 延時函數,延時1ms
* 輸 入 : cnt
* 輸 出 : 無
* 說 名 : 該函數是在12MHZ晶振下,12分頻單片機的延時。
*******************************************************************************/
void delay_ms(unsigned int cnt) //
{
unsigned int x;
for( ; cnt>0; cnt--)
{
for(x=110; x>0; x--);//軟件延時為1MS
}
}
void delay_us(unsigned int cnt)//延時函數1US
{
while(cnt--);
}
/******************************************************
** 函數名:time_init
** 描述 :定時器初始化
** 輸入 :無
** 輸出 :無
******************************************************/
void time_init(void)
{
TMOD |= 0x01;//time0 工作方式為1
TH0 = 0xf8;//裝載初值
TL0 = 0x2f;//裝載初值,為2ms(65535-63535)
TR0 = 1;//開啟定時器
ET0 = 1;//打開中斷
EA=1;//開總中斷
}
/******************************************************
** 函數名:key_scan
** 描述 :按鍵掃描
** 輸入 :無
** 輸出 :無
******************************************************/
void key_scan(void)
{
static unsigned char key_in_flag = 0;//按鍵按下標志
unsigned char key_l;//存儲掃描到行列值。
key_value = 20;//按鍵值清除
if((P3 & 0x0f) != 0x0f)//按鍵按下
{
delay_ms(1);//按鍵消抖動
if(((P3 & 0x0f) != 0x0f) && (key_in_flag == 1))
{
key_in_flag = 0;//松手檢測防止一直觸發(fā)
P3 = 0x0f;
//delay_ms(1);//按鍵消抖動
key_l = P3;//掃描得到按鍵值
switch(key_l)
{
//獲取按鍵值
case 0x0e:
{
key_value = 1;//按鍵賦值
}
break;
case 0x0d:
{
key_value = 2;//按鍵賦值
}
break;
case 0x0b:
{
key_value = 3;//按鍵賦值
}
break;
}
}
}
else
{
key_in_flag = 1;//(按鍵松開標志)
}
}
/*******************************************************************************
* 函 數 名 : LCDSel
* 函數功能 : LCD左右半屏選擇
* 輸 入 : u8_Sel
* 輸 出 : 無
********************************************************************************/
void lcd_scr_sel(unsigned char sel) //LCD左右半屏選擇
{
switch (sel)
{
case 0x00://全屏
CS1=0;CS2=0;
break;
case 0x01: //左半屏
CS1=0;CS2=1;
break;
case 0x02://右半屏
CS1=1;CS2=0;
break;
default:
break;
}
}
/*******************************************************************************
* 函 數 名 : WriteCmd
* 函數功能 : LCD寫命令
* 輸 入 : u8_Cmd
* 輸 出 : 無
********************************************************************************/
void write_cmd(unsigned char cmd) //寫命令
{
delay_us(1);//延時
RS=0;
EN=0;
RW=0;
DATPORT=cmd;//送數據
EN=1;
EN=0;
}
/*******************************************************************************
* 函 數 名 : WriteDat
* 函數功能 : LCD寫數據
* 輸 入 : u8_Dat
* 輸 出 : 無
********************************************************************************/
void write_dat(unsigned char dat) //寫數據
{
delay_us(1);//延時
RS=1;
EN=0;
RW=0;
DATPORT=dat;//送數據
EN=1;
EN=0;
}
/*******************************************************************************
* 函 數 名 : ClearLcd
* 函數功能 : LCD清屏
* 輸 入 : 無
* 輸 出 : 無
********************************************************************************/
void clear_lcd(void) //清屏
{
unsigned char i,j;
lcd_scr_sel(All);//左右兩屏同時清理
write_cmd(STALINE);
for(i=0;i<8;i++)
{
write_cmd(LCDON);
write_cmd(PAGE+i);//從第0頁即屏幕最上面開始清除
write_cmd(YCONT);//從第0列即屏幕最左邊開始清除
for(j=0;j<64;j++)
{
write_dat(0x00);
}
}
}
4.? 仿真proteus8.6
? 本設計采用proteus8.6軟件(內附安裝包)實現仿真設計,如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導出的,所以請盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
當前溫濕度:
當溫度高于閾值時,風扇啟動開始散熱:
當溫度低于閾值時,電熱絲開始加熱:
當濕度高于閾值時,水泵關閉,蜂鳴器報警:
當濕度低于閾值時,水泵開始工作:
5.? 設計報告
設計報告主要包括硬件電路、軟件設計、仿真調試等等,僅供參考。
6.? 資料清單
設計資料主要包括C程序+仿真+設計報告+使用說明+元件清單+操作視頻等。
百度網盤下載鏈接:【F03】百度網盤下載鏈接
更多單片機仿真設計合集:單片機仿真設計合集