電飯煲課程設(shè)計(jì)程序_第1頁
電飯煲課程設(shè)計(jì)程序_第2頁
電飯煲課程設(shè)計(jì)程序_第3頁
電飯煲課程設(shè)計(jì)程序_第4頁
電飯煲課程設(shè)計(jì)程序_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、課程設(shè)計(jì)任務(wù)書 專業(yè) 年級 班 一、 設(shè)計(jì)題目 電飯煲控制器二、 主要內(nèi)容電飯煲控制器有預(yù)約功能,有烹飪大米飯、粥、保溫、冷飯加熱等功能三、 具體要求 1.具體功能大米飯:當(dāng)達(dá)到105°時,停止加熱,并在15分鐘后通過蜂鳴器提示用戶。粥:開始加熱后,通過測溫元件監(jiān)視鍋底溫度,使鍋底溫度保持在99°100.5°之間(100°時停止加熱、99°時開始加熱),此種狀態(tài)持續(xù)20分鐘,之后通過蜂鳴器提示用戶過程結(jié)束。保溫:使鍋底溫度維持在50°60°之間。冷飯加熱:鍋底加熱至100°,使鍋底溫度保持在99°100.

2、5°之間(100°時停止加熱、99°時開始加熱),此種狀態(tài)持續(xù)5分鐘,之后通過蜂鳴器提示用戶過程結(jié)束。2.定時 用戶可以是電飯煲在預(yù)約時間(倒計(jì)時方式)開始工作,最長預(yù)約時長為12小時。3.控制面板四個發(fā)光管分別與大米飯、粥、保溫、冷飯加熱相對應(yīng),另一發(fā)光管用于區(qū)分工作與預(yù)約,兩位數(shù)碼管用于預(yù)約時間及倒計(jì)時。按鍵有:開始鍵、功能鍵、加鍵、減鍵。四、 進(jìn)度安排1、了解任務(wù)要求,確定具體方案2、lcd12864液晶屏子程序設(shè)計(jì)3、DS18B20溫度傳子程序感器設(shè)計(jì)4、設(shè)計(jì)單片機(jī)按鍵功能程序5、根據(jù)任務(wù)要求編寫程序,設(shè)計(jì)按鍵電路6、檢驗(yàn)設(shè)計(jì)效果,完善功能五、 完成后應(yīng)上

3、交的材料電飯煲控制器論文六、 總評成績指導(dǎo)教師 簽名日期 年 月 日系主任 審核日期 年 月 日摘要電飯煲控制器有預(yù)約功能,有烹飪大米飯、粥、保溫、冷飯加熱等功能.?;趕tc89c52單片機(jī)控制的電飯煲控制器,有l(wèi)cd液晶屏顯示和ds18b20溫度檢測功能,還有定時工作選擇功能。關(guān)鍵字:電飯煲 溫度控制 DS18B20 LCD12864 鍵盤按鍵目錄一、任務(wù)分析與設(shè)計(jì)電路11、總體方案設(shè)計(jì)11.1、控制方案選擇11.2、測溫模塊控制選擇11.3、鍵盤按鍵方案選擇21.4、顯示方案選擇21.5、聲音模塊方案選擇31.6、功率元件模塊方案選擇32、電路設(shè)計(jì)32.1、控制模塊32.2、測溫模塊62

4、.3、鍵盤模塊102.4、顯示模塊112.5、聲音模塊132.6、功率模塊14二、軟件設(shè)計(jì)151、程序流程圖151.1、主流程圖151.2、子流程圖171.3、功率元件控制流程圖171.4、定時預(yù)約工作流程圖18三、系統(tǒng)調(diào)試分析201、系統(tǒng)硬件調(diào)試202、系統(tǒng)軟件調(diào)試20四、心得體會20一、任務(wù)分析與設(shè)計(jì)電路1、總體方案設(shè)計(jì)1.1、控制方案選擇 方案:采用STC公司的STC89C52RC。此單片機(jī)價格低,資源多,高性價比,應(yīng)用廣泛,無論是從內(nèi)部構(gòu)造,還是編程方面,51系列單片機(jī)都相對簡單容易掌握和使用。 對于本題目而言,由于電飯煲需要實(shí)現(xiàn)的功能少,對處理器的要求不高, 使用STC89C52RC

