• 方案介紹
    • 1.? 簡(jiǎn)介
    • 2.? 主要功能
    • 3.? 源程序(Keil5)
    • 4.? 仿真proteus8.6
    • 5.? 設(shè)計(jì)報(bào)告
    • 6.? 資料清單
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

基于51單片機(jī)的12864溫濕度檢測(cè)報(bào)警系統(tǒng)(二)!!!

04/09 09:27
1038
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf

共1個(gè)文件

資料清單:C程序+仿真+設(shè)計(jì)報(bào)告+使用說明+元件清單+操作視頻

仿真版本:Proteus8.6及以上版本

程序編譯:Keil5 C51

編程語言:C語言

設(shè)計(jì)編號(hào):【F03】

1.? 簡(jiǎn)介

? 本文提出了一種基于51單片機(jī)的LCD12864溫濕度報(bào)警系統(tǒng)。該設(shè)計(jì)使用ATC89C51單片機(jī)、DHT11傳感器模塊、LCD12864液晶顯示屏模塊以及報(bào)警模塊,簡(jiǎn)單明了的實(shí)現(xiàn)可提要求。DHT11數(shù)字溫濕度傳感器把采集到的溫濕度數(shù)據(jù)傳給單片機(jī),經(jīng)過單片機(jī)的處理,準(zhǔn)確的顯示到液晶屏上。同時(shí),手動(dòng)設(shè)置溫濕度的上下限值,當(dāng)實(shí)時(shí)溫濕度超出上下限值時(shí),對(duì)應(yīng)的風(fēng)扇/水泵啟動(dòng),蜂鳴器報(bào)警。

2.? 主要功能

a.通過LCD12864顯示當(dāng)前溫濕度值及報(bào)警閾值,溫度測(cè)量范圍:0-99攝氏度。

b.通過獨(dú)立按鍵設(shè)置溫濕度報(bào)警上下限值。

c.當(dāng)溫濕度超過上下限值時(shí),對(duì)應(yīng)的風(fēng)扇/水泵啟動(dòng),蜂鳴器報(bào)警。

3.? 源程序(Keil5)

本設(shè)計(jì)采用keil5 C51軟件(內(nèi)附安裝包)實(shí)現(xiàn)程序設(shè)計(jì)。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。

unsigned char i;//臨時(shí)變量
unsigned char cnt_100ms=0;//計(jì)時(shí)變量100ms
unsigned char time_100ms_flag=0;//100ms到標(biāo)志變量
unsigned char tim_500ms_flg=0;//倒計(jì)時(shí)標(biāo)志500ms一次
unsigned char cnt_500ms=0;//計(jì)時(shí)變量500ms
sbit beep = P1^0;//蜂鳴器IO

sbit LedTL_P   = P1^3;			// 溫度過低報(bào)警指示燈
sbit LedTH_P   = P1^4;			// 溫度過高報(bào)警指示燈
sbit LedHL_P   = P1^5;			// 濕度過低報(bào)警指示燈
sbit LedHH_P   = P1^6;			// 濕度過高報(bào)警指示燈

/*******************************************************************************
* 函 數(shù) 名         : delay_ms
* 函數(shù)功能		   : 延時(shí)函數(shù),延時(shí)1ms
* 輸    入         : cnt
* 輸    出         : 無
* 說    名         : 該函數(shù)是在12MHZ晶振下,12分頻單片機(jī)的延時(shí)。
*******************************************************************************/
void delay_ms(unsigned int cnt)   //
{
	unsigned int x;
	for( ; cnt>0; cnt--)
	{
		for(x=110; x>0; x--);//軟件延時(shí)為1MS
	}
}
void delay_us(unsigned int cnt)//延時(shí)函數(shù)1US
{
	while(cnt--);
}

