精品畢業(yè)論文--液晶顯示電冰箱溫控器的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
精品畢業(yè)論文--液晶顯示電冰箱溫控器的設(shè)計(jì)與實(shí)現(xiàn)_第2頁
精品畢業(yè)論文--液晶顯示電冰箱溫控器的設(shè)計(jì)與實(shí)現(xiàn)_第3頁
精品畢業(yè)論文--液晶顯示電冰箱溫控器的設(shè)計(jì)與實(shí)現(xiàn)_第4頁
精品畢業(yè)論文--液晶顯示電冰箱溫控器的設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、. 目 錄摘要1第一章 總體設(shè)計(jì)方案1.1 背景21.2 系統(tǒng)功能描述21.3 系統(tǒng)總體結(jié)構(gòu)3第二章 硬件系統(tǒng)的設(shè)計(jì)2.1微處理器(單片機(jī))42.2溫度傳感器DS18B2042.3液晶顯示模塊TG12864B52.4定時(shí)器62.5功能按鍵72.6原理圖8第三章 系統(tǒng)的軟件的設(shè)計(jì)3.1 液晶顯示模塊93.2 溫度傳感器93.3壓縮機(jī)狀態(tài)103.4 總結(jié)構(gòu)框圖10第四章 程序調(diào)試與運(yùn)行4.1 調(diào)試方法124.2 調(diào)試過程中遇到的問題以及解決12第五章 設(shè)計(jì)小結(jié)14附錄15 :32摘 要隨著集成電路技術(shù)的發(fā)展,單片微型計(jì)算機(jī)的功能也不斷增強(qiáng),許多高性能的新型機(jī)種不斷涌現(xiàn)出來。單片機(jī)以其功能強(qiáng)、體積小

2、、可靠性高、造價(jià)低和開發(fā)周期短等優(yōu)點(diǎn),稱為自動化和各個(gè)測控領(lǐng)域中廣泛應(yīng)用的器件,在工業(yè)生產(chǎn)中稱為必不可少的器件,尤其在日常生活中發(fā)揮的作用也越來越大。人們對家用電冰箱的控制功能越來越高,這對電冰箱控制器提出了更高的要求。多功能,智能化是其發(fā)展方向之一,傳統(tǒng)的機(jī)器控制,簡單的電子控制已經(jīng)難以滿足發(fā)展的要求。而采用基于單片機(jī)溫度控制系統(tǒng),不僅可大大縮短設(shè)計(jì)新產(chǎn)品的時(shí)間,同時(shí)只要增加少許外圍器件在軟件設(shè)計(jì)方面就能實(shí)現(xiàn)功能的擴(kuò)展,以及智能化方面的提高,因此可最大限度地節(jié)約成本。本文即為基于單片機(jī)的電冰箱溫度控制系統(tǒng)。目前市場銷售的雙門直冷式電冰箱,含有冷凍室和冷藏室,冷凍室通常用于冷凍的溫度為-6-1

3、8;冷藏室用于在相對冷凍室較高的溫度下存放食品,要求有一定的保鮮作用,不能凍傷食品,室溫一般為010.傳統(tǒng)的電冰箱溫度一般是由冷藏室控制,冷藏室、冷凍室的不同溫度是通過調(diào)節(jié)蒸發(fā)器在兩室的面積大小來實(shí)現(xiàn)的,溫度調(diào)節(jié)完全依靠壓縮機(jī)的開停來控制.但是冰箱內(nèi)的溫度受諸多因素的影響,如放入冰箱物品初始溫度的高低、存放品的散熱特性及熱容量、物品在冰箱的充滿率、環(huán)境溫度的高低、開門的頻繁程度等.因此對這種受控參數(shù)及隨機(jī)因素很多的溫度控制,既難以建立一個(gè)標(biāo)準(zhǔn)的數(shù)學(xué)模型,也無法用傳統(tǒng)的PID調(diào)節(jié)來實(shí)現(xiàn).一臺品質(zhì)優(yōu)良的電冰箱應(yīng)該具有較高的溫度控制精度,同時(shí)又有最優(yōu)的節(jié)能效果,而為了達(dá)到這一設(shè)計(jì)要求采用模糊控制技術(shù)

4、無疑是最佳的選擇。 第一章 總體設(shè)計(jì)方案1.1背景隨著技術(shù)的發(fā)展,目前有些冰箱采用電腦只能溫控及LCD(或LED)箱門外溫度顯示。所謂智能溫控就是通過感溫頭精確感應(yīng),把冰箱內(nèi)溫度的變化傳遞給中央控制芯片,由芯片控制制冷系統(tǒng)使冰箱內(nèi)溫度達(dá)到顯示屏上設(shè)定值,使用者只需要根據(jù)食物的種類不同設(shè)定不同的溫度即可,以此達(dá)到最大的保鮮程度。傳統(tǒng)的電冰箱的冷藏室溫控器旋鈕一般有7個(gè)數(shù)字,這些數(shù)字并不表示冰箱內(nèi)具體的溫度值,而是表示所控制的溫度檔位。數(shù)字越小,箱內(nèi)溫度越高。隨著人們的生活水平的提高,對冰箱的控制功能要求越來越高,這對電冰箱控制器提出了更高的要求,傳統(tǒng)冰箱的溫控器也就無法滿足人們的需求了。因此,能