5、不僅可以完全實(shí)現(xiàn)對電飯煲的控制,還節(jié)約了成本。綜合考慮,電飯煲控制器采用STC89C52RC單片機(jī)。1.2、測溫模塊控制選擇測溫模塊采用數(shù)字溫度傳感器DS1820。DS1820是美國DALLAS半導(dǎo)體公司生產(chǎn)的可組網(wǎng)數(shù)字式溫度傳感器,其內(nèi)部使用了在板(ON-B0ARD)專利技術(shù)。全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。與其它溫度傳感器相比,DS1820具有以下特性: 1. 獨(dú)特的單線界面方式,DS1820在與微處理器連接時僅需要一條口線即可實(shí)現(xiàn)微處理器與DS1820的雙向通訊。2. DS1820支持多點(diǎn)組網(wǎng)功能,多個DS1820可以并聯(lián)在唯一的三在線,實(shí)現(xiàn)多

6、點(diǎn)測溫。  3. DS1820在使用中不需任何外圍元鍵。  4.測溫范圍55125,固有測溫分辨率0.5。  5. 測量結(jié)果以9位數(shù)字量方式串行傳送。由于在本課程設(shè)計(jì)中,電飯煲的期望溫度最高值在數(shù)字溫度傳感器DS1820的量程內(nèi),同時,DS1820具有測溫系統(tǒng)簡單、測溫精度高、連接方便、占用口線少等優(yōu)點(diǎn)。所以,我選用DS18B20溫度傳感器。1.3、鍵盤按鍵方案選擇由于在該課程設(shè)計(jì)中,需要的按鍵只要四個:開始鍵、功能鍵、加鍵、減鍵,鍵盤個數(shù)較少,可以用獨(dú)立式按鍵電路。所以我選用獨(dú)立按鍵電路。1.4、顯示方案選擇方案

7、一、使用數(shù)碼管顯示。數(shù)碼管能顯示數(shù)字,使用方法簡單方便,可是顯示過于單調(diào)。方案二、使用lcd12864液晶屏。lcd12864能清晰顯示字符和數(shù)字,顯示的信息更多。因?yàn)閿?shù)碼管只能顯示數(shù)字,過于單調(diào),而lcd12864能顯示漢字和數(shù)字,還有各種圖案,能更好地進(jìn)行人機(jī)溝通,達(dá)到更好的顯示效果。綜上所述,我選用lcd1286液晶屏。1.5、聲音模塊方案選擇由于在該課程設(shè)計(jì)中,只需要對工作狀態(tài)和工作方式的提示,用蜂鳴器產(chǎn)生的bee bee聲音即可。1.6、功率元件模塊方案選擇功率元件的控制通過固態(tài)繼電器來完成。固態(tài)繼電器也稱作固態(tài)開關(guān)。是一種由固態(tài)電子組成的新型電子開關(guān)器件,集光電藕合,大功率雙向晶閘

8、管,及觸發(fā)電路,阻容吸收回路于一體.用來代替?zhèn)鹘y(tǒng)的電磁式繼電器。實(shí)現(xiàn)對單相或者三相電動機(jī)的正反轉(zhuǎn)控制,或者其他控制無觸點(diǎn)無動作噪音。開關(guān)速度快無火花干擾和可靠性高等特性。由于單片機(jī)學(xué)習(xí)板配有固態(tài)繼電器,所以直接選用單片機(jī)學(xué)習(xí)板的繼電器作為功率元件模塊。2、電路設(shè)計(jì)2.1、控制模塊STC89C52是一個低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲器和256 bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲單元,STC89

9、C52單片機(jī)在電子行業(yè)中有著廣泛的應(yīng)用。特點(diǎn):1、兼容MCS51指令系統(tǒng)2、8kB可反復(fù)擦寫(大于1000次)Flash ROM;3、32個雙向I/O口;4、256x8bit內(nèi)部RAM;5、3個16位可編程定時/計(jì)數(shù)器中斷;6、時鐘頻率0-24MHz;7、2個串行中斷,可編程UART串行通道;8、2個外部中斷源,共8個中斷源;9、2個讀寫中斷口線,3級加密位;10、低功耗空閑和掉電模式,軟件設(shè)置睡眠和喚醒功能;11、有PDIP、PQFP、TQFP及PLCC等幾種封裝形式,以適應(yīng)不同產(chǎn)品的需求。工作原理:STC89C52為8 位通用微處理器,采用工業(yè)標(biāo)準(zhǔn)的C51內(nèi)核,在內(nèi)部功能及管腳排布上與通用

