本畢業(yè)設(shè)計(jì)是設(shè)計(jì)一種51單片機(jī)控制的自動(dòng)澆水系統(tǒng),實(shí)現(xiàn)室內(nèi)盆花澆水的自動(dòng)化系統(tǒng)。該系統(tǒng)可對(duì)土壤的濕度進(jìn)行監(jiān)控,并對(duì)作物進(jìn)行適時(shí)適量的澆水。其核心是51單片機(jī)和土壤濕度檢測(cè)器YL-69和顯示電路以及澆水繼電器驅(qū)動(dòng)電路構(gòu)成的檢測(cè)控制部分。主要研究土壤濕度與澆水時(shí)間之間的關(guān)系、澆灌控制技術(shù)及設(shè)備系統(tǒng)的硬件、軟件編程各個(gè)部分。
檢測(cè)部分,單片機(jī)選用AT89C51單片機(jī),軟件選用C51語(yǔ)言編程。土壤濕度采集與顯示電路可將檢測(cè)到的土壤濕度模擬量放大轉(zhuǎn)換成數(shù)字量通過(guò)單片機(jī)內(nèi)程序控制精確的將溫度與濕度分別顯示在LED數(shù)碼管顯示屏上,通過(guò)單片機(jī)內(nèi)的中斷服務(wù)程序判斷是否要給盆花澆水,若需澆水,則單片機(jī)系統(tǒng)發(fā)出澆水信號(hào),開(kāi)始澆水,若不需要澆水,則進(jìn)行下一次循環(huán)檢測(cè)。
在澆水系統(tǒng)中也同時(shí)設(shè)計(jì)一個(gè)定時(shí)澆水部分,通過(guò)按鍵開(kāi)關(guān)設(shè)置不同的澆水時(shí)間段,在時(shí)間段以內(nèi)時(shí),單片機(jī)驅(qū)動(dòng)澆水系統(tǒng),開(kāi)始澆水,如不在時(shí)間段內(nèi),則不澆水。
/ADC0809
sbit ST=P3^3;
sbit EOC=P3^4;
sbit OE=P3^2;
//按鍵
sbit Key1=P3^5;
sbit Key2=P3^6;
sbit Key3=P3^7;
//顯示數(shù)組 0-9+F
uchar Data_[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x71,0x3f};
sbit Wei1 = P2^7;
sbit Wei2 = P2^6;
sbit Wei3 = P2^5;
sbit Wei4 = P2^4;
//函數(shù)聲明
extern uchar ADC0809();
void Display(uchar X,uchar Data);
void delay(uint t);
//酒精含量變量
uchar temp=0;
//蜂鳴器變量
uchar FF=125;
//顯示模式
uchar Mode=0;
uchar p;
void main()
{
while(1)
{
//正常模式
if(Mode==0)
{
//讀取AD值
temp=ADC0809();
for(p=0;p<30;p++)
Display(0,temp);
//判斷是否報(bào)警
if(temp>FF)
{
Feng=0;
}
else
{
Feng=1;
}
}
//調(diào)整模式
else
{
Display(1,FF);
}
//功能鍵
if(Key3==0)
{
Feng=0;
delay(100);
while(Key3==0)
{
if(Mode==0)
Display(0,temp);
else
Display(1,FF);
}
if(Mode==0)
Mode=1;
else
Mode=0;
Feng=1;
}
//增加
if(Key2==0&&Mode==1)
{
Feng=0;
delay(100);
while(Key2==0)
{
Display(1,FF);
}
FF++;
if(FF==251)
FF=250;
Feng=1;
}
//減少
if(Key1==0&&Mode==1)
{
Feng=0;
delay(100);
while(Key1==0)
{
Display(1,FF);
}
FF--;
if(FF==0xff)
FF=0;
Feng=1;
}
}
}
//ADC0809讀取信息
uchar ADC0809()
{
uchar temp_=0x00;
//初始化高阻太
OE=0;
//轉(zhuǎn)化初始化
ST=0;
//開(kāi)始轉(zhuǎn)換
ST=1;
ST=0;
//外部中斷等待AD轉(zhuǎn)換結(jié)束
while(EOC==0)
//讀取轉(zhuǎn)換的AD值
OE=1;
temp_=Data_ADC0809;
OE=0;
return temp_;
}
//延時(shí)
void delay(uint t)
{
uint i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++);
}
//顯示 X表示狀態(tài) Data表示數(shù)據(jù)
void Display(uchar X,uchar Data)
{
Wei1=1;
Wei2=1;
Wei3=1;
Wei4=1;
P0=0xff;
//正常模式
if(X==0)
{
P0=~Data_[11];
}
//非正常
else
資料借鑒于此紛傳