5、夠?qū)崿F(xiàn)精確控制溫度、方便的設(shè)定和修改并且能夠?qū)崟r(shí)顯示當(dāng)前溫度是非常重要的。1.2總體功能 液晶顯示電冰箱溫控器的設(shè)計(jì)是以單片機(jī)AT89C51作為核心控制器,利用DALAS一線式溫度傳感器DS18B20實(shí)現(xiàn)對電冰箱內(nèi)冷藏室和冷凍室的溫度采集。通過按鍵可以對電冰箱內(nèi)冷藏室和冷凍室的溫度進(jìn)行預(yù)先設(shè)定。當(dāng)電冰箱內(nèi)的溫度值高于用戶設(shè)定的溫度值時(shí),系統(tǒng)將由單片機(jī)控制繼電器自動開啟壓縮機(jī)進(jìn)行制冷,使冰箱內(nèi)溫度自動降溫,當(dāng)電冰箱內(nèi)的溫度值低于設(shè)定溫度值時(shí),系統(tǒng)將由單片機(jī)控制繼電器自動關(guān)閉壓縮機(jī)停止制冷,以此來自動實(shí)現(xiàn)電冰箱內(nèi)溫度的自動調(diào)節(jié)。同時(shí)相關(guān)的狀態(tài)信息要在點(diǎn)陣漢字液晶屏上實(shí)時(shí)地顯示。具體顯示內(nèi)容有: 1

6、、實(shí)時(shí)時(shí)鐘:*:*:*。2、冷藏室溫度:*.*。3、冷凍室溫度:*.*。4壓縮:開或關(guān)。5、冰箱外環(huán)境溫度:*.*。6、按鍵預(yù)置的溫度值(冷藏室溫度、冷凍室溫度)。1.3 總體框圖使用定時(shí)器,實(shí)現(xiàn)實(shí)時(shí)時(shí)間自動走時(shí) TG12864B液晶屏顯示冷藏室、冷凍室溫度和室外溫度。通過按鍵加減預(yù)設(shè)冷藏室和冷凍室溫度,與冷藏室、冷凍室溫度相比較,決定壓縮機(jī)的開或關(guān)單片機(jī)80C51溫度傳感器DS18B20調(diào)節(jié)冷藏室、冷凍室當(dāng)前溫度和室外溫度圖1.3 圖2.1 AT89S52 圖2.2 AT89S51實(shí)物圖(基本與AT89S52一樣)第二章 硬件系統(tǒng)的設(shè)計(jì)2.1 微處理器(單片機(jī)) AT89S52是美國ATME

7、L公司生產(chǎn)的低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含4k bytes的可系統(tǒng)編程的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)8051指令系統(tǒng)及引腳。它集Flash程序存儲器既可在線編程(ISP)也可用傳統(tǒng)方法進(jìn)行編程及通用8位微處理器于單片芯片中。AT89S52提供以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash閃速存儲器,256字節(jié)內(nèi)部RAM, 32個(gè)I/O口線,看門狗(WDT),兩個(gè)數(shù)據(jù)指針,三個(gè)16位定時(shí)/計(jì)數(shù)器,一個(gè)6向量兩級中斷結(jié)構(gòu),一個(gè)全雙工串行通信口,片內(nèi)振蕩器及時(shí)鐘電路。同時(shí),AT89S52可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作

8、模式??臻e方式停止CPU的工作,但允許RAM,定時(shí)/計(jì)數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個(gè)硬件復(fù)位。AT89S52的引腳圖和實(shí)物圖分別如上圖2.1和圖2.2所示。2.2 溫度傳感器DS18B202.2.1 DS18B20(如圖2.2.1)是美國DALLAS公司推出的數(shù)字溫度傳感器,傳感器及相關(guān)的數(shù)字轉(zhuǎn)換電路都被集成到了一起,外形如同一只三極管,具有微型化、低耗能、高性能、抗干擾能力強(qiáng)等優(yōu)點(diǎn);獨(dú)特的單線接口方式,DS18B20在與微處理器連接時(shí)僅需要一條I/O口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊;每片DA18B

9、20均有唯一的產(chǎn)品序列號,所以允許在單總線上掛接數(shù)十至百片溫度傳感器,這樣可以非常方便地構(gòu)成多路溫度測量系統(tǒng)。 2.2.2 DS18B20的特點(diǎn): 圖2.2.1(1)適應(yīng)電壓范圍寬,電壓范圍:3.0-5.5V,在寄生電源方式下可以由數(shù)據(jù)線供電;(2)DS18B20支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測量。(3)DS18B20在使用中不需要任何外圍元件,全部傳感元(4)溫度范圍-55+125,在-10+85時(shí)精度為±0.5;(5)可編程的分辨率為912位,對應(yīng)的可分辨溫度分別為0.5,0.25,0.125,0.0625,可以實(shí)現(xiàn)高精度測溫;在9位分辨