10、的8xc52 相同,其主要用于會聚調(diào)整時的功能控制。功能包括對會聚主IC 內(nèi)部寄存器、數(shù)據(jù)RAM及外部界面等功能部件的初始化,會聚調(diào)整控制,會聚測試圖控制,紅外遙控信號IR的接收譯碼及與主板CPU通信等。主要管腳有:XTAL1(19 腳)和XTAL2(18 腳)為振蕩器輸入輸出端口,外接12MHz 晶振。RST/Vpd(9 腳)為復(fù)位輸入端口,外接電阻電容組成的復(fù)位電路。VCC(40 腳)和VSS(20 腳)為供電端口,分別接+5V電源的正負(fù)端。P0P3 為可編程通用I/O 腳,其功能用途由軟件定義,如圖1-1、1-2所示。圖1-1 AT89C52的DIP封裝引腳圖圖1-2 最小系統(tǒng)圖2.2、

11、測溫模塊測溫模塊采用數(shù)字溫度傳感器DS1820。DS1820是美國DALLAS半導(dǎo)體公司生產(chǎn)的可組網(wǎng)數(shù)字式溫度傳感器,其內(nèi)部使用了在板(ON-B0ARD)專利技術(shù)。全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。與其它溫度傳感器相比,DS1820具有以下特性: 獨(dú)特的單線界面方式,DS1820在與微處理器連接時僅需要一條口線即可實(shí)現(xiàn)微處理器與DS1820的雙向通訊。2. DS1820支持多點(diǎn)組網(wǎng)功能,多個DS1820可以并聯(lián)在唯一的三在線,實(shí)現(xiàn)多點(diǎn)測溫。  3. DS1820在使用中不需任何外圍元件。  4.測溫范圍

12、55125,固有測溫分辨率0.5。  5. 測量結(jié)果以9位數(shù)字量方式串行傳送。DS18B20有兩種封裝形式,即TO92封裝和8-pinSOIC封裝。每種封裝的樣式及引腳排列見圖1-3,其引腳功能描述見表1。 圖1-3DS18B20的引腳排列序號名稱引腳功能描述1GND地信號2DQ數(shù)據(jù)輸入/輸出引腳。開漏單總線界面引腳。當(dāng)被用著在寄生電源下,也可以向器件提供電源。3VDD可選擇的VDD引腳。當(dāng)工作于寄生電源時,此引腳必須接地。表1 DS18B20詳細(xì)引腳功能描述下圖是溫度檢測模塊原理如圖1-4所示:圖1-4 溫度檢測模塊原理圖2.3、鍵盤模塊在鍵盤模塊中,我采用獨(dú)立

13、式按鍵電路。特點(diǎn):1)每個鍵獨(dú)立地接入一根數(shù)據(jù)輸入線。2)平時所有的數(shù)據(jù)輸入線都連接成高電平;3)當(dāng)任何一個按鍵壓下時,與之相連的數(shù)據(jù)輸入線被拉成低電平。4)要判斷是否有鍵按下,只要位處理指令即可。獨(dú)立連接式鍵盤優(yōu)點(diǎn)是結(jié)構(gòu)簡單、使用方便,但隨著鍵數(shù)的增多,所占用的IO口線也增加。該系統(tǒng)的鍵盤由4個獨(dú)立鍵盤構(gòu)成。鍵盤的一腳接在單片機(jī)的P1.0至P1.4腳上,另外一腳接在電源地上,當(dāng)有鍵盤按下時對應(yīng)的鍵盤就會有一低電平送到單片機(jī)內(nèi)部。為消除觸點(diǎn)式按鍵開關(guān)的機(jī)械抖動,單片機(jī)內(nèi)部有程序進(jìn)行消抖處理,然后確定那一個鍵盤被按下后來執(zhí)行程序完成該系統(tǒng)的指定工作。按鍵鍵盤原理圖如圖1-5所示:圖1-5 按鍵圖

