畢業設計(論文)-基于單片機節水澆灌系統論文_第1頁
畢業設計(論文)-基于單片機節水澆灌系統論文_第2頁
畢業設計(論文)-基于單片機節水澆灌系統論文_第3頁
畢業設計(論文)-基于單片機節水澆灌系統論文_第4頁
畢業設計(論文)-基于單片機節水澆灌系統論文_第5頁
已閱讀5頁,還剩26頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

④轉換速率指能夠重復進行數據轉換的速疫,即每秒轉換的次數。3.4顯示器件選取顯示部分選用1602液晶顯示共十六引腳,1602液晶模塊內部的字符發生存儲器(CGROM)已經存儲了160個不同的點陣字符圖形,如表1所示,這些字符有:阿拉伯數字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母“A”。藍底白字標準型16X2液晶顯示字符模塊(背光/藍屏)1602采用標準的16腳接口,其中:第1腳:VSS為地電源第2腳:VDD接5V正電源第3腳:V0為液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度第4腳:RS為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和RW共同為低電平時可以寫入指令或者顯示地址,當RS為低電平RW為高電平時可以讀忙信號,當RS為高電平RW為低電平時可以寫入數據。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令。第7~14腳:D0~D7為8位雙向數據線。第15腳:背光電源正極第16腳:背光電源負極3.5開關與報警選取開關部分選用四相步進電機采用電機正反轉來控制閥門。報警器選用蜂鳴器。4.軟件語言的選取本系統下位機以單片機為核心,采用C語言編程。C語言是書寫程序的一種軟件語言,它是計算機軟件設計的重要工具。在系統軟件開發、實時控制的和實時處理領域中有著不可替代的地位。用C語言編程使編程簡潔易懂,進而進行高質量的設計,而且它不獨立于具體機器,是一種非常通用的高級程序設計語言,采用C語言編程,因此,在已經有眾多高級語言和可視化集成開發環境工具的今天,C語言有著重要的有效的程序設計語言地位。5.模糊控制過程開始采樣計算分析取合適值判斷是否需要澆水不需要澆水澆水步進電機開關打開結束 模糊控制流程圖6.單片機的主要系統電路6.1時鐘電路單片機的時鐘信號用來提供單片機片內各種微操作的時間基準,時鐘信號通常用兩種電路形式得到:內部振蕩和外部振蕩。MCS-51單片機內部有一個用于構成振蕩器的高增益反向放大器,引腳XTALl和XTAL2分別是此放大電器的輸入端和輸出端,由于采用內部方式時,電路簡單,所得的時鐘信號比較穩定,實際使用中常采用這種方式,如圖所示在其外接晶體振蕩器(簡稱晶振)或陶瓷諧振器就構成了內部振蕩方式,片內高增益反向放大器與作為反饋元件的片外石英晶體或陶瓷諧振器一起可構成一個自激振蕩器并產生振蕩時鐘脈沖。圖中外接晶體以及電容C2和C3構成并聯諧振電路,它們起穩定振蕩頻率、快速起振的作用,其值均為30PF左右,晶振頻率選12MHz。 30PF STC89C52RC STC89C52RC XTAL2 VCCGND 12M 10UF RESET GND 30PF XTAL1 1KΩ 時鐘電路復位電路6.2復位電路為了初始化單片機內部的某些特殊功能寄存器,必須采用復位的方式,復位后可使CPU及系統各部件處于確定的初始狀態,并從初始狀態開始正常工作。單片機的復位是靠外電路來實現的,在正常運行情況下,只要RST引腳上出現兩個機器周期時間以上的高電平,即可引起系統復位。但如果RST引腳上持續為高電平,單片機就處于循環復位狀態。復位后系統將輸入/輸出(I/O)端口寄存器置為FFH,堆棧指針SP置為07H,SBUF內置為不定值,其余的寄存器全部清0,內部RAM的狀態不受復位的影響,在系統上電時RAM的內容是不定的。復位操作有兩種情況,即上電復位和手動(開關)復位。本系統采用上電復位方式。6.3數據采集處理電路ADC0809是一種8位逐次逼近AD轉換器,內部具有鎖存控制的8路模擬開關,外接8路模擬輸入端,可同時對8路O一5V的輸入模擬電壓信號分時進行采集轉換,本系統只用到IN0輸入通道。ADC0809轉換器的分辨率為8位,最大不可調誤差小于±1LSB,采用單一+5V供電,功耗為15mW,不必進行零點和滿度調整。由于ADC0809轉換器的輸出數據寄存器具有可控的三態輸出功能,輸出具有三態鎖存緩沖器,故其8位數據輸出引腳可直接與數據總線相連。AD轉換器需外部控制啟動轉換信號方能進行轉換,這一啟動轉換信號可由CPU提供,不同型號的A/D轉換器,對啟動轉換信號的要求也不同,分脈沖啟動和電平啟動兩種,ADC0809采用脈沖啟動轉換,只需給A/D轉換器的啟動控制轉換的輸入引腳(START)上,加入正脈沖信號,即啟動A/D轉換器進行轉換,轉換開始后,轉換結束信號輸出端(EOC)信號變低,轉換結束時,EOC返回高電平,以通知主機讀取轉換結果的數字量,這個信號可以作為A/D轉換器的狀態信號供查詢,也可以用作中斷請求信號。本系統中ADC0809與AT89C51單片機的接口如圖4.5所示,采用等待延時方ADC0809的時鐘頻率范圍要求在10一1280kHz,采用定時器給其脈沖頻率。如圖連接方式,ADC0809的8位數據輸出引腳可直接與數據總線相連,地址譯碼引腳A、B、C分別接地,以選通IN0通道。AT89C51的P:。作為片選信號,在啟動AID轉換時,由單片機的寫信號WR和P:。控制ADC的地址鎖存和轉換啟動。由于ALE與START連在一起,因此ADC0809在鎖存通道地址的同時也啟動轉換,在讀取轉換結果時,用單片機的讀信號RD和P,。引腳一級或菲門產生的正脈沖作為OE信號,用以打開三態輸出鎖存器。6.4LCD液晶顯示該系統采用1602液晶顯示,數據口接單片機P0口,和AD0809公用數據口,LCD顯示簡單,電路接線也簡單,價格也便宜。6.4報警系統為了在某些緊急狀態或反常狀態下,能使操作人員不致忽視,以便及時處理,往往需要有某種更能引起人們注意提起警覺的報警信號產生,這種報警信號通常有三種類型:閃光報警、鳴音報警、語音報警,本系統采用簡單易行的光報警電路。報警設備選用壓電式蜂鳴器,它約需要10mA的驅動電流,只需在其兩條引線上加3一15v的直流電壓,即可產生3KHz左右的蜂鳴聲音,圖中蜂鳴器的一端接在高電平+5V,另一端接P1.7,在初態P1.7始終輸出高電平1,當需要報警時,程序對其端口清零即可,聲音的長短可用延時程序控制實現。6.5電機控制電機使用四相八拍步進電機,電機驅動使用UL2003A芯片,使用步進電機做開關。6.6電路原理圖如下7.電路板的印刷與制作電路板制作是先使用protel99做好印刷電路,在打印,印刷,腐蝕,最后焊接。電路PCB圖如下:8.軟件設計部分系統軟件程序設計主要包括:主程序設計.采樣子程序設計。數據處理程序LCD顯示子程序,電機控制,蜂鳴器報警。8.1頭文件#ifndef__yyyy_H__#define__yyyy_H__#include<reg52.h>#include<intrins.h>sbitSTART=P1^0;sbitEOC=P1^1;sbitOE=P1^2;sbitCLOCK=P1^3;sbitRS=P1^4;sbitRW=P1^5;sbitLCD_1602=P1^6;sbitBUZZ=P1^7;sbitDATA7=P0^7;sbitMA=P2^0;sbitMB=P2^1;sbitMC=P2^2;sbitMD=P2^3;typedefunsignedcharuint8;typedefunsignedintuint16;typedefunsignedlongintuint32;voiddelay_1(uint16j);voidbuzz_1(uint8dat,uint16j);voidmotor_1(void);voidread_status_1(void);voidcommand_1(uint8data_1);voiddata_1(uint8data_1);voidLCD_Initialize_1(void);voidwrite_space_1(uint8i);voiddisplay_1(floatdat);voidInitialize_2(void);floatADC0809_1(void);voiddisplay_2(void);floatdata_Correction(void);voidmotor_2(uint8dat);#endif8.2主程序與子程序部分#include"節水澆灌系統.h"/*==================== 延時部分====================*/voiddelay_1(uint16j)//延時函數{ while(j--);}/*====================== 數據采集轉處理部分======================*/voidInitialize_2(void)//定時器初始化函數{ TMOD=0X01; TH0=0xff; TL0=0XFE; EA=1; ET0=1; TR0=1;}floatADC0809_1(void)//AD0809轉換函數{ floatdat; START=0; _nop_(); START=1; _nop_(); _nop_(); START=0; P0=0XFF; while(!EOC);//檢測數據是否轉換結束 _nop_(); OE=1; dat=P0; _nop_(); OE=0; dat*=5.0/255; returndat;}voidinterrupt_1(void)interrupt1//AD0809提供工作頻率{ TH0=0xff; TL0=0XFE; CLOCK=~CLOCK;} floatdata_Correction(void)//計算比較精確的值 { uint8i=10,j=10; floatdat=0,dat_1[]={0,0,0,0,0,0,0,0,0,0}; while(i--)dat_1[i]=ADC0809_1(); while(j--)for(i=j;i<9&&i>=0;i--)//數值排序 { if(dat_1[j]<dat_1[i]) { dat=dat_1[j]; dat_1[j]=dat_1[i]; dat_1[i]=dat; } } dat=0; for(i=1;i<9;i++) dat+=dat_1[i]; dat/=8; dat/=135; dat*=1000; dat-=6; if(dat<0)dat=0; dat*=24/16; dat-=4; display_1(dat); returndat;}/*================== 液晶顯示部分====================*/voidread_status_1(void)//檢測忙信號函數{ P0=0XFF; RS=0; RW=1; do { LCD_1602=0; LCD_1602=1; } while(DATA7); LCD_1602=0;}voidcommand_1(uint8data_1)//寫命令函數{ read_status_1();//檢測忙信號 RS=0; RW=0; P0=data_1; LCD_1602=1; LCD_1602=0;}voiddata_1(uint8data_1)//寫數據函數{ read_status_1();//檢測忙信號 RS=1; RW=0; P0=data_1; LCD_1602=1; LCD_1602=0;}voidLCD_Initialize_1(void)//液晶初始化函數{ command_1(0x38); command_1(0x01); command_1(0x0c);}voidwrite_space_1(uint8i)//顯示位清除函數{ while(i--)data_1('\');}voiddisplay_1(floatdat)//數據顯示函數{ uint16h,i,j,k,l,m,fu=0,t=8; if(dat<0){dat=-dat;fu=1;} h=(uint16)dat; m=(uint16)(dat*100-h*100); i=h/100;//取百位 j=h/10%10;//取十位 h%=10;//取個位 k=m/10; l=m%10; command_1(0xcf); command_1(0x04); if(l>0) {data_1('\%');data_1(l+'0');data_1(k+'0');data_1('.');data_1(h+'0');t-=5;} elseif(k>0){data_1('\%');data_1(k+'0');data_1('.');data_1(h+'0');t-=4;} else{data_1('%');data_1(h+'0');t-=2;} if(i||j){data_1(j+'0');t--;if(i){data_1(i+'0');t--;}} if(fu){data_1('-');t--;} write_space_1(t);}voiddisplay_2(void)//顯示irrigation函數{ uint8a[]={"irrigation"},*p; command_1(0x06); command_1(0x80); p=a; while(*p!='\0') { data_1(*p); p++; delay_1(30000);//流水顯示 }}/*======================== 蜂鳴器報警部分========================*/voidbuzz_1(uint8dat,uint16j)//報警函數{ uint8i=100; BUZZ=1; if(dat<8&&dat>=0)//判斷是否報警 {while(j--) { while(i--)BUZZ=0;i=50; while(i--)BUZZ=1;i=1000; } BUZZ=1; }}/*============================= 電機部分=============================*/voidmotor_1()//步進電機函數{ chari,dat; uint8a[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; uint16j=300; while(j--)for(i=7;i>=0;i--)//電機正轉 { P2=a[i]; delay_1(100);//延時 } j=50; P2=0; do { delay_1(2000);//延時 dat=data_Correction();//數據顯示; }while(!(dat-15>=0)); j=300; while(j--)for(i=0;i<8;i++)//電機反轉 { P2=a[i]; delay_1(100);//延時 } P2=0;}voidmotor_2(uint8dat)//判斷是否澆灌{ uint8i=600; if((dat<8)&&(dat>=0))//判斷是否需要澆水 { motor_1();//電機工作}}/*==================== 主函數====================*/voidmain(void){ floatdat; BUZZ=1; OE=0; P2=0; LCD_Initialize_1();//液晶初始化 display_2();//液晶顯示界面 Initialize_2();//定時器初始化 while(1) { delay_1(2000);//延時 dat=data_Correction();//數據顯示; buzz_1(dat,80);//判斷是否報警 motor_2(dat);//判斷是否澆灌 }}結論本系統根據目前節水灌溉技術的發展趨勢和國內實際的應用特點和要求,采用了自動化的結構形式,實現對土壤濕度的自動檢測和控制。系統以單片機STC89C52為核心部件,機單片機系統完成對土壤濕度信號的采集、處理、顯示以及對執行機構的控制等功能;用Protel軟件繪制電路原理圖和PCB電路印刷板圖,并在電路板廠制作控制主板;利用C語言編制運行程序,該系統的主要特點是:適用性強,用戶只需對參數進行設置并啟動系統正常運行便可滿足不同作物對土壤濕度的要

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論