單片機數(shù)字溫度計課程設(shè)計報告_第1頁
單片機數(shù)字溫度計課程設(shè)計報告_第2頁
單片機數(shù)字溫度計課程設(shè)計報告_第3頁
單片機數(shù)字溫度計課程設(shè)計報告_第4頁
單片機數(shù)字溫度計課程設(shè)計報告_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)字溫度計課程設(shè)計報告目 錄1.設(shè)計任務(wù). . . .1 1.1 設(shè)計目的. . .1 1.2 設(shè)計指標. . .11.3 設(shè)計要求. .12. 設(shè)計思路與總體框圖. .13. 系統(tǒng)硬件電路的設(shè)計. .23.1主控電路. . .23.2液晶顯示電路. .33.3按鍵電路. . . .33.4報警電路. . .44. 系統(tǒng)仿真設(shè)計.4 4.1仿真原理圖. . . .4 4.2各功能元件的分析.55. 系統(tǒng)軟件設(shè)計.10 5.1 主程序.11 5.2 讀出溫度子程序.11 5.3 溫度轉(zhuǎn)換命令子程序.12 5.4 設(shè)計溫度子程序.12 5.5 1602的溫度顯示.136. 總結(jié)與體會. . . .

2、136 1 總結(jié). . . .136. 2體會. . . .147. 參考文獻. . . .158. 附錄.161. 設(shè)計任務(wù)1.1 設(shè)計目的1. 了解數(shù)數(shù)字溫度計及工作原理。2. 進一步掌握數(shù)字溫度計設(shè)計方法。 3. 進一步掌握各芯片的邏輯功能及使用方法。 4. 進一步掌握keil和仿真軟件的應(yīng)用。5. 進一步熟悉集成電路的引腳安排.。1.2 設(shè)計指標1. 顯示溫度。2. 可以顯示大于零度的溫度也可以顯示小于零度的溫度。3. 具有顯示相應(yīng)環(huán)境溫度的功能,并且具有超出設(shè)定范圍內(nèi)溫度時可以報 警的功能,相應(yīng)環(huán)境可以人為選擇。1.3 設(shè)計要求1. 畫出總體設(shè)計框圖,以說明數(shù)字溫度計由哪些

3、相對獨立的功能模塊組 成,標出各個模塊之間互相聯(lián)系。并以文字對原理作輔助說明。2. 設(shè)計各個功能模塊的電路圖,加上原理說明。3. 選擇合適的元器件,在面包板上接線驗證、調(diào)試各個功能模塊的電路,在接線驗證時設(shè)計、選擇合適的輸入信號和輸出方式,在確定電路充分正確性同時,輸入信號和輸出方式要便于電路的測試和故障排除。4. 在驗證各個功能模塊基礎(chǔ)上,對整個電路的元器件和布線進行合理布局,進行整個數(shù)字溫度電路的接線調(diào)試。2.設(shè)計思路與總體框圖.數(shù)字溫度計由主控制器(單片機)、溫度傳感器(DS18B20)、顯示器(LCD1602)、獨立按鍵和報警電路組成,溫度傳感器所感應(yīng)的溫

4、度信號經(jīng)過其數(shù)據(jù)傳輸引腳傳送給單片機,單片機將所接收到的溫度信號經(jīng)過處理,將其送至顯示器LCD1602顯示,并且能夠通過獨立按鍵設(shè)置溫度報警值,若溫度處于報警上限和下限之外,報警電路工作。圖1所示為數(shù)字溫度計的一般結(jié)構(gòu)框圖:報警溫度調(diào)整鍵 LCD1602顯示 STC90C51 主 控 制 器 蜂鳴器,指示燈單片機時鐘振蕩 DS18B20傳感器 圖1 數(shù)字溫度計結(jié)構(gòu)框圖3. 系統(tǒng)硬件電路的設(shè)計3.1 主控電路單片機STC90C51具有低電壓供電和體積小等特點,四個端口同時使用以滿足電路系統(tǒng)的設(shè)計需要,很適合便攜手持式產(chǎn)品的設(shè)計使用系統(tǒng)可用二節(jié)電池供電。晶振采用12MHZ。 圖2 主控電路 圖3