10、率時(shí)最多在93.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12位分辨率時(shí)最多在750ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,速度更快。(7)測量結(jié)果直接輸出數(shù)字溫度信號,以“一線總線”串行傳送給CPU,同時(shí)可以傳送CRC校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能力;(8)負(fù)壓特性:電源極性接反時(shí),芯片不會因?yàn)榘l(fā)熱而燒毀,但是不能正常工作。2.2.3 單片機(jī)與DS18B20的接口電路(如圖2.2.3)圖2.2.3 單片機(jī)與DS18B20的接口電路2.3 液晶顯示模塊TG12864BTG12864B點(diǎn)陣液晶屏(如圖2.3.1)顯示模塊是由128*64個(gè)液晶屏顯示點(diǎn)組合的一個(gè)陣列,每個(gè)顯示點(diǎn)對應(yīng)一位二進(jìn)制數(shù),1表示點(diǎn)亮,0表示滅,儲存這些

11、點(diǎn)陣信息的RAM稱為顯示數(shù)據(jù)存儲器,為了在屏幕指定位置顯示某個(gè)圖形或字符,需要將相應(yīng)的點(diǎn)陣信息寫入到DDRAM相應(yīng)的單元中。 圖 2.3.1圖2-4TG12864B液晶屏實(shí)際上是由左右兩塊獨(dú)立的64*64點(diǎn)陣液晶屏拼接而成,每半屏有一個(gè)8*64*8bitDDRAM,左右半屏驅(qū)動電路及存儲分別有片選信號CS1和CS2選擇。顯示點(diǎn)在64*64液晶屏上的位置由行號(063)與列號(063)確定。DDRAM中某個(gè)存儲單元由頁地址(07)和列地址(063)確定。每個(gè)存儲單元的8位二進(jìn)制數(shù)對應(yīng)屏幕上同一列的8個(gè)點(diǎn)陣。其引腳功能說明如表2.3.2所示管腳號管腳引腳說明1 VSS 電源地 2 VDD 電源正極

12、(+5V)。使用可變電阻調(diào)整,通常接地。 3 VO 液晶顯示器對比試調(diào)整端 4 D/I 數(shù)據(jù)/指令選擇:當(dāng)D/I為高電平時(shí),DB0DB7為顯示數(shù)據(jù) 當(dāng)D/I為低電平時(shí),DB0DB7為指令數(shù)據(jù) 5 R/W 讀/寫選擇:當(dāng)R/W為高電平(即R/W=1)時(shí),從液晶模塊讀數(shù)據(jù) 當(dāng)R/W為低電平(即R/W=0)時(shí),將數(shù)據(jù)寫入液晶模塊 6 E 讀寫使能,高電平有效,下降沿鎖定數(shù)據(jù) 714 DB0DB7 雙向數(shù)據(jù)總線的第07位共8位并行數(shù)據(jù)總線 15 CS1 片選擇信號,高電平時(shí)選擇前64列 16 CS2 片選擇信號,高電平時(shí)選擇后64列 17 RST 復(fù)位信號,低電平有效 18 VEE LCD驅(qū)動電源(1

13、0V) 19 BLA 背光電源,LED+ 20 BLK 背光電源,LED- 表2.3.22.4 定時(shí)器在51系列單片機(jī)中有兩個(gè)16位的加法計(jì)數(shù)器,分別叫做T0和T1.它們在計(jì)數(shù)脈沖的作用下,其計(jì)數(shù)值不斷加1,在此過程中,計(jì)數(shù)器可能產(chǎn)生溢出(溢出是指計(jì)數(shù)器的計(jì)數(shù)值全為“1”時(shí),在計(jì)數(shù)脈沖的作用下,全部歸0的動作),產(chǎn)生溢出后,可以向CPU發(fā)出中斷請求。計(jì)數(shù)脈沖可以來源于系統(tǒng)時(shí)鐘或外部電路。如果計(jì)數(shù)脈沖來自系統(tǒng)時(shí)鐘,稱之為”定時(shí)器”,每個(gè)機(jī)器周期(一個(gè)機(jī)器周期由12個(gè)時(shí)鐘周期組成)計(jì)數(shù)器加1;如果計(jì)數(shù)脈沖來自外部電路,稱之為”計(jì)數(shù)器”,此時(shí)單片機(jī)在每個(gè)機(jī)器周期對T0引腳進(jìn)行檢測。定時(shí)器方式寄存器T