14、2.4、顯示模塊顯示模塊我使用了lcd12864液晶屏。帶中文字庫的12864是一種具有4位/8位并行、2線或3線串行多種界面方式,內(nèi)部含有國標(biāo)一級、二級簡體中文字庫的點(diǎn)陣圖形液晶顯示模塊;其顯示分辨率為128×64, 內(nèi)置8192個16*16點(diǎn)漢字,和128個16*8點(diǎn)ASCII字符集.利用該模塊靈活的界面方式和簡單、方便的操作指令,可構(gòu)成全中文人機(jī)交互圖形界面??梢燥@示8×4行16×16點(diǎn)陣的漢字. 也可完成圖形顯示.低電壓低功耗是其又一顯著特點(diǎn)。由該模塊構(gòu)成的液晶顯示方案與同類型的圖形點(diǎn)陣液晶顯示模塊相比,不論硬件電路結(jié)構(gòu)或顯示程序都要簡

15、潔得多,且該模塊的價格也略低于相同點(diǎn)陣的圖形液晶模塊。其控制方法如圖1-7、1-8所示。12864顯示電路如圖1-6所示:圖1-6 12864電路圖圖1-7 圖1-82.5、聲音模塊該模塊使用蜂鳴器。蜂鳴器需要的驅(qū)動電流較大(50100mA),由于單片機(jī)輸出低電平時的驅(qū)動電流只有十幾毫安,因此要外接一個PNP三極管作為功率驅(qū)動器件。當(dāng)P37口輸出低電平時,PNP導(dǎo)通,蜂鳴器正常工作,當(dāng)當(dāng)P37口輸出高電平時,PNP截止,蜂鳴器暫停工作。原理如圖1-9:圖1-9蜂鳴器2.6、功率模塊功率模塊我選用單片機(jī)學(xué)習(xí)板上的固態(tài)繼電器。如圖1-10所示。圖1-10 繼電器電路圖當(dāng)單片機(jī)P36口輸出低電平時,

16、BJT管導(dǎo)通,LED9指示燈亮,繼電器工作。二、軟件設(shè)計(jì)1、程序流程圖系統(tǒng)的軟件設(shè)計(jì)采用結(jié)構(gòu)化和模塊化設(shè)計(jì)的方法,便于程序的編寫、調(diào)試和排除錯誤,同時也便于檢驗(yàn)和維護(hù)。單片機(jī)系統(tǒng)的軟件程序主要由以下模塊組成:初始化主程序、輸入及顯示、溫度采集、功率元件控制。1.1、主流程圖如圖2-1所示:圖2-1 系統(tǒng)主流程圖1.2、子流程圖如圖2-2:圖2-2 系統(tǒng)子程序流程圖1.3、功率元件控制流程圖圖2-2子流程圖 電飯煲控制系統(tǒng)對電飯煲加熱與否需要根據(jù)當(dāng)前鍋內(nèi)溫度以及所處的工作模式做出選擇。其軟件控制流程如下圖所示。 控制器先通過溫度傳感器獲得當(dāng)前鍋內(nèi)溫度,根據(jù)所處的工作模式,得到需要到達(dá)的目標(biāo)溫度。

17、若當(dāng)前鍋內(nèi)溫度小于目標(biāo)溫度,則控制器接通加熱盤加熱,否則斷開加熱盤,停止加熱。功率元件控制流程如圖2-3所示。圖2-3 功率元件控制流程圖1.4、定時預(yù)約工作流程圖系統(tǒng)運(yùn)行后,若按下“開始”按鍵,系統(tǒng)即可進(jìn)入定時預(yù)約功能狀態(tài),表示“時”位的個位數(shù)值處于可設(shè)定狀態(tài),高位默認(rèn)顯示“0”。此時按下“加”鍵,預(yù)定時間的小時數(shù)的個位將累加1,如果累加后的數(shù)值大于9,高位的數(shù)值將自動變?yōu)?;若按下“減”鍵,預(yù)定時間的小時數(shù)的個位將減去1。 由于本控制系統(tǒng)支持最大定時12小時,當(dāng)小時數(shù)超出12后會溢出為0。即置定時數(shù)值時,若當(dāng)前示數(shù)為12,且按下“加”鍵,則lcd顯示的數(shù)值由12變?yōu)?0。預(yù)約小時數(shù)設(shè)定完成