5、晶振電路 3.2 溫度顯示電路采用液晶顯示屏LCD1602顯示,第一行顯示“18B20 OK TL”和報警下限值,第二行顯示實時溫度以及報警上限值,并且能夠顯示負溫度值。用P0口進行LCD1602的數(shù)據(jù)寫操作,P2.5P2.7口進行LCD1602的命令控制端口。電路圖如下: 圖4 溫度顯示電路 3.3 按鍵電路本系統(tǒng)一共設(shè)置了四個按鍵,k1鍵設(shè)置溫度下限加,k2鍵設(shè)置溫度下限減k3鍵設(shè)置溫度上限加,k4鍵設(shè)置溫度上限減。 圖5 按鍵電路3.4 報警電路本設(shè)計采用蜂鳴器和LED燈組成報警電路,電路圖如下: 圖6 報警電路4系統(tǒng)設(shè)計仿真4.1仿真原理圖根據(jù)數(shù)字溫度計的一般結(jié)構(gòu)框圖,我們通過查閱資料

6、書和上網(wǎng)查詢,了解不同元件的功能和實用性,考慮性價比后,制作出的數(shù)字溫度計的仿真電路原理圖,如圖7所示。 圖7 數(shù)字溫度計仿真電路原理圖4.2各功能元件的分析2設(shè)計原理圖中各功能元件的引腳圖的分析如下所示:1DS18B20:DS18B20溫度傳感器是美國DALLAS半導(dǎo)體公司最新推出的一種改進型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9-12位的數(shù)字值讀數(shù)方式。DS18B20的性能特點如下:(1)獨特的單線接口僅需要一個端口引腳進行通信,DS18B20在與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通訊。(

7、2)DS18B20支持多點組網(wǎng)功能,多個DS18B20可以并聯(lián)在惟一的三線上,實現(xiàn)多點組網(wǎng)測溫;(3)無須外部器件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi);(4)可通過數(shù)據(jù)線供電,電壓范圍為3.0-5.5;(5)零待機功耗;(6)溫度以9或12位數(shù)字,對應(yīng)的可分辨溫度分別為0.5、0.25、0.125和0.0625,可實現(xiàn)高精度測溫;(7)用戶可定義報警設(shè)置;(8)報警搜索命令識別并標志超過程序限定溫度(溫度報警條件)的器件;(9)負電壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作;(10)測量結(jié)果直接輸出數(shù)字溫度信號,以"一線總線"串行傳送

8、給CPU,同時可傳送CRC校驗碼,具有極強的抗干擾糾錯能力DS18B20采用3腳PR35封裝或8腳SOIC封裝,其引腳排列及內(nèi)部結(jié)構(gòu)框: 圖8 DS18B20引腳排列圖 圖9 內(nèi)部結(jié)構(gòu)框圖預(yù)置斜率累加器比較低溫度系數(shù)振蕩器計數(shù)器1溫度寄存器Tx預(yù)置=0高溫度系數(shù)振蕩器-0計數(shù)器2T1加1停止T2 圖 10 DS18B20測溫原理圖64位ROM的結(jié)構(gòu)開始8位是產(chǎn)品類型的編號,接著是每個器件的惟一的序號,共有48位,最后8位是前面56位的CRC檢驗碼,這也是多個DS18B20可以采用一線進行通信的原因。溫度報警觸發(fā)器TH和TL,可通過軟件寫入戶報警上下限。DS18B20溫度傳感器的內(nèi)部存儲器還包括