14、MOD用于控制定時(shí)器/計(jì)數(shù)器的工作方式,不具有位尋址能力。TMOD寄存器的高4位用于T1的設(shè)定,低4位用于T0的設(shè)定,其定義相同,其中:定時(shí)器/計(jì)數(shù)器T1定時(shí)器/計(jì)數(shù)器T0D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M01) M0、M1:選擇定時(shí)器/計(jì)數(shù)器的工作方式,T0有4種工作方式,T1有三種工作方式,00為方式0,01為方式1,10為方式2,11為方式3,由M1,M2設(shè)定。2) C/¯T:定時(shí)方式/計(jì)數(shù)方式的選擇控制位。C/¯T=0,選定時(shí)方式,計(jì)數(shù)脈沖來自系統(tǒng)時(shí)鐘的12分頻;C/¯T=1,選計(jì)數(shù)方式,計(jì)數(shù)脈沖來自外部電路(對于T

15、0來說,由P3.4引腳輸入,對于T1來說,由P3.5引腳輸入)。3) GATE:位被稱為“門控位”。當(dāng)GATE=0時(shí),只要TR0=1,與門的輸出就為1,計(jì)數(shù)開始。如果GATE為1時(shí),只有TR0=1,并且P3.2-1時(shí),才允許計(jì)數(shù)。其功能可通過圖2.4來分析。 圖2.4 定時(shí)器/計(jì)數(shù)器T0的邏輯示意圖2.5 功能按鍵本設(shè)計(jì)中用到了4個(gè)按鍵,分別為K13,K14,K15,K16,通過按鍵來預(yù)設(shè)冷藏和冷凍溫度值。其定義如下: #define KSET 0xe0 #define KSET_LONG 0xe1 #define KINC 0xd0 #define KDEC 0xb0 #define KDO

16、WN 0x702.6 原理圖開始以filldata充填液晶屏初始化液晶屏,復(fù)位驅(qū)動芯片,打開顯示在液晶屏的cy(03)行,cx(07)列顯示漢字字符點(diǎn)陣列號為8?在左半屏顯示在右半屏顯示求出漢字在屏幕上的起始列設(shè)置漢字的頁,列地址,顯示漢字結(jié)束YN 圖3.2液晶顯示流程圖第三章 系統(tǒng)的軟件的設(shè)計(jì)液晶顯示電冰箱溫控器含有四個(gè)模塊,分別是液晶顯示模塊,溫度傳感器,定時(shí)器走時(shí)和主函數(shù),。3.1 液晶顯示模塊液晶顯示結(jié)果如圖3.1所示,第一行為實(shí)時(shí)時(shí)間,第二行為冷藏溫度,圖3.1第三行為冷凍溫度,第四行為壓縮,開或關(guān),液晶顯示流程圖如上圖3.2。 TG12864B液晶屏顯示4行16*16點(diǎn)陣的漢字,每

17、行顯示8列,如果列號小于4,則顯示在左半屏,否則顯示在右半屏。由于一個(gè)漢字占用2頁,程序首先必須設(shè)置上半個(gè)漢字的頁地址,起始列,并輸出16個(gè)字節(jié)數(shù)據(jù),隨后設(shè)置下半個(gè)漢字的頁地址、起始列地址,并輸出16個(gè)字節(jié)數(shù)據(jù)。3.2 溫度傳感器使用三個(gè)溫度傳感器DS18B20實(shí)現(xiàn)冷藏室,冷凍室和當(dāng)前溫度的調(diào)節(jié)與設(shè)置,并及時(shí)地在液晶屏上顯示出來,如下:圖3.2.1為三個(gè)溫度傳感器。圖3.2.2即為液晶屏上對應(yīng)的三個(gè)溫度的顯示。 圖3.2.1 溫度傳感器 圖3.2.2.3.3 壓縮機(jī)狀態(tài)如果當(dāng)前冷藏室溫度和冷凍室溫度中只要有一個(gè)溫度值大于預(yù)設(shè)的冷藏室,冷凍室溫度時(shí),則壓縮機(jī)狀態(tài)為開,如圖3.3.1和3.3.2圖

18、3.3.1 圖3.3.2如果當(dāng)前冷藏室溫度和冷凍室溫度值都小于預(yù)設(shè)的冷藏室,冷凍室溫度時(shí),則壓縮機(jī)狀態(tài)為關(guān),如圖3.3.3和圖3.3.4。 圖3.3.3 圖3.3.43.4 總流程圖開始初始化液晶屏,在指定位置顯示漢字檢測傳感器的溫度值當(dāng)前溫度<0NY求出絕對值將溫度值轉(zhuǎn)換為“XX.X”格式的字符串,去除高位的“0”字符,在LCD指定位置顯示溫度值定時(shí)器控制當(dāng)前時(shí)間走時(shí),在屏幕指定位置顯示N短按KSET原界面:顯示冷藏冷凍室溫度Y進(jìn)入預(yù)設(shè)冷藏室冷凍室溫度的界面溫度值加1按鍵KINC是否按下YN溫度值減1按鍵KDEC是否按下YN溫度下移按鍵KDOWN是否按下YNY長按KSETN壓縮機(jī)狀態(tài)改