18、后,按下“開始”鍵,系統(tǒng)則保存用戶設(shè)定的定時時間并退出定時時間設(shè)定狀態(tài)。隨如圖2-4所示:圖2-4 定時工作流程圖三、系統(tǒng)調(diào)試分析1、系統(tǒng)硬件調(diào)試按照畫好的電路圖把外圍電路接好,主要的自己做了一個獨(dú)立按鍵小鍵盤。而ds18b20溫度傳感器的接線比較簡單,只需3跟線就完成了。2、系統(tǒng)軟件調(diào)試12864液晶屏的原理比較好理解,不要多長時間就看懂。而ds18b20溫度傳感器的原理就有點(diǎn)難懂,看了比較久才看懂。但在自己編譯過程中,卻出現(xiàn)很多錯誤。比如,系統(tǒng)無法讀取ds18b20里面的溫度,仔細(xì)檢查程序后發(fā)現(xiàn)在ds18b20讀取數(shù)據(jù)時間那里有錯誤,時間太短,導(dǎo)致無法讀取。在編寫主程序時,發(fā)現(xiàn)無法返回溫度

19、值給單片機(jī),搞了很久都搞不定。后來發(fā)現(xiàn)是忘記了在ds18b20子程序那里加入返回函數(shù)return,加上return后,終于完成。四、心得體會在看到課程設(shè)計(jì)的題目后,我就感覺應(yīng)該是挺好玩的。果然我看到了電飯煲控制器這個題目!以前在家里就修過壞了的電飯煲,可惜沒能修好.經(jīng)過這次的課程設(shè)計(jì)后,我想我應(yīng)該能修壞了的電飯煲了!這次課程設(shè)計(jì)獲益良多,既加深了我c語言的知識,又讓我學(xué)會了lcd12864和ds18b20的使用。而在編程過程中,一個小小的語句錯誤就會到致程序無法運(yùn)行,更讓我明白謹(jǐn)慎小心的重要性。在最后系統(tǒng)能正常運(yùn)作時,整個人都有一種成功的飄然.附錄程序:主程序#include<reg52

20、.h>#include<stdio.h>#include<12864.c>#include<last18B20.c>/#include<function.c>#define uchar unsigned char#define uint unsigned intsbit k1=P32; /功能按鍵sbit k2=P33;sbit k3=P34;sbit k4=P35;sbit a1=P10; /按鍵指示燈sbit b1=P11;sbit c1=P12;sbit c2=P13;uchar code m1="煮飯"uchar

21、 code m2="煮粥"uchar code m3="保溫"uchar code m4="冷飯加熱"uchar code m5="工作狀態(tài)"uchar code m6="定時狀態(tài)"uchar code m7="預(yù)定時間:"uchar code m8="H"uchar m9="0123456789"uchar code m10="定時時間:"void zhufan(); /煮飯函數(shù)聲明void zhuzhou();

22、/煲粥函數(shù)聲明void baowen(); /保溫函數(shù)聲明void jiare(); /冷飯加熱函數(shù)聲明void timing(); /定時預(yù)約函數(shù)void select();sbit y1=P36; /繼電器 sbit y2=P37;/蜂鳴器uint s1=0,s=0,m=0,h=0;/秒,分,時計(jì)數(shù)/*延時*/void delay2(uint x) while(x-)uint y;for(y=125;y>0;y-);/*定時器*/void time0() /定時器0TMOD=0x01;TH0=(65536-50000)/256; /50msTL0=(65536-50000)%256;

23、ET0=1;TR0=1;void t0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;s1+;if(s1=20)s+;s1=0; / 1 s if(s=60)m+;s=0; / 1 minif(m=60)h+;m=0; / 1 hourif(h=12)h=0; /12 hour /*按鍵功能*/ void key() if(k1=0) / 工作狀態(tài)按鍵delay2(10);if(k1=0)lcd_init();/lcd初始化a1=0;b1=1;c1=1;c2=1;lcd_pos(0,0); /顯示菜單print(m1);lcd

24、_pos(0,3);print(m2);lcd_pos(0,6);print(m3);lcd_pos(2,2);print(m4); while(!k1); /等待松開按鍵 while(k1&k2&k3&k4);/等待選擇菜單功能 delay2(10); select(); if(k2=0) / 預(yù)定功能按鍵delay2(10);if(k2=0)lcd_init();a1=0x02;lcd_pos(0,0);print(m7); timing(); void select() /選擇4種功能if(k1=0)/煮飯delay2(10);if(k1=0)a1=0;b1=1;