/******************************************************
** 函數(shù)名:time_init
** 描述  :定時(shí)器初始化
** 輸入  :無
** 輸出  :無
******************************************************/
void time_init(void)
{
	  TMOD |= 0x01;//time0 工作方式為1
	  TH0 = 0xf8;//裝載初值
	  TL0 = 0x2f;//裝載初值,為2ms(65535-63535)
      TR0 = 1;//開啟定時(shí)器
	  ET0 = 1;//打開中斷
	  EA=1;//開總中斷
}
/******************************************************
** 函數(shù)名:key_scan
** 描述  :按鍵掃描
** 輸入  :無
** 輸出  :無
******************************************************/
void key_scan(void)
{
	static unsigned char key_in_flag = 0;//按鍵按下標(biāo)志
	unsigned char key_l;//存儲(chǔ)掃描到行列值。
	key_value = 20;//按鍵值清除
	if((P3 & 0x0f) != 0x0f)//按鍵按下
	{
		delay_ms(1);//按鍵消抖動(dòng)
		if(((P3 & 0x0f) != 0x0f) && (key_in_flag == 1))
		{
			key_in_flag = 0;//松手檢測(cè)防止一直觸發(fā)
			P3 = 0x0f;
            //delay_ms(1);//按鍵消抖動(dòng)
			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;//(按鍵松開標(biāo)志)
	}

}

/*******************************************************************************
* 函 數(shù) 名         : LCDSel
* 函數(shù)功能		   : 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;
  }
}
/*******************************************************************************
* 函 數(shù) 名         : WriteCmd
* 函數(shù)功能		   : LCD寫命令
* 輸    入         : u8_Cmd
* 輸    出         : 無
********************************************************************************/
void write_cmd(unsigned char cmd)   //寫命令
{
   delay_us(1);//延時(shí)
   RS=0;
   EN=0;
   RW=0;
   DATPORT=cmd;//送數(shù)據(jù)
   EN=1;
   EN=0;
}
/*******************************************************************************
* 函 數(shù) 名         : WriteDat
* 函數(shù)功能		   : LCD寫數(shù)據(jù)
* 輸    入         : u8_Dat
* 輸    出         : 無
********************************************************************************/
void write_dat(unsigned char dat)   //寫數(shù)據(jù)
{
   delay_us(1);//延時(shí)
   RS=1;
   EN=0;
   RW=0;
   DATPORT=dat;//送數(shù)據(jù)
   EN=1;
   EN=0;
}
/*******************************************************************************
* 函 數(shù) 名         : ClearLcd
* 函數(shù)功能		   : LCD清屏
* 輸    入         : 無
* 輸    出         : 無
********************************************************************************/
void clear_lcd(void)          //清屏
{
  unsigned char i,j;
  lcd_scr_sel(All);//左右兩屏同時(shí)清理
  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

? 本設(shè)計(jì)采用proteus8.6軟件(內(nèi)附安裝包)實(shí)現(xiàn)仿真設(shè)計(jì),如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導(dǎo)出的,所以請(qǐng)盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。

當(dāng)前溫濕度:

當(dāng)溫度高于閾值時(shí),風(fēng)扇啟動(dòng)開始散熱:

當(dāng)溫度低于閾值時(shí),電熱絲開始加熱:

當(dāng)濕度高于閾值時(shí),水泵關(guān)閉,蜂鳴器報(bào)警:

當(dāng)濕度低于閾值時(shí),水泵開始工作:

5.? 設(shè)計(jì)報(bào)告

設(shè)計(jì)報(bào)告主要包括硬件電路、軟件設(shè)計(jì)、仿真調(diào)試等等,僅供參考。

6.? 資料清單

設(shè)計(jì)資料主要包括C程序+仿真+設(shè)計(jì)報(bào)告+使用說明+元件清單+操作視頻等。

百度網(wǎng)盤下載鏈接:【F03】百度網(wǎng)盤下載鏈接

更多單片機(jī)仿真設(shè)計(jì)合集:單片機(jī)仿真設(shè)計(jì)合集

  • 單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf
    下載

相關(guān)推薦