19、變(開或關(guān))N退出溫度設(shè)定結(jié)束第四章 程序調(diào)試與運(yùn)行4.1 調(diào)試方法我們用Keil uVision2以及Proteus 6 Professional這兩個(gè)軟件調(diào)試,在調(diào)試中,我們用Keil uVision2編寫和調(diào)試程序,用Proteus 6 Professional畫電路圖,液晶屏的DI接到單片機(jī)的P34,RW端連接到單片機(jī)的P35,CS選擇屏端連接到單片機(jī)的P33,E端連接到單片機(jī)的P36,DB0DB7顯示數(shù)據(jù)連接到單片的P00P07,溫度傳感器DS18B20的(RST)端接到單片機(jī)的P37口,最終將兩個(gè)軟件連接起來,編譯并全速運(yùn)行,看電路圖上液晶屏的顯示是否正確。一:檢查液晶屏上漢字是否

20、正確顯示,如果液晶屏沒有正確顯示,先檢查電路,如果硬件電路圖連線沒有錯(cuò)誤,然后檢查程序,用斷點(diǎn)或單目進(jìn)行調(diào)試運(yùn)行,看程序中哪一步出現(xiàn)錯(cuò)誤,加以修改。二:調(diào)節(jié)溫度傳感器的溫度,檢查改變后的溫度是否正常顯示,當(dāng)前時(shí)間是否正常走時(shí)。三:短按K12進(jìn)入更改預(yù)設(shè)溫度狀態(tài),K13加數(shù)值,K14減數(shù)值,K15上下移,長按K12鍵退出設(shè)置界面,返回原來界面。檢查壓縮機(jī)狀態(tài)是否根據(jù)溫度的變化而變化。4.2 調(diào)試過程中遇到的問題以及解決方法4.2.1 問題: DS18B20上的溫度不能及時(shí)地顯示在TG12864B液晶屏上。解決方法:首先檢查電路,看是否有因?yàn)榇中倪B錯(cuò)了引腳,檢查后發(fā)現(xiàn),由于每個(gè)DS18B20都有一

21、個(gè)屬于自己的序列號,所以要更改protues仿真圖中的溫度傳感器的序列號,修改后,還是不能正常顯示,然后通過斷點(diǎn)調(diào)試,發(fā)現(xiàn)定義的溫度字節(jié)L寫成了1,改正后就可以了。4.2.2 問題:預(yù)設(shè)的冷藏室溫度5,冷凍室溫度-5,只能顯示一個(gè)5,-5要按KDOWN鍵后才出現(xiàn)。解決方法:缺少語句 LCD_DispDat(no*2+4,10,dbuf1)。 4.2.3 問題:壓縮機(jī)一直處于開的狀態(tài),不能隨著溫度的改變轉(zhuǎn)變?yōu)殛P(guān)。解決方法:檢查相關(guān)語句,通過斷點(diǎn)調(diào)試以及全速運(yùn)行,發(fā)現(xiàn)小數(shù)位沒有正確移位,編譯運(yùn)行,發(fā)現(xiàn)可以正常切換開和關(guān)。4.2.4 問題:實(shí)時(shí)時(shí)間不能正常走時(shí)。解決方法:仔細(xì)觀察圖,其中其它有個(gè)地方

22、總是閃,所以試著更改實(shí)現(xiàn)走時(shí)的時(shí)間位置,后來時(shí)間就能正常走時(shí)了。4.2.5 問題:在顯示界面,時(shí)、分、秒顯示的行和列有問題。解決方法:修改LCD_DispDat2(7,5+col*3,timecol)使之與前面的內(nèi)容相對應(yīng)。4.2.6 問題:按鍵無效解決方法:按鍵無效,硬件沒有問題,那么問題就出現(xiàn)在軟件,按鍵無效,按鍵鍵值沒有正確讀取,單目運(yùn)行,發(fā)現(xiàn)在按鍵的函數(shù)中出現(xiàn)死循環(huán),鍵值根本沒有傳遞,所以按鍵無效,更改函數(shù),可以正常使用。第五章 設(shè)計(jì)小結(jié)這次為期三周的智能電子產(chǎn)品綜合項(xiàng)目實(shí)踐做的是液晶顯示電冰箱溫控器的設(shè)計(jì),它是以單片機(jī)80C51為中心,加上液晶顯示屏TG12864B,溫度傳感器DS1