25、c1=1;c2=1; /工作指示燈lcd_init();lcd_pos(0,3);print(m1);/while(!k1);/lcd_pos(0,3);/print(m2);zhufan();if(k2=0) /煮粥delay2(10);if(k2=0)a1=1;b1=0;c1=1;c2=1;lcd_init();lcd_pos(0,3);print(m2);zhuzhou();if(k3=0) /保溫delay2(10);if(k3=0)a1=1;b1=1;c1=0;c2=1;lcd_init();lcd_pos(0,3);print(m3);baowen();if(k4=0)/冷飯加熱d

26、elay2(10);if(k4=0)a1=1;b1=1;c1=1;c2=0;lcd_init();lcd_pos(0,2);print(m4);jiare();/*煮飯*/void zhufan() uchar w1,w4; lcd_init(); lcd_pos(0,3); print(m1); y1=1; /打開繼電器,開始加熱/ get_temp();/ delay(100);/ w4=get_temp(); while(get_temp()<200) c2=0; delay2(10);get_temp(); lcd_pos(2,0); dis_temp(); delay2(100

27、); / while(1) / / / get_temp();/ delay(70);/ delay(70);/ if(w4>26)break;/ / while(1)/ lcd_pos(3,0);print(m1); / while(temp<105); while(w4>25)/溫度大于105°C時 / get_temp();/ lcd_pos(2,0);/ dis_temp(); EA=1;while(s<=15);/定時 15 minEA=0;s1=0;s=0;m=0;h=0; y1=0;for(w1=5;w1>0;w1-) /煮飯完成,鳴笛5次

28、 y2=0; delay2(100); delay2(100); y2=1; delay2(100); delay2(100); if(y2=1)break; baowen();/*煮粥*/void zhuzhou() uchar w1; lcd_init(); lcd_pos(0,3); print(m2);y1=1; /打開繼電器,開始加熱get_temp(); /獲取溫度數(shù)值while(temp<100); EA=1;while(m<=20)get_temp();delay2(10);if(temp>100)y1=0; /溫度大于100,停止加熱if(temp<=

29、99) /溫度在99到100度之間/保持溫度穩(wěn)定y1=1;EA=0;s1=0;s=0;m-0;h=0;for(w1=5;w1>0;w1-) y2=0; delay2(100); delay2(100); y2=1; /煲粥完成,鳴笛5次 delay2(100); delay2(100);baowen(); /*保溫*/void baowen() lcd_init(); lcd_pos(0,3); print(m3); while(1) get_temp(); if(temp<=50)y1=1;delay2(100);if(temp>=60)y1=0;delay2(100);i

30、f(k1=0)delay2(10);if(k1=0)zhufan();if(k2=0)delay2(10);if(k2=0)zhuzhou();if(k3=0)delay2(10);if(k3=0)baowen();if(k4=0)delay2(10);if(k4=0)jiare(); /*冷飯加熱*/void jiare()uchar w1;lcd_init(); lcd_pos(0,2); print(m4);y1=1;get_temp();while(temp<100); EA=1; while(m<=5) get_temp();delay2(10);if(temp>1

31、00)y1=0; delay2(100); /溫度大于100,停止加熱if(temp<=99) /溫度在99到100度之間/保持溫度穩(wěn)定y1=1; delay2(100); EA=0; s1=0;s=0;m-0;h=0;for(w1=5;w1>0;w1-) y2=0; delay2(100); delay2(100); y2=1; /冷飯加熱完成,鳴笛5次 delay2(100); delay2(100);baowen();/*定時預(yù)約*/void timing()uchar e1=0,e2=0,e3=0;uchar q1;lcd_pos(0,5);write_data(m90);

32、delay2(10);lcd_pos(0,6);write_data(m90);lcd_pos(0,7);print(m8);delay2(10);do/while(1)/if(k3=0) /個位減1delay2(10);if(k3=0)e2-;while(!k3);if(k4=0) /個位加1delay2(10);if(k4=0)e2+;while(!k4); if(e2=10)e2=0;e1+;if(e2<0)e2=0;e3=e1*10+e2; /計(jì)算時間大小if(e3>12)e1=0;e2=0;lcd_pos(0,5); write_data(m9e1);delay2(10)

