版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、常州信息職業(yè)技術學院智能電子產(chǎn)品綜合項目實踐設計報告2011 2012 學年 第 二 學期項目: 自動澆灌系統(tǒng)的設計與實現(xiàn) 班級: 計應102 學號: 1008143239姓名: 戴霞授課教師: 聶章龍制定日期: 2012 年 05 月 10 日目 錄第一章總體設計3第二章 硬件電路設計42.1 系統(tǒng)原理圖42.2 本章小結6第三章 軟件設計83.1主程序設計83.2 簡單單片機應用系統(tǒng)結構93.3 ds18b20數(shù)字溫度測量93.4語音報警模塊93.5 lcd液晶顯示部分軟件設計103.6 定時模塊設計103.7按鍵控制模塊103.8 運行環(huán)境113.9本章小結11第四章 系統(tǒng)測試124.1
2、硬件測試124.1.1 實驗板連接測試124.1.2 顯示模塊測試124.1.3 按鍵模塊測試124.1.4 報警模塊測試124.2軟件測試124.2.1 顯示模塊測試124.2.2 按鍵模塊測試124.2.3 報警模塊測試12第五章 結束語135.1總結135.1.1 問題135.1.2 心得13附錄14附錄1 程序代碼14附錄2 實物圖片24智能電子產(chǎn)品綜合項目實踐設計報告第一章 總體設計本文以51單片機p89v51rb2fn為主控芯片,然后利用dalas一線式溫度傳感器ds18b20來實現(xiàn)對周圍溫度環(huán)境的采集操作,單片機再根據(jù)采集的溫度值來控制電磁閥的開關及持續(xù)時間等等操作,從而實現(xiàn)在不
3、同的溫度對周圍澆灌對象實施間隔性的灌溉,澆灌持續(xù)的時間與不同的溫度范圍有關,同時相關的狀態(tài)信息要在點陣漢字液晶屏上實時顯示的澆灌系統(tǒng)。本系統(tǒng)以最低限度的用水量獲得最大的產(chǎn)量或收益,也就是最大限度地提高單位灌溉水量的農(nóng)作物產(chǎn)量和產(chǎn)值的灌溉措施,灌溉可有效保持土壤中水、肥、氣、熱等各相的良好狀態(tài),具有省水、省工、節(jié)能、節(jié)肥、增產(chǎn)增收等諸多優(yōu)點。系統(tǒng)總體結構圖如圖1-1所示。tg12864bi液晶屏顯示單片機電磁閥ds18b20溫度采集報警圖1-1 自動澆灌系統(tǒng)組合框圖 系統(tǒng)采用51單片機p89v51rb2fn為主控芯片,包括ds18b20溫度采集模塊、漢字液晶屏顯示狀態(tài)信息模塊、定時器模塊及主程序
4、模塊。系統(tǒng)的主要功能模塊如下: 系統(tǒng)模塊: 模塊功能:ds18b20溫度采集模塊:通過該溫度傳感器獲取當前的溫度值。漢字液晶屏顯示狀態(tài)信息模塊:根據(jù)溫度,在該屏上逐行顯示:溫度、水龍頭開關狀態(tài)、澆灌時間和次數(shù)等信息。定時器模塊:實現(xiàn)記錄不同溫度段的澆灌時間及澆灌間隔時間等信息主程序模塊:對相關模塊的初始化及相關模塊的控制流程。自動澆灌系統(tǒng)的設計 計算機軟件學院 計應102 戴霞 第 26 頁 第二章 硬件電路設計2.1 系統(tǒng)原理圖主要實現(xiàn)自動澆灌系統(tǒng)的溫度采集、狀態(tài)信息顯示、時間記錄和電磁閥開關控制等。(1)漢字液晶屏上實時顯示的信息有:1)第一行顯示:低溫:*.*,或常溫:*.*,或高溫:*
5、.* 。注:假設24以下為低溫,2530為常溫,30以上為高溫。2)第二行顯示:電磁閥狀態(tài):開,或關。3)第三行顯示:澆灌時間:*m*s,或*h*m。(2)澆灌時間及澆灌次數(shù)間隔要求:在低溫時,電磁閥始終關,澆灌時間為0分0秒;在常溫時,澆灌時間為30分鐘,澆灌次數(shù)間隔為8小時;在高溫時,澆灌時間為50分鐘,澆灌次數(shù)間隔為4小時。液晶模塊與單片同的連接采用模擬i/o方式。只要用程序控制i/o口線產(chǎn)生如圖2-1所示的時序信號。與總路線方式相比,對液晶屏初始化、充填液晶屏、顯示字符、顯示字符串函數(shù)完全相同。 圖2-1 模擬i/o口方式接口電路vccj4 4321vccdqgndhsoutr384.
6、7kvccvccq6r37vd9q5r33b1r39dsqspkr364.7kds1820圖2-2 蜂鳴器、溫度傳感器電路溫度傳感器ds18b20的數(shù)據(jù)線與單片機的p1.0相連。根據(jù)ds18b20的讀寫時序及操作指令,單片機測溫時,首先對其復位操作,然后發(fā)skip rom指令,再用convert t指令啟動傳感器開始溫度轉換。將溫度放入內(nèi)部暫存器,然后單片機重復操作一,開始讀溫度值。電磁閥里有密閉的腔,在不同位置開有通孔,每個孔都通向不同的油管,腔中間是閥,兩面是兩塊電磁鐵,哪面的磁鐵線圈通電閥體就會被吸引到哪邊,通過控制閥體的移動來擋住或漏出不同的排油的孔,而進油孔是常開的,液壓油就會進入不
7、同的排油管,然后通過油的壓力來推動油缸的活塞,活塞又帶動活塞桿,活塞桿帶動機械裝置動。這樣通過控制電磁鐵的電流通斷就控制了機械運動。圖2-3 電磁閥控制電路定時器/計數(shù)器概述在51系列單片機中有兩個16位的加法計數(shù)器,分別叫做t0和t1。它們在計數(shù)脈沖的作用下,其計數(shù)值不斷加1,在此過程中,計數(shù)器可能產(chǎn)生溢出(溢出是指計數(shù)器的計數(shù)值全為“1”時,在計數(shù)脈沖的作用下,全部歸0的動作),產(chǎn)生溢出后,可以向cpu發(fā)出中斷請求。計數(shù)脈沖可以來源于系統(tǒng)時鐘或外部電路(通過p3.4/t0、p3.5/t1引腳輸入)。如果計數(shù)脈沖來自系統(tǒng)時鐘,稱之為“定時器”,每個機器周期(一個機器周期由12個時鐘周期組成)
8、計數(shù)器加1;如果計數(shù)脈沖來自外部電路,稱之為“計數(shù)器”,此時單片機在每個機器周期對t0引腳進行檢測,如果在兩個連續(xù)的機器周期內(nèi),前一次檢測為高電平,而后一次檢測到了低電平,即在t0腳檢測到了一個下降沿,則計數(shù)器加1,因此計數(shù)脈沖的頻率不能高于振蕩頻率fosc的1/24。定時器的內(nèi)部結構如圖3-1所示:當控制開關c/=0時,多路開關選擇系統(tǒng)時鐘的12分頻作為計數(shù)源,c/=1,多路開關選擇來自t0腳的外部脈沖作為計數(shù)源,控制位控制著計數(shù)源的脈沖是否能夠送到加法計數(shù)器tl0、th0的輸入端,一旦計數(shù)器產(chǎn)生溢出,tf0變?yōu)?。系統(tǒng)時鐘12分頻t0引腳tl0 th0tf0控制位圖3-1 定時器內(nèi)部結構圖
9、c/=0c/=12.2 本章小結定時器/計數(shù)器的本質(zhì)是對脈沖的計數(shù),無論是定時還是計數(shù),當計數(shù)器溢出回零時,tfx自動置1,cpu可以通過查詢方式對其檢測(查詢后必須用軟件將tfx清0),也可以采用中斷方式,在ea1,etx=1時,一旦tfx置1,cpu會自動進入中斷,中斷后會自動清除tfx。設計串行通信程序時,如果是方式1和方式3,必須在初始化程序中對定時器/計數(shù)器t1進行設置以選擇波特率。對于發(fā)送程序應先發(fā)送,再檢測ti的狀態(tài),再發(fā)送?;蚨枷葘i的狀態(tài)用程序置1,在中斷服務程序中執(zhí)行發(fā)送操作;接收程序只有ri狀態(tài)有效后才能接收數(shù)據(jù)。無論是查詢方式還是中斷方式,發(fā)送或接收后都必須用程序將t
10、i或ri清0.數(shù)字溫度傳感器提供了一系列的操作指令,單片機通過這些指令控制傳感器實現(xiàn) 溫度的測量。首先對傳感器執(zhí)行初始化操作,然后發(fā)skip rom指令,接著用convert t指令啟動溫度轉換,轉換完成后,再次對傳感器執(zhí)行初始化操作,并跳過rom 識別,然后發(fā)讀暫存器指令read scrtchpad,再連續(xù)讀出兩個字節(jié)的溫度值。液晶模塊內(nèi)含標準字庫,可顯示兩行、每行16個點陣字符;單片機與液晶模塊的連接可選總線方式或模擬i/o口方式;單片機通過操作指令實現(xiàn) 對液晶模塊的編程控制;屏幕上的每個字符位置與內(nèi)部數(shù)據(jù)存儲器之間有著一一對應關系,要將字符顯示到屏幕指定位置,必須設置液晶模塊的數(shù)據(jù)存儲器
11、地址,然后將字符的ascii碼寫入液晶屏的數(shù)據(jù)端口。第三章 軟件設計3.1主程序設計yn電磁閥打開,開始澆灌,打開定時器開始計時,澆灌15秒進入常溫不澆灌,再間隔10秒if 24t30開始初始化獲取溫度和t判斷溫度值tif t30n電磁閥打開,開始澆灌,打開定時器開始計時,澆灌25秒進入高溫不澆灌,再間隔5秒yn圖3-1主程序流程圖void lcd_shi(uchar dat)void lcd_feng(ucahr dat)void lcd_miao(uchar dat)void disptime(void)void dispjiben(void)void timer0(void) inter
12、rupt 1int gettemp(uchar temp4)void whileswitch()cpu時鐘定時器/計數(shù)器i/o接口romram圖3-2 單片圖機的結構框3.2 簡單單片機應用系統(tǒng)結構單片機全稱單片微型計算機,就是將cpu、系統(tǒng)時鐘、ram、rom、定時器/計數(shù)器和多種i/o接口電路集成在一塊芯片上的微型計算機。典型的單片機結構圖如圖3-2所示。3.3 ds18b20數(shù)字溫度測量開始發(fā)ds18b20復位命令發(fā)跳過rom指令發(fā)啟動溫度轉換指令發(fā)ds18b20復位命令發(fā)跳過rom指令發(fā)讀暫存器指令讀取兩字節(jié)的溫度值將溫度值轉換為bcd碼送顯示緩存調(diào)用顯示程序3-2 溫度測量流程圖根據(jù)
13、ds18b20的讀/寫時序及操作指令,單片機測量溫度時,首先對ds18b20進行復位操作,由于總線上只有一只ds18b20,無需根據(jù)序列號來識別傳感器。單片機對其復位后可發(fā)skip rom指令,再用convert t指令啟動傳感器開始溫度轉換。轉換完成后,ds18b20已將當前溫度值放入了內(nèi)部的暫存器中,為了讀以溫度值,單片機仍需對傳感器進行復位操作,并跳過rom操作別,然后發(fā)讀暫存器指令read scrtchpad,接著連續(xù)讀出兩個字節(jié)的溫度值,將其轉換為十進制數(shù)在數(shù)碼管上顯示出來,相應的流程圖如圖3-2所示。int readt(void) uchar h,l;bit err;err=res
14、et( );wrbyte(0xcc);wrbyte(0xbe);l=rdbyte( );h=rdbyte( );return(h*256+l);3.4語音報警模塊void beep(void)uint i;for(i=0;i1000;i+)delay15(10); spk=spk;/蜂鳴器的值取反3.5 lcd液晶顯示部分軟件設計extern void lcd_dispini(void);extern void lcd_dispfill(uchar filldata);extern void lcd_dispchar(uchar cy,uchar cx,char dispdata);exter
15、n void lcd_dispstr(uchar cy,uchar cx,char*disp_str);extern void lcd_disphz(uchar cy,uchar cx,uchar dispdata);extern void lcd_disphzstr(uchar cy,uchar cx,uchar*disp_str);3.6 定時模塊設計在使用定時器/計數(shù)器時,首先應根據(jù)要求對工作方式進行初始化,然后計算出初始值。通常要向tmod寄存器寫入工作方式控制字,再將計數(shù)器的初值寫入th0、tl0。然后啟動定時器/計數(shù)器,將tr0置1,如果采用中斷優(yōu)雅,還應將et0、ea置1.voi
16、d inittimer0(void) tmod = 0x02; /定時器工作在方式2 th0 = -250;/定時時間為 250us tl0 = -250; ea = 1; /單片機中斷 et0 = 1; /允許t0中斷 tr0=1 ;3.7按鍵控制模塊鍵盤是計算機系統(tǒng)中不可缺少的輸入設備,矩陣式鍵盤也稱為行列式鍵盤,其結構如圖3-3所示。圖中有4根行線和4根列線,按鍵跨接在行線和列線上。4*4的行列結構可以構成16個按鍵的鍵盤,與獨立式鍵盤相比,按鍵數(shù)量相同時占用i/o口線少,因此適用于按鍵數(shù)量較多的場合。如圖3-3中4根行線接到p2.0p2.3,作為輸出口,4根列線接到p2.4p2.7,作
17、為輸入口,通常采用掃描法檢測鍵盤有無鍵按下,并檢測所按鍵(閉合鍵)的鍵號。掃描法的步驟如下。(1) 判斷有無鍵閉合使行線p2.0p2.3都輸出0,檢測列線p2.4p2.7是否全為1。如果有鍵被按下,就會有某一根列線變?yōu)?,從而使p2.4p2.7不為全1;如果p2.4p2.7為全1,說明無鍵閉合。(2) 消除鍵抖動在檢測到有鍵閉合后,需延時節(jié)020ms避開抖動階段,然后檢測p2.4p2.7是否為全1。如果為全1,作無鍵閉合處理,否則,則進一步檢測閉合鍵鍵號。(3) 確定閉合鍵鍵號如果有鍵按下,再逐行逐列地掃描,以檢測出所按鍵盤的鍵號。先使行線p2.0p2.3=0111,分別檢測p2.4p2.7。
18、如果p2.4為0,則為0號鍵按下;如果p2.5為0,則為1號鍵按下。如果p2.4p2.7都為1,說明p2.0這一行上沒有鍵被按下,再使p2.0p2.3=1011,并逐列檢查。這樣依次地逐行逐列地掃描,直到找到閉合鍵為止。掃描程序的流程圖如圖3-4所示。uchar getkey(void)uchar key; uchar t; if(key=p2&0xf0)=0xf0) return 0xff; for(t=0;t5;t+) delay(5); if(key=p2&0xf0)=0xf0) return 0xff; while(p2&0xf0)!=0xf0) delay(5); if(t100)&
19、(key=0xe0) return 0xe1; return key;3.8 運行環(huán)境u keilu isis 6 professionalu 信息學院仿真板3.9本章小結 在軟件測試時,首先要確保液晶正常顯示,如果程序運行時液晶沒有顯示,就應仔細檢查液晶控制線的連接是否與程序中的定義一致,pcf8563每隔一秒就會產(chǎn)生一次中斷,如果時鐘不走,應檢查pcf8563能否產(chǎn)生中斷、單片機能否響應該中斷,按鍵能否響應,到了報警狀態(tài)時,蜂鳴器是否響。雖然程序較長,但只要按要求一步步進行檢查,正確理解程序結構、函數(shù)的功能、各語句的作用,通過仔細地檢查、分析,最終一定能夠找出問題的原因。 第四章 系統(tǒng)測試
20、4.1硬件測試4.1.1 實驗板連接測試 用萬用表測量,檢查各個焊點之間是否短路。4.1.2 顯示模塊測試把顯示代碼下載到實驗板上,看液晶顯示屏是否能正常顯示。4.1.3 按鍵模塊測試把代碼下載到實驗板上,按鍵,看顯示屏上數(shù)據(jù)的變化。4.1.4 報警模塊測試 把代碼下載到實驗板上,看蜂鳴器是否鳴叫。4.2軟件測試4.2.1 顯示模塊測試1、 首先要確保液晶屏的正常顯示,如果程序運行時液晶屏沒有顯示,就仔細檢查液晶屏控制線的連接是否與程序中的下義一致。2、 檢查液晶屏的第三行顯示能否正常走時,pcf8563每隔一秒就會產(chǎn)生一次中斷。如果時鐘不走,應檢查pcf8563能否產(chǎn)生中數(shù)據(jù)、單片機能否響應
21、中數(shù)據(jù),此外還需檢查pcf8563的連接與程序中的定義是否一致。4.2.2 按鍵模塊測試3、 仔細檢查硬件電路,確認硬件連接無誤后,開始軟件調(diào)試。4、 在keil下新建項目,選擇硬件仿真,設置好串口號及波特率,輸入源程序,編譯成功后進入調(diào)試狀態(tài)。5、 按下k13鍵,進入設置狀態(tài),如果按鍵后無反應,應重點檢查鍵盤電路和連接以及鍵盤程序getkey(),直到按下各鍵時,能得到對應的鍵值返回。6、 如果按下k13鍵后,程序能夠進入設置狀態(tài),應仔細檢查k14,k15,k16鍵的功能是否與設計要求一致,最后長按k13鍵能否退出設置方式。如果有問題,應進入edittime()仔細調(diào)試。4.2.3 報警模塊
22、測試當電磁閥狀態(tài)開,進行澆灌時,蜂鳴器報警。當電磁閥狀態(tài)關,不進行澆灌時,蜂鳴器不叫。第五章 結束語5.1總結5.1.1 問題在做這個項目的過程中我發(fā)現(xiàn)自己存在很多的問題,當完成這個項目時,其實也沒讓我寫太多的程序,很大一部分都是從前面copy過來的, 之前做的項目都是書上有的,雖然我做完也有很多的收獲,但怎么做還是不如自己去思考去從頭做到尾效果好!在此次的測試過程中,出到了很多問題: 1調(diào)試的時候將手放在傳感器上,液晶屏上的溫度值與實際溫度不一致。解決方法:程序中定義錯誤,液晶屏控制線的連接與程序中的定義不一樣,把對dq腳的定義與實驗板上的接口連接一致,再調(diào)試溫度與當前溫度就基本一樣了。2.
23、 漢字顯示低溫、常溫、高溫時,不隨溫度傳感器ds18b20的溫度變化而變化。解決方法:沒有使用定時器模塊,添加定時器模塊實現(xiàn)該功能。3. 液晶屏沒有顯示。解決方法:液晶屏控制線的連接與程序中的定義不一致,經(jīng)檢查程序和原理圖發(fā)現(xiàn),在proteus原理圖中,p0是作為數(shù)據(jù)口的,而在lcd12864io.c程序中定義的是p2口,當改成lcd0x80后,現(xiàn)調(diào)試發(fā)現(xiàn)屏幕上的信息顯示下確。4、仿真時,液晶屏上顯示的澆灌時間與程序中定義的澆灌時間不一樣長。解決方法:程序中定義的常溫、高溫的澆灌時間和用定時器控制時的定義名稱混淆了。5、對常溫、高溫澆灌次數(shù)進行計數(shù)時,加到10就會出現(xiàn)亂碼。解決方法:在程序中定
24、義一個數(shù)組。5.1.2 心得以后無論做什么樣的項目,都要認真、仔細。做這個項目之前,最首先的任務就是要做一個這個項目的基本方法和完成它的具體流程,要先熟練的學習這個項目所運用到的基本知識,在項目完成過程中能更加順利的去完成它。學習一樣東西,不是硬記一些基礎知識,而是通過這些學習得到方法。在做這個項目的基本流程后,要知道該在哪個模塊做什么,注意些什么,在出現(xiàn)問題時,我們可以通過斷點調(diào)試來發(fā)現(xiàn)程序的問題所在,然后修改調(diào)試反復進行,這樣我們才能更好的了解計算機的解決方法和處理模式,對我們調(diào)試程序非常的有幫助。團隊的力量是偉大的,做任何項目都要謹記這一點,當遇到棘手的問題時,不要盲目的去死想,往誤區(qū)里
25、面鉆,也不要不好意思去向同學請教,要知道只有互相的交流,互相的思考才能解決問題提高自己。附錄附錄1 程序代碼/*函數(shù)功能:溫度轉換*/bit reset(void) /初始化ds18b20 bit err; dq=0; delay15(40);/在數(shù)據(jù)線上產(chǎn)生600us的低電平 dq=1;/數(shù)據(jù)線拉高 delay15(6);/延時60us err=dq;/讀取數(shù)據(jù)線狀態(tài),err=0:復合成功;err=1:復合失敗 delay15(18); return(err); void wrbyte(uchar d)/向ds18b20寫入一個字節(jié) uchar i; dat=d; for(i=8;i0;i-
26、)/循環(huán)寫8位(先低位,后高位) dq=0;/產(chǎn)生15us的負脈沖 delay15(1); dq=dat0;/將當前數(shù)據(jù)位送數(shù)據(jù)線 dat=dat1;/將下一位要寫入的數(shù)據(jù)移到最低位 delay15(1);/延時15us dq=1;/數(shù)據(jù)線拉高,為寫入下一位做準備 uchar rdbyte(void) /從ds18b20讀取一個字節(jié) uchar i; dat=0;/讀出數(shù)據(jù)初值為0 for(i=8;i0;i-)/循環(huán)讀8位(先低位,后高位) dat=dat1;/讀出數(shù)據(jù)先右移一位dq=0;_nop_();/產(chǎn)生1us的負脈沖 dq=1;/數(shù)據(jù)總線拉高 delay15(1);/延時15us da
27、t7=dq;/讀取數(shù)據(jù) delay15(4);/延時,為讀下一位做準備 return(dat); void convert(void) /啟動ds18b20開始溫度轉換 bit err; err=reset(); /復位傳感器 wrbyte(0xcc); /跳過多傳感器識別 wrbyte(0x44); /啟動溫度轉換 int readt(void)/讀取ds18b20暫存器中的溫度值 uchar h,l; bit err; err=reset(); /復位傳感器 wrbyte(0xcc); /跳過多傳感器識別 wrbyte(0xbe); /讀暫存器指令 l=rdbyte(); /讀溫度低位 h
28、=rdbyte(); /讀溫度高位 return(h*256+l); /*函數(shù)功能:定時器中斷*/void time0(void) interrupt 1 th0 = -250;/定時時間為 50ms tl0 = -250; count+; if(count=4000) count=0; time2+; if(time2=60) time2=0; time1+; if(time1=60) time1=0; time0+; if(time0=24) time0=0; /*功能:以filldata充填液晶屏*/void lcd_dispfill(uchar filldata) uchar x, y
29、; lcd_wrcmd(cs1,lcd_startrow); lcd_wrcmd(cs2,lcd_startrow); for(y=0; y8; y+) lcd_wrcmd(cs1,lcd_addrstry+y); lcd_wrcmd(cs1,lcd_addrstrx); lcd_wrcmd(cs2,lcd_addrstry+y); lcd_wrcmd(cs2,lcd_addrstrx); for(x=0; x64; x+) lcd_wrdat(cs1,filldata); lcd_wrdat(cs2,filldata); /*功能:液晶模塊初始化*/void lcd_dispini(void
30、) uint i; lcd_rst = 0; for(i=0; i500; i+); lcd_rst = 1; lcd_wrcmd(cs1,lcd_dispon); lcd_wrcmd(cs1,lcd_startrow); lcd_wrcmd(cs2,lcd_dispon); lcd_wrcmd(cs2,lcd_startrow); lcd_dispfill(00); lcd_wrcmd(cs1,lcd_addrstry+0); lcd_wrcmd(cs1,lcd_addrstrx+0); lcd_wrcmd(cs2,lcd_addrstry+0); lcd_wrcmd(cs2,lcd_add
31、rstrx+0);/*功能:/在液晶屏的cy(0-7)行、cx(0-15)列顯示字符dispdata*/void lcd_dispchar(uchar cy, uchar cx, char dispdata) uchar code *pch; uchar i; bit port; cy = cy&0x07; cx = cx&0x0f; pch = &ascii_tab(dispdata-0x20)*5; if( (cx&0x08) = 0 ) port=cs1; i=cx3; else port=cs2; i = (cx&0x07)3; lcd_wrcmd(port,lcd_addrstrx+
32、i); lcd_wrcmd(port,lcd_addrstry+cy); for(i=0; i5; i+); lcd_wrdat(port,0x00); for(i=0; i5; i+) lcd_wrdat(port,*pch); pch+; lcd_wrdat(port,0x00); for(i=0; i15) cy+; /*功能:在液晶屏cy,cx位置顯示漢字字符*/void lcd_disphz(uchar cy, uchar cx, uchar dispdata) /顯示 uchar code *pdat; uchar i,s,page; bit port; cy = cy&0x03;
33、 cx = cx&0x07; pdat = &hztabdispdata*32; if( (cx&0x04) = 0 ) port=0; s=cx4; else port=1; s = (cx4)-64; for(page=0;page2;page+) lcd_wrcmd(port,lcd_addrstrx+s); lcd_wrcmd(port,lcd_addrstry+(cy1)+page); for(i=0; i5; i+); for(i=0; i16; i+) lcd_wrdat(port,*pdat); pdat+; for(i=0; i7) cy+; cx=0; /*功能:讀取鍵值*
34、/uchar getkey(void)uchar key; uchar t; if(key=p2&0xf0)=0xf0) return 0xff; for(t=0;t5;t+) delay(5); if(key=p2&0xf0)=0xf0) return 0xff; while(p2&0xf0)!=0xf0) delay(5); if(t100)&(key=0xe0) return 0xe1; return key;/*功能:時間處理,澆灌次數(shù)及在液晶屏上顯示程序*/void shows(void) if(time0=0) /如果時為0,則顯示:分、秒lcd_dispdat(3,9,time1
35、);lcd_dispstr(3,11,m); /字符:m(分)lcd_dispdat(3,12,time2);lcd_dispstr(3,14,s ); /字符: s(秒)elselcd_dispdat(3,9,time0);lcd_dispstr(3,11,h); /字符:h(時)lcd_dispdat(3,12,time1);lcd_dispstr(3,14,m );/字符: m(分)/*功能:修改澆灌時間和間隔時間*/void edittime(void)uchar no=0; uchar col=0; uchar key; lcd_dispdat(2*no+3,4*col+6,dbuf
36、nocol); while(1) key=getkey(); if(key=kinc) /+ dbufnocol+; lcd_dispdat(2*no+3,4*col+6,dbufnocol); else if(key=kdec) /- dbufnocol-; lcd_dispdat(2*no+3,4*col+6,dbufnocol); else if(key=kset) lcd_dispdat(2*no+3,4*col+6,dbufnocol); col=(col+1)&0x01; lcd_dispdat(2*no+3,4*col+6,dbufnocol); else if(key=kdown) lcd_dispdat(2*no+3,4*col+6,dbufnocol); no=(no+1)&0x01; col=0; lcd_dispdat(2*no+3,6,dbufnocol); else if(key=kset_long) chang=dbuf00; chang_jg=dbuf10; high=dbuf01; high_jg=dbuf11; lcd_dispini(); break; /*功能:主函數(shù)*/void main(void)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024成都裝修合同
- 央視《中國詩詞大會》里的11首經(jīng)典古詩詞賞析
- 2025年春季學期學校德育工作計劃
- 2025年度海洋工程鉆井平臺安全協(xié)議3篇
- 2024影院裝修工程合同書
- 《煤礦電氣系統(tǒng)的安全檢查》培訓課件2025
- 2024年魚塘場地租賃及漁業(yè)資源保護合作協(xié)議3篇
- 2024年高端住宅區(qū)聯(lián)合開發(fā)合同3篇
- 《名人傳記史玉柱》課件
- 2024房地產(chǎn)開發(fā)商與承建商建設合同
- 鍋爐安裝、改造、維修質(zhì)量保證手冊
- 城鎮(zhèn)老舊小區(qū)改造項目計劃書
- 2025年山東省濟南市萊蕪高新區(qū)農(nóng)畜產(chǎn)品質(zhì)量協(xié)管員招聘10人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年白銀有色集團招聘筆試參考題庫含答案解析
- (2024)河南省公務員考試《行測》真題及答案解析
- 帕金森病指南2024年
- 1000只肉羊養(yǎng)殖基地建設項目可行性研究報告
- 《勞保用品安全培訓》課件
- 2024版房屋市政工程生產(chǎn)安全重大事故隱患判定標準內(nèi)容解讀
- GB 21258-2024燃煤發(fā)電機組單位產(chǎn)品能源消耗限額
- 期末 (試題) -2024-2025學年人教PEP版(2024)英語三年級上冊
評論
0/150
提交評論