23、8B20和定時(shí)器構(gòu)成的,在項(xiàng)目中涉及到了液晶顯示,溫度傳遞,定時(shí)中斷等知識,很好地讓我復(fù)習(xí)了以前的知識,溫故而知新,同時(shí)也讓我將理論知識運(yùn)用到實(shí)踐中,領(lǐng)悟到了“紙上得來終覺淺,絕知此事要躬行”的樂趣,讓我獲益匪淺。 第一周,老師讓我們做了幾個(gè)小項(xiàng)目,目的是讓我們回憶,復(fù)習(xí)一下以前學(xué)習(xí)的知識,為做液晶顯示電冰箱溫控器作基礎(chǔ),我通過不斷編寫和調(diào)試漸漸地熟練地掌握了Keil uVision2以及Proteus 6 Professional兩個(gè)軟件的使用,為后面的做項(xiàng)目提供了很多方便。第二周和第三周,老師發(fā)給我們這個(gè)項(xiàng)目的任務(wù)書,要求中最基礎(chǔ)的是在液晶顯示屏上顯示冷藏室、冷凍室溫度,這個(gè)不怎么難,以前

24、學(xué)過,然后就是要把溫度傳感器DS18B20和液晶顯示屏上的冷藏室、冷凍室溫度聯(lián)系起來,實(shí)現(xiàn)冷藏室、冷凍室溫度隨著溫度傳感器的調(diào)節(jié)而改變,在運(yùn)行與調(diào)試中,經(jīng)常出現(xiàn)問題,后來通過對照書上的類似代碼查找錯(cuò)誤,多次修改嘗試,終于成功聯(lián)系起來了。接著是實(shí)時(shí)時(shí)間正常走時(shí),要使用定時(shí)器中斷來實(shí)現(xiàn),最后就是實(shí)現(xiàn)壓縮機(jī)的狀態(tài)開或關(guān)的變換,通過將當(dāng)前冷藏室與冷凍室的溫度與預(yù)設(shè)的溫度值相比較,這個(gè)有一定的難度,自己調(diào)試了好幾次都沒實(shí)現(xiàn),后來請教老師,老師用斷點(diǎn)調(diào)試,發(fā)現(xiàn)我的小數(shù)位沒有正確地移動,修改了之后就可以正確地切換開和關(guān)了。 通過這次的項(xiàng)目實(shí)踐,我學(xué)到了許多知識,例如液晶顯示,溫度傳感器以及定時(shí)器的使用比以前

25、熟練多了,而且在老師的幫助下,學(xué)會了斷點(diǎn)調(diào)試,任何問題只要用這種方法,一步一步地調(diào)試和運(yùn)行,終會找到錯(cuò)誤之處,從而對癥下藥,修改錯(cuò)誤,使我們不用做無用功,節(jié)省了很多時(shí)間,可以說是事半功倍。更重要的是,我認(rèn)識到了,面對遇到的問題和錯(cuò)誤,要冷靜從容地應(yīng)對,不要干著急,或者害怕。老師說的對,遇到問題是好事,可以讓我們在解決問題、修改錯(cuò)誤中獲得知識,提高自己的能力,怕就怕沒有問題,那樣我們就不會去積極地思考和不斷地嘗試,只會坐在這兒無所事事,不會提高。所以在今后的日子里,一定要直視問題,冷靜從容地面對困難,積極地尋找解決問題的方法,這樣才能使自己學(xué)到更多的知識,獲得提高,從而走向成功。附錄一、Main

26、.C 主函數(shù)模塊#include <reg51.h>#define uchar unsigned char#define uint unsigned intextern void LCD_DispIni(void);extern void LCD_DispFill(uchar filldata);extern void LCD_DispChar(uchar cy,uchar cx,char dispdata);extern void LCD_DispStr(uchar cy,uchar cx,char*disp_str);extern void LCD_DispHZ(uchar c

27、y,uchar cx,uchar dispdata);extern void LCD_DispHZStr(uchar cy,uchar cx,uchar*disp_str);extern void gettemp(int temp);extern void readid(uchar * id);extern void InitTimer0(void);uchar dp16=0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9; /小數(shù)部分轉(zhuǎn)換#define KSET 0xe0#define KSET_LONG 0xe1#define KINC 0xd0#define KDEC 0xb

28、0#define KDOWN 0x70uint count;char idata dbuf2=5,-5;uchar idata str6=0,0,0,0,0,0;char cang=5;char dong=-5;uchar time3=11,59,55;uchar buf0=0,1,2,3,4,0xff; /冷藏溫度uchar buf1=0,5,2,3,4,0xff; / 冷凍溫度uchar buf2=6,7,4,0xff; /壓縮uchar buf3=15,16,11,12,0xff; /溫度設(shè)置uchar buf4=10,0xff; /關(guān)uchar buf5=9,0xff; /開uchar