33、;lcd_pos(0,6);write_data(m9e2);/ while(k1); /按確認(rèn)鍵結(jié)束lcd_init();/lcd初始化a1=0;b1=1;c1=1;c2=1;lcd_pos(0,0); /顯示菜單print(m1);lcd_pos(0,3);print(m2);lcd_pos(0,6);print(m3);lcd_pos(2,2);print(m4);EA=1;delay2(100);do /預(yù)定功能選擇if(k1=0) /煮飯delay2(10);if(k1=0)q1=1; lcd_init();lcd_pos(0,3);print(m1);if(k2=0) /煲粥del

34、ay2(10);if(k2=0)q1=2;lcd_init();lcd_pos(0,3);print(m2);if(k3=0) /保溫delay2(10);if(k3=0)q1=3;lcd_init();lcd_pos(0,3);print(m3);if(k4=0) /冷飯加熱delay2(10);if(k4=0)q1=4;lcd_init();lcd_pos(0,2);print(m4);e2=e3%10; /定時時間顯示e1=e3/10; lcd_pos(3,0); print(m10); lcd_pos(3,5);write_data(m9e1);delay2(10);lcd_pos(3

35、,6);write_data(m9e2);lcd_pos(3,7);print(m8); while(e3=e3-s)!=0);/定時計(jì)算EA=0;if(q1=1)zhufan(); /電飯煲工作狀態(tài)if(q1=2)baozhou();if(q1=3)baowen();if(q1=4)jiare(); void main() EA=0; /關(guān)中斷time0(); /定時器初始化lcd_init(); / 12864液晶 初始化 lcd_pos(0,2); print(m5); /顯示 工作狀態(tài) lcd_pos(2,2); print(m6); /顯示 預(yù)定狀態(tài) while(1) key();

36、12864LCD顯示子程序/*12864子函數(shù)函數(shù)(各啟動命令)*/#include <reg52.h>#include <intrins.h>#include <stdlib.h>#define uchar unsigned char#define uint unsigned int/* 端口定義*/sbit LCD_RS = P20; /寄存器選擇輸入 sbit LCD_RW = P21; /液晶讀/寫控制sbit LCD_EN = P22; /液晶使能控制sbit LCD_PSB = P23; /串/并方式控制void delay1ms(uint x)

37、 uint i,j; for(j=0;j<x;j+) for(i=0;i<110;i+); /*/* */*寫指令數(shù)據(jù)到LCD */*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 */* */*/void write_com(uchar com) LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; P0 = com;delay1ms(5); LCD_EN = 1;delay1ms(5); LCD_EN = 0; /*/* */*寫顯示數(shù)據(jù)到LCD */*RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。 */* */*/void write_data(u

38、char dat) LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat;delay1ms(5); LCD_EN = 1;delay1ms(5); LCD_EN = 0; /*直接輸出數(shù)組中的字符串*/void print(uchar *str) /LCD顯示函數(shù) while(*str!='0')write_data(*str);str+;/*/* */* 設(shè)定顯示位置 */* */*/void lcd_pos(uchar X,uchar Y) uchar pos; if (X=0) X=0x80; else if (X=1) X=0x90;

39、 else if (X=2) X=0x88; else if (X=3) X=0x98; pos = X+Y ; write_com(pos); /顯示地址/*/* */* LCD初始化設(shè)定 */* */*/void lcd_init() LCD_PSB = 1; /并口方式 write_com(0x30); /基本指令操作 write_com(0x0C); /顯示開,關(guān)光標(biāo) write_com(0x01); /清除LCD的顯示內(nèi)容DS18B20溫度子程序/*get_temp()直接求出溫度值,有兩位有效小數(shù)與一位有效小數(shù)(默認(rèn)),dis_temp()顯示溫度值*/#include < reg52.h >#include<stdio.h>#define uchar unsigned char#define uint unsigned intsbit DQ = P17 ; /定義DS18B20端口DQ uchar num;uint temp; / 整型溫度數(shù)據(jù)float f_temp;/浮點(diǎn)型溫度數(shù)據(jù),用于間接變換或串口通信uint x,y,z,w;uchar data temp_data2 = 0x00,0x00 ;uchar code ASCII25 = "0123456789.°CTEM

溫馨提示

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

評論

0/150

提交評論