9、一個高速暫存RAM和一個非易失性的可電擦除的EERAM。高速暫存RAM的結(jié)構(gòu)為8字節(jié)的存儲器,結(jié)構(gòu)如圖4所示。頭2個字節(jié)包含測得的溫度信息,第3和第4字節(jié)TH和TL的拷貝,是易失的,每次上電復(fù)位時被刷新。第5個字節(jié),為配置寄存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20工作時寄存器中的分辨率轉(zhuǎn)換為相應(yīng)精度的溫度數(shù)值。該字節(jié)各位的定義如圖5所示。低5位一直為1,TM是工作模式位,用于設(shè)置DS18B20在工作模式還是在測試模式,DS18B20出廠時該位被設(shè)置為0,用戶不要去改動,R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),來設(shè)置分辨率。溫度 LSB溫度 MSBTH用戶字節(jié)1TL用戶字節(jié)2配置寄

10、存器保留保留保留CRCTMR1R011111圖11 DS18B20的字節(jié)定義 DS18B20的分辨率定義如表1所示表1 分辨率設(shè)置表R0R1分辨率最大溫度轉(zhuǎn)移時間009位96.75ms0110位187.5ms1011位375ms1112位750ms由表1可見,DS18B20溫度轉(zhuǎn)換的時間比較長,而且分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時間越長。因此,在實際應(yīng)用中要將分辨率和轉(zhuǎn)換時間權(quán)衡考慮。主機控制DS18B20完成溫度轉(zhuǎn)換過程是:每一次讀寫之前都要對DS18B20進行復(fù)位,即將數(shù)據(jù)總線下拉500us,然后釋放,DS18B20收到信號后等待16-60us左右,之后發(fā)出60-240us的存在低脈沖,

11、主CPU收到此此信號表示復(fù)位成功;復(fù)位成功后發(fā)送一條ROM指令,然后發(fā)送RAM指令,這樣才能對DS18B20進行預(yù)訂的讀寫操作。表2 ROM指令集指令約定代碼功能讀ROM33H讀DS18B20中的編碼符合ROM55H發(fā)出此命令后,接著發(fā)出64位ROM編碼,訪問單線總線上與該編輯相對應(yīng)的DS18B20使之做出響應(yīng),為下一步對該DS18B20的讀寫作準備搜索ROM0F0H用于確定掛接在同一總線上的DS18B20個數(shù)和識別64位ROM地址,為操作各器件作準備跳過ROM0CCH忽略64位ROM地址,直接向DS18B20發(fā)送溫度變換指令告警搜索命令0ECH執(zhí)行后,只有溫度跳過設(shè)定值上限或下限的片子才能做

12、出反應(yīng)表3 RAM指令集指令約定代碼功能溫度轉(zhuǎn)換44H啟動DS18B20進行溫度轉(zhuǎn)換讀暫存器0BEH讀暫存器9個字節(jié)內(nèi)容寫暫存器4EH將數(shù)據(jù)寫入暫存器的TH、TL字節(jié)復(fù)制暫存器48H把暫存器的TH、TL字節(jié)寫到E2RAM中重調(diào)E2RAM0B8H把E2RAM中的TH、TL字節(jié)寫到暫存器TH、TL字節(jié)讀供電方式0B4H啟動DS18B20發(fā)送電源供電方式的信號給主CPUDS18B20的測溫原理是這這樣的,器件中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號送給減法計數(shù)器1;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所產(chǎn)生的信號作為減法計數(shù)器2的脈沖輸入。器件中還有一個計數(shù)門,

13、當計數(shù)門打開時,DS18B20就對低溫度系數(shù)振蕩器產(chǎn)生的時鐘脈沖進行計數(shù)進而完成溫度測量。計數(shù)門的開啟時間由高溫度系數(shù)振蕩器來決定,每次測量前,首先將最低溫所對應(yīng)的一個基數(shù)分別置入減法計數(shù)器1、溫度寄存器中,計數(shù)器1和溫度寄存器被預(yù)置在最低溫所對應(yīng)的一個基數(shù)值。減法計數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進行減法計數(shù),當減法計數(shù)器1的預(yù)置值減到0時,溫度寄存器的值將加1,減法計數(shù)器1的預(yù)置將重新被裝入,減法計數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進行計數(shù),如此循環(huán)直到減法計數(shù)器計數(shù)到0時,停止溫度寄存器的累加,此時溫度寄存器中的數(shù)值就是所測溫度值。其輸出用于修正減法計數(shù)器的預(yù)置值,只要計數(shù)