29、 buf6=0,1,14,4,0xff; /冷藏室uchar buf7=0,5,14,4,0xff; /冷凍室void delay(uchar t)uchar i; while(t-) for(i=0;i<250;i+);void LCD_DispDat(uchar cy,uchar cx,char dat) uchar str4; bit zf=0; if(dat<0) zf=1; dat=-dat; str1=dat/10+0x30; /將變量dat轉(zhuǎn)換為2位字符串 str2=dat%10+0x30; str3=0; /字符串用0作為結(jié)束符 if(zf=1) if(str1=&

30、#39;0') str0=' ' str1='-' else str0='-' else if(str0='0')str1=' 'str0=' ' LCD_DispStr(cy,cx,str); /顯示字符串uchar GetKey(void)uchar key; uchar t; if(key=P2&0xf0)=0xf0) return 0xff; for(t=0;t<5;t+) delay(5); if(key=P2&0xf0)=0xf0) return 0xff;

31、 while(P2&0xf0)!=0xf0) /檢測按鍵時(shí)間 delay(5); if(t<250) t+; if(t>100)&&(key=0xE0) return 0xE1; return key;void DispTime(void) LCD_DispDat(0,5,time0); /時(shí) LCD_DispChar(0,8,':'); LCD_DispDat(0,9,time1); /分 LCD_DispChar(0,12,':'); LCD_DispDat(0,13,time2); / 秒void EditTemper(

32、void) /修改溫度uchar no=0; uchar key; LCD_DispDat(no*2+2,10,dbuf0); LCD_DispDat(no*2+4,10,dbuf1); while(1) key=GetKey(); if(key=KINC) /+ dbufno+; LCD_DispDat(no*2+2,10,dbufno); else if(key=KDEC) /- dbufno-; LCD_DispDat(no*2+2,10,dbufno); else if(key=KDOWN) LCD_DispDat(no*2+2,10,dbufno); no=(no+1)&0x

33、01; LCD_DispDat(no*2+2,10,dbufno); else if(key=KSET_LONG) cang=dbuf0; dong=dbuf1; LCD_DispIni(); break; void main(void) uchar str6=0,0,0,0,0,0; uchar i,key;int temp_back2; int temp3; bit zf; LCD_DispIni(); InitTimer0(); while(1) InitTimer0(); DispTime();LCD_DispHZStr(1,0,buf0); LCD_DispHZ(1,7,13);LC

34、D_DispHZStr(2,0,buf1); LCD_DispHZ(2,7,13); LCD_DispHZStr(3,0,buf2); LCD_DispHZ(3,7,13);key=GetKey();if(key=KSET) LCD_DispIni(); LCD_DispHZStr(0,2,buf3); LCD_DispHZStr(1,0,buf6); LCD_DispHZ(1,7,13); LCD_DispHZStr(2,0,buf7);LCD_DispHZ(2,7,13); EditTemper(); gettemp(temp); for(i=0;i<2;i+) temp_backi

35、=tempi;temp_backi=temp_backi>>4; if(temp_back0<cang)&&(temp_back1<dong) LCD_DispHZStr(3,3,buf4); /關(guān) else LCD_DispHZStr(3,3,buf5); /開 for(i=0;i<3;i+) zf=0; if(tempi<0) zf=1; tempi=-tempi; str4=dptempi&0x0f+0x30; tempi=tempi>>4; str0=tempi/100+0x30; tempi=tempi%100;

36、 str1=tempi/10+0x30; str2=tempi%10+0x30; str3='.' if(zf=1) if(str1='0') str0=' ' str1='-' else str0='-' else if(str0='0') if(str1='0') str1=' 'str0=' ' LCD_DispStr(i*2)+3,9,str); 二、TG12864B.C 液晶顯示模塊#include<reg51.h>#includ

37、e<intrins.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned intsbit LCD_RST= P37;sbit DI = P34;sbit RW = P35;sbit CS = P33;sbit EN = P36;sbit RDY = P07;sfr LCD = 0x80;#define LCD_DISPON 0x3f#define LCD_STARTROW 0xc0#define LCD_ADDRSTRY 0xb8#define LCD_ADDRSTRX 0x40#def

38、ine CS1 0#define CS2 1void LCD_WrCmd(bit port,uchar cmd) EN=0; CS=port; DI=0; RW=0; EN=1; LCD=cmd; EN=0;void LCD_WrDat(bit port,uchar wrdata) EN=0; CS=port; DI=1; RW=0; EN=1; LCD=wrdata; EN=0;uchar code ASCII_TAB480 = /0x200x7F之間 ASCII碼對應(yīng)的點(diǎn)陣數(shù)據(jù)表 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0x00, 0

39、x00,0x00, 0x0e, 0x00, 0x0e, 0x00, 0x28, 0xfe, 0x28, 0xfe, 0x28, 0x48, 0x54, 0xfe, 0x54, 0x24, 0x46, 0x26, 0x10, 0xc8, 0xc4, 0x6c, 0x92, 0xaa, 0x44, 0xa0, 0x00, 0x0a, 0x06, 0x00, 0x00,0x00, 0x38, 0x44, 0x82, 0x00,0x00, 0x82, 0x44, 0x38, 0x00,0x28, 0x10, 0x7c, 0x10, 0x28,0x10, 0x10, 0x7c, 0x10, 0x10,0

