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

基于51單片機(jī)的智能澆花系統(tǒng)設(shè)計(jì)!!!

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

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

共1個(gè)文件

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

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

程序編譯:Keil5 C51

編程語(yǔ)言:C語(yǔ)言

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

1.? 簡(jiǎn)介

? 本文提出了一種基于51單片機(jī)的智能澆花系統(tǒng)設(shè)計(jì)。該設(shè)計(jì)以AT89C51單片機(jī)和ADC0832組成系統(tǒng)的核心部分,濕度傳感器將采集到的數(shù)據(jù)直接傳送到ADC0832的IN端作為輸入的模擬信號(hào)。單片機(jī)需要采集數(shù)據(jù)時(shí),發(fā)出指令啟動(dòng)A/D轉(zhuǎn)換器工作,ADC0832根據(jù)送來(lái)的地址信號(hào)選通IN1通道,然后對(duì)輸入的模擬信號(hào)進(jìn)行轉(zhuǎn)換,最后,單片機(jī)把采集到的濕度數(shù)據(jù)經(jīng)過(guò)軟件程序處理后送到LCD1602進(jìn)行顯示。智能澆水部分是通過(guò)單片機(jī)程序設(shè)計(jì)澆水的上下限值與感應(yīng)電路送入單片機(jī)的土壤濕度值相比較,當(dāng)?shù)陀谙孪拗禃r(shí),單片機(jī)輸出一個(gè)信號(hào)控制澆水,高于上限值時(shí)再由單片機(jī)輸出一個(gè)信號(hào)控制停止?jié)菜?/span>

2.? 主要功能

a.通過(guò)LCD1602顯示當(dāng)前溫濕度信息。

b.通過(guò)按鍵對(duì)溫濕度的上下限值進(jìn)行設(shè)置。

c.通過(guò)DS18B20溫度傳感器提供溫度信息,滑動(dòng)變阻器模擬濕度信息。

d.當(dāng)溫度高于上限值或濕度低于下限值時(shí),蜂鳴器報(bào)警,電機(jī)轉(zhuǎn)動(dòng),啟動(dòng)澆水。

3.? 源程序(Keil5)

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

#include <reg52.h>	         //調(diào)用單片機(jī)頭文件
#define uchar unsigned char  //無(wú)符號(hào)字符型 宏定義	變量范圍0~255
#define uint  unsigned int	 //無(wú)符號(hào)整型 宏定義	變量范圍0~65535

sbit SCL=P1^4;		//SCL定義為P1口的第3位腳,連接ADC0832SCL腳
sbit DO=P1^5;		//DO定義為P1口的第4位腳,連接ADC0832DO腳
sbit CS=P1^3;		//CS定義為P1口的第4位腳,連接ADC0832CS腳

sbit beep = P3^3;   //蜂鳴器IO口定義

sbit dq   = P1^7;	//18b20 IO口的定義

uint temperature ;  //溫度的變量
uchar shidu;     //濕度等級(jí)
uchar s_high = 70,s_low = 25;	//濕度報(bào)警參數(shù)

uint t_high = 50,t_low = 10;	//溫度報(bào)警參數(shù)
uchar flag_en = 1,flag_sd,flag_wd;

bit sd_sd;	//手動(dòng)模式 的變量

sbit dianji = P1^6;     //電機(jī)IO定義

uint flag_250ms ;
uchar key_can;		 //按鍵值的變量
uchar menu_1;        //菜單設(shè)計(jì)的變量

//這三個(gè)引腳參考資料
sbit rs=P1^0;	 //1602數(shù)據(jù)/命令選擇引腳 H:數(shù)據(jù)      	L:命令
sbit rw=P1^1;	 //1602讀寫(xiě)引腳	         H:數(shù)據(jù)寄存器  	L:指令寄存器
sbit e =P1^2;	 //1602使能引腳          下降沿觸發(fā)

/********************************************************************
* 名稱 : delay_uint()
* 功能 : 小延時(shí)。
* 輸入 : 無(wú)
* 輸出 : 無(wú)
***********************************************************************/
void delay_uint(uint q)
{
	while(q--);
}

/********************************************************************
* 名稱 : write_com(uchar com)
* 功能 : 1602命令函數(shù)
* 輸入 : 輸入的命令值
* 輸出 : 無(wú)
***********************************************************************/
void write_com(uchar com)
{
	e=0;
	rs=0;
	rw=0;
	P0=com;
	delay_uint(3);
	e=1;
	delay_uint(25);
	e=0;
}

/********************************************************************
* 名稱 : write_data(uchar dat)
* 功能 : 1602寫(xiě)數(shù)據(jù)函數(shù)
* 輸入 : 需要寫(xiě)入1602的數(shù)據(jù)
* 輸出 : 無(wú)
***********************************************************************/
void write_data(uchar dat)
{
	e=0;
	rs=1;
	rw=0;
	P0=dat;
	delay_uint(3);
	e=1;
	delay_uint(25);
	e=0;	
}

/********************************************************************
* 名稱 : write_sfm2(uchar hang,uchar add,uchar date)
* 功能 : 顯示2位十進(jìn)制數(shù),如果要讓第一行,第五個(gè)字符開(kāi)始顯示"23" ,調(diào)用該函數(shù)如下
	 	 write_sfm1(1,5,23)
* 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
* 輸出 : 無(wú)
***********************************************************************/
void write_sfm2(uchar hang,uchar add,uint date)
{
	if(hang==1)   
		write_com(0x80+add);
	else
		write_com(0x80+0x40+add);
	write_data(0x30+date/10%10);
	write_data(0x30+date%10);	
}

/***********************lcd1602上顯示特定的字符************************/
void write_zifu(uchar hang,uchar add,uchar date)
{
	if(hang==1)   
		write_com(0x80+add);
	else
		write_com(0x80+0x40+add);
	write_data(date);	
}


/********************************************************************
* 名稱 : write_string(uchar hang,uchar add,uchar *p)
* 功能 : 改變液晶中某位的值,如果要讓第一行,第五個(gè)字符開(kāi)始顯示"ab cd ef" ,調(diào)用該函數(shù)如下
	 	 write_string(1,5,"ab cd ef;")
* 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
* 輸出 : 無(wú)
***********************************************************************/
void write_string(uchar hang,uchar add,uchar *p)
{
	if(hang==1)   
		write_com(0x80+add);
	else
		write_com(0x80+0x40+add);
		while(1)
		{
			if(*p == '