14、器門仍未關(guān)閉就重復(fù)上述過程,直到溫度寄存器值大致被測溫度值。 圖 12 測溫電路圖2. LCD1602:工業(yè)字符型液晶,能夠同時顯示16x02即32個字符(16列2行)。1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊。它由若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因為如此所以它不能很好地顯示圖形(用自定義CGRAM,顯示效果也不好)。1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個字符液晶模塊(顯示字符和數(shù)字)。1602芯片

15、的接口信號說明如下表:1602芯片的接口信號說明5 系統(tǒng)軟件設(shè)計整個系統(tǒng)是由硬件配合軟件來實現(xiàn)的,在硬件確定后,編寫的軟件的功能也就基本定型了。所以軟件的功能大致可分為兩個部分:一是監(jiān)控,這也是系統(tǒng)的核心部分,二是執(zhí)行部分,完成各個具體的功能。系統(tǒng)程序主要包括主程序,讀出溫度子程序,溫度轉(zhuǎn)換命令子程序,計算溫度子程序,顯示數(shù)據(jù)刷新子程序等。5.1主程序主程序的主要功能是負責溫度的實時顯示、讀出并處理DS18B20的測量的當前溫度值,溫度測量每1s進行一次。這樣可以在一秒之內(nèi)測量一次被測溫度,其程序流程見圖13所示。Y發(fā)DS18B20復(fù)位命令發(fā)跳過ROM命令發(fā)讀取溫度命令讀取操作,CRC校驗9字

16、節(jié)完?CRC校驗正?確?移入溫度暫存器結(jié)束NNY 開始 液晶初始化 調(diào)用按鍵函數(shù), 液晶顯示函數(shù)判斷溫度值與設(shè)定報警值大小 大于TH或 N 者小于TL Y 報警 結(jié)束 圖 13 主程序流程圖 圖 14 讀溫度流程圖5.2讀出溫度子程序讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時需進行CRC校驗,校驗有錯時不進行溫度數(shù)據(jù)的改寫。其程序流程圖如圖15示:發(fā)DS18B20復(fù)位命令發(fā)跳過ROM命令發(fā)溫度轉(zhuǎn)換開始命令 結(jié)束 圖 15 溫度轉(zhuǎn)換流程圖5.3溫度轉(zhuǎn)換命令子程序溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令,當采用12位分辨率時轉(zhuǎn)換時間約為750ms,在本程序設(shè)計中采用1s顯示程序延時

17、法等待轉(zhuǎn)換的完成。溫度轉(zhuǎn)換命令子程序流程圖如上圖,圖13所示5.4 計算溫度子程序計算溫度子程序?qū)AM中讀取值進行BCD碼的轉(zhuǎn)換運算,并進行溫度值正負的判定,其程序流程圖如圖16所示。 開始 溫度零下?溫度值取補碼置“”標志 計算小數(shù)位溫度 計算整數(shù)位溫度 結(jié)束置“+”標志NY 圖 16 計算溫度溫度流程圖 5.5 1602的液晶顯示 圖 17 1602液晶顯示流程圖6.總結(jié)與體會6.1 總結(jié)1.根據(jù)原理和芯片引腳圖,分功能設(shè)計原理圖,并根據(jù)接線順序分步驟驗證。2.容易出現(xiàn)故障為接觸不良。a) 集成塊引腳方向預(yù)先彎好對準面包板的金屬孔,再小心插入。b) 導(dǎo)線的剝線長度與面