40、x00, 0xa0, 0x60, 0x00, 0x00,0x10, 0x10, 0x10, 0x10, 0x10,0x00, 0xc0, 0xc0, 0x00, 0x00,0x40, 0x20, 0x10, 0x08, 0x04, 0x7C, 0xA2, 0x92, 0x8A, 0x7C,0x00, 0x84, 0xFE, 0x80, 0x00,0x84, 0xC2, 0xA2, 0x92, 0x8C,0x42, 0x82, 0x8A, 0x96, 0x62,0x30, 0x28, 0x24, 0xFE, 0x20,0x4E, 0x8A, 0x8A, 0x8A, 0x72,0x78, 0x94

41、, 0x92, 0x92, 0x60,0x02, 0xE2, 0x12, 0x0A, 0x06,0x6C, 0x92, 0x92, 0x92, 0x6C, 0x0C, 0x92, 0x92, 0x52, 0x3C,0x00, 0x6C, 0x6C, 0x00, 0x00,0x00, 0xAC, 0x6C, 0x00, 0x00,0x10, 0x28, 0x44, 0x82, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28,0x00, 0x82, 0x44, 0x28, 0x10,0x04, 0x02, 0xA2, 0x12, 0x0C, 0x64, 0x92, 0xF2,

42、 0x82, 0x7C,0xFC, 0x22, 0x22, 0x22, 0xFC,0xFE, 0x92, 0x92, 0x92, 0x6C,0x7C, 0x82, 0x82, 0x82, 0x44,0xFE, 0x82, 0x82, 0x44, 0x38,0xFE, 0x92, 0x92, 0x92, 0x82,0xFE, 0x12, 0x12, 0x12, 0x02,0x7C, 0x82, 0x92, 0x92, 0xF4,0xFE, 0x10, 0x10, 0x10, 0xFE,0x00, 0x82, 0xFE, 0x82, 0x00,0x40, 0x80, 0x82, 0x7E, 0x0

43、2,0xFE, 0x10, 0x28, 0x44, 0x82,0xFE, 0x80, 0x80, 0x80, 0x80,0xFE, 0x04, 0x18, 0x04, 0xFE,0xFE, 0x08, 0x10, 0x20, 0xFE,0x7C, 0x82, 0x82, 0x82, 0x7C, 0xFE, 0x12, 0x12, 0x12, 0x0C,0x7C, 0x82, 0xA2, 0x42, 0xBC,0xFE, 0x12, 0x32, 0x52, 0x8C,0x8C, 0x92, 0x92, 0x92, 0x62,0x02, 0x02, 0xFE, 0x02, 0x02,0x7E, 0

44、x80, 0x80, 0x80, 0x7E,0x3E, 0x40, 0x80, 0x40, 0x3E,0x7E, 0x80, 0x70, 0x80, 0x7E,0xC6, 0x28, 0x10, 0x28, 0xC6,0x0E, 0x10, 0xE0, 0x10, 0x0E,0xC2, 0xA2, 0x92, 0x8A, 0x86,0x00, 0xFE, 0x82, 0x82, 0x00,0x04, 0x08, 0x10, 0x20, 0x40,0x00, 0x82, 0x82, 0xFE, 0x00,0x08, 0x04, 0x02, 0x04, 0x08,0x80, 0x80, 0x80,

45、 0x80, 0x80, 0x00, 0x02, 0x04, 0x08, 0x00,0x40, 0xA8, 0xA8, 0xA8, 0xF0,0xFE, 0x90, 0x88, 0x88, 0x70,0x70, 0x88, 0x88, 0x88, 0x40,0x70, 0x88, 0x88, 0x90, 0xFE,0x70, 0xA8, 0xA8, 0xA8, 0x30,0x10, 0xFC, 0x12, 0x02, 0x04,0x18, 0xA4, 0xA4, 0xA4, 0x7C,0xFE, 0x10, 0x08, 0x08, 0xF0,0x00, 0x88, 0xFA, 0x80, 0x

46、00,0x40, 0x80, 0x88, 0x7A, 0x00,0xFE, 0x20, 0x50, 0x88, 0x00,0x00, 0x82, 0xFE, 0x80, 0x00,0xF8, 0x08, 0x30, 0x08, 0xF8,0xF8, 0x10, 0x08, 0x08, 0xF0,0x70, 0x88, 0x88, 0x88, 0x70, 0xF8, 0x28, 0x28, 0x28, 0x10,0x10, 0x28, 0x28, 0x30, 0xF8,0xF8, 0x10, 0x08, 0x08, 0x10,0x90, 0xA8, 0xA8, 0xA8, 0x40,0x08, 0x7E, 0x88, 0x80, 0x40,0x78, 0x80, 0x80, 0x40, 0xF8,0x38, 0x40, 0x80, 0x40, 0x38,0x78, 0x80, 0x60, 0x80, 0x78,0x88, 0x50, 0x20, 0x50, 0x88,0x18, 0xA0,

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論