18、包板的厚度相適應(yīng)(比板的厚度稍短)。c) 導(dǎo)線的裸線部分不要露在板的上面,以防短路。d) 導(dǎo)線要插入金屬孔中央。3.注意芯片的控制引腳必須正確接好4.檢查故障時除測試輸入、輸出信號外,要注意電源、接地和控制引腳。5.要注意芯片引腳上的信號與面包板上插座上信號是否一致(集成塊引腳與面包板常接觸不良)。6.接校時電路時可接模擬信號輸入(如1Hz和2Hz)測試輸出信號的切換正確后,再將秒進位和分進位信號接到校時電路,再接校時電路輸出到分計數(shù)器和時計數(shù)器。從較時電路接入信號時,必須將原進位信號拔掉。6.2 體會經(jīng)過將近兩周的單片機課程設(shè)計,終于完成了我們的數(shù)字溫度計課程設(shè)計,雖然課程設(shè)計做的

19、不是特別好,但從心底里說,還是高興的,因為我們收獲了很多很多,這些在平常的學(xué)習當中是收獲不到的,但高興之余不得不靜下來深思! 在本次課程設(shè)計的過程中,我們發(fā)現(xiàn)很多的問題,雖然以前還做過類似的課程設(shè)計,但這次設(shè)計真的讓我學(xué)到了很多、長進了很多,單片機課程設(shè)計的重點就在于軟件算法的設(shè)計,需要有很巧妙的程序算法,雖然以前寫過一些程序,但覺的要寫好一個程序并不是一件簡單的事,所以我們只能不斷的調(diào)試不斷的修改才能把程寫的更好。所以得出結(jié)論是:有好多的東西,只有我們?nèi)ピ囍隽耍拍苷嬲恼莆?,只學(xué)習理論有些東西是很難理解的,更談不上掌握,實踐才是硬道理,實踐是檢驗真理的唯一標準。通過這次的課程設(shè)計,我們真

20、正的意識到,在以后的學(xué)習中,要理論聯(lián)系實際,把我們所學(xué)的理論知識用到實際當中,這樣我們才能更好的理解、掌握這些知識,學(xué)習單機片機更是如此,程序只有在經(jīng)常的寫與讀的過程中才能提高,這就是我在這次課程設(shè)計中的最大收獲。通過這次對數(shù)字溫度計的設(shè)計與制作,讓我們了解了設(shè)計電路的程序,也讓我們了解了關(guān)于數(shù)字溫度計的原理與設(shè)計理念,要設(shè)計一個電路總要先用仿真仿真成功之后才實際接線的。但是最后的成品卻不一定與仿真時完全一樣,因為,在實際接線中有著各種各樣的條件制約著。并且,在仿真中無法成功的電路接法,在實際中因為芯片本身的特性而能夠成功。所以,在設(shè)計時應(yīng)考慮兩者的差異,從中找出最適合的設(shè)計方法。 通過這次學(xué)

21、習,讓我們對各種電路都有了大概的了解,所以說,坐而言不如立而行,對于這些電路還是應(yīng)該自己動手實際操作才會有深刻理解。 當然在這個過程中我們還會遇到很多其它的問題,這些問題我們也不是那么輕易的就能夠解決的,此時我們就會去翻閱相關(guān)資料,或者是問同學(xué)、問老師,我們的同學(xué)和老師那一個個真的事知無不答的,這樣我們就能很快的把問題給決絕掉了,那種感覺真的讓人很舒暢,這也讓我們明白了一件事,在學(xué)習中我們?nèi)鄙俨涣送瑢W(xué)、老師的幫助,他們能夠很快的解決一些問題。 從這次的課程設(shè)計中,我真正的意識到,在以后的學(xué)習中,要理論聯(lián)系實際,把我們所學(xué)的理論知識應(yīng)用到實際當中,學(xué)習單機片機更是如此,程序只有在經(jīng)常的寫與讀的過

22、程中才能提高,這就是我在這次課程設(shè)計中的最大收獲。7參考文獻 1 單片機原理及應(yīng)用楊恢先、黃輝光主編M湘潭大學(xué)出版社2 電子技術(shù)基礎(chǔ)(第五版)華中科技大學(xué)電子技術(shù)課程組編M康華光主編,陳大欽、張林副主編,高等教育出版社3單片機課程指導(dǎo)樓然苗 、李光飛編著,北京航空航天大學(xué)大學(xué)出版社 4 51單片機C語言教程 郭天祥 編著8.附錄:#include<reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar temp,num,k1num;uchar code t

23、able="18B20 OK TL"char shangxiaxian2=-10,10;char a;sbit k1=P10;sbit k2=P11;sbit k3=P12;sbit k4=P13;sbit LCD_RW=P25;sbit lcdrs=P26;sbit lcden=P27;sbit Beep=P30;sbit led=P31;sbit DQ=P37; /*液晶顯示屏的延時程序*/void delay(uint z) uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);/*溫度傳感器的延時程序*/ void Dela

24、y1(uint y) uint x;for( ; y>0; y-)for(x=110; x>0; x-); /*蜂鳴器,18b20寫數(shù)據(jù)函數(shù)的延時程序*/ void delay2(uint a) while(-a); /*溫度傳感器初始化函數(shù)*/void init_18b20() DQ=1; delay2(8); DQ=0; delay2(90); DQ=1; _nop_(); _nop_(); delay2(100); DQ=1; /*溫度傳感器寫字節(jié)命令函數(shù)*/void Ds18b20xiezijie(uchar date) uchar i; for(i=0;i<8;i+

25、) DQ=0; /在寫入一位數(shù)據(jù)之前先把總線拉低 DQ=date&0x01; /寫入一個數(shù)據(jù),從最低位開始寫 delay2(5); /延時一下 DQ=1;/將總線拉高,等待第二位數(shù)據(jù)寫入 date>>=1; /右移一位,寫入第二位數(shù)據(jù) /*溫度傳感器讀字節(jié)命令函數(shù)*/uchar Ds18b20duzijie()uchar i,dat=0; DQ=1; _nop_(); for(i=0;i<8;i+) DQ=0; /先將總線拉低 _nop_(); _nop_(); dat>>=1; DQ=1; /然后釋放總線 _nop_(); /延時一下等待數(shù)據(jù)穩(wěn)定 _no

26、p_(); if(DQ) dat|=0x80; /讀取數(shù)據(jù),從最低位開始讀取 delay2(30); /讀取完之后等待一下,再接著讀取下一個數(shù) DQ=1; return dat; /返回所讀到的溫度 /*寫溫度轉(zhuǎn)換命令函數(shù)*/void Ds18b20ChangTemp() init_18b20();Delay1(1);Ds18b20xiezijie(0xcc);/跳過ROM操作命令 Ds18b20xiezijie(0x44); /溫度轉(zhuǎn)換命令 /*讀溫度命令函數(shù)*/void Ds18b20ReadTempCom() init_18b20();Delay1(1);Ds18b20xiezijie(

27、0xcc); /跳過ROM操作命令Ds18b20xiezijie(0xbe); /發(fā)送讀取溫度命令 /*讀溫度函數(shù)*/int Ds18b20ReadTemp() int temp = 0;uchar tmh, tml;Ds18b20ChangTemp(); /先寫入轉(zhuǎn)換命令Ds18b20ReadTempCom();/然后等待轉(zhuǎn)換完后發(fā)送讀取溫度命令tml = Ds18b20duzijie();/讀取溫度值共16位,先讀低字節(jié)tmh = Ds18b20duzijie();/再讀高字節(jié)temp = tmh;temp <<= 8;temp |= tml;return temp; /*液晶

28、屏寫指令函數(shù)*/void write_com(uchar com) lcdrs=0;lcden=0;LCD_RW=0;P0=com;delay(5);lcden=1;delay(5);lcden=0; /*液晶屏寫指令函數(shù)*/void write_com2(int com) lcdrs=0;LCD_RW=0;lcden=0;delay(5);P0=com;delay(5);lcden=1;delay(5);lcden=0;P0=(com&0x0f)<<4;delay(5);lcden=1;delay(5);lcden=0;/*液晶屏寫數(shù)據(jù)命令函數(shù)*/void write_d

29、ata(char date)lcdrs=1;LCD_RW=0;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;lcdrs=1;LCD_RW=0;lcden=0;P0=(date&0x0f)<<4;/一次寫入4位delay(5);lcden=1;delay(5);lcden=0;/*液晶屏初始化函數(shù)*/void init() lcden=0; write_com(0x28); write_com2(0x28);write_com2(0x0c);write_com2(0x06);write_com2(0x01);write_c

30、om2(0X80); /*報警上下線處理函數(shù)*/ void write_hl(uchar add,char date) uchar bai,shi,ge; if(date<0)date=-date; bai=date/100; shi=date%100/10; ge=date%100%10; write_com2(0x80+0x40+add); write_data(0x30+bai); write_data(0x30+shi); write_data(0x30+ge); /*報警上下線處理函數(shù)*/void write_hl1(uchar add,char date) uchar bai

31、,shi,ge; if(date<0)date=-date; bai=date/100; shi=date%100/10; ge=date%100%10; write_com2(0x80+add); write_data(0x30+bai); write_data(0x30+shi); write_data(0x30+ge); /*液晶屏顯示函數(shù),顯示溫度值*/void Lcdxianshi(int temp) uchar sz4=0,0,0,0; unsigned char datas = 0, 0, 0, 0, 0; /定義數(shù)組float tp; if(temp< 0)/當溫度

32、值為負數(shù) write_com2(0x80+0x40);/寫地址 80表示初始地址 write_data('-'); /顯示負temp=temp-1;/因為讀取的溫度是實際溫度的補碼,所以減1,再取反求出原碼temp=temp;tp=temp;temp=tp*0.0625*100+0.5; else write_com2(0x80+0x40);/寫地址80表示初始地址 write_data('+'); /顯示正tp=temp; /因為數(shù)據(jù)處理有小數(shù)點所以將溫度賦給一個浮點型變量 如果溫度是正的那么,那么正數(shù)的原碼就是補碼它本身temp=tp*0.0625*100+

33、0.5;datas0 = temp / 10000; /百位datas1 = temp % 10000 / 1000;/十位datas2 = temp % 1000 / 100;/個位datas3 = temp % 100 / 10; /小數(shù)write_com2(0x80+0x40+1); write_data('0'+datas0); write_com2(0x80+0x40+2);write_data('0'+datas1); write_com2(0x80+0x40+3); write_data('0'+datas2); write_com

34、2(0x80+0x40+4); write_data('.'); write_com2(0x80+0x40+5);write_data('0'+datas3); a=(datas0*100+datas1*10+datas2); /用于溫度的比較值 write_hl(13,shangxiaxian1);/顯示報警上限 write_hl1(13,shangxiaxian0); /顯示報警下限 /*按鍵處理函數(shù),用于設(shè)置溫度報警值*/void key() if(k1=0) delay(5); if(k1=0) /溫度報警下限加 shangxiaxian0+; if(s

35、hangxiaxian0=127) shangxiaxian0=126; write_hl1(13, shangxiaxian0); if(k2=0) /溫度報警下限減 delay(5); if(k2=0) shangxiaxian0-; if(shangxiaxian0=-56) shangxiaxian0=-55; write_hl1(13, shangxiaxian0); if(k3=0)/溫度報警上限加 delay(5); if(k3=0) shangxiaxian1+; if(shangxiaxian1=127) shangxiaxian1=126; write_hl(13, shangxiaxian1); if(k4=0)/溫度報警上限減 delay(5); if(k4=0) shangxiaxian1-

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論