




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告目錄1. 設(shè)計(jì)任務(wù) . . .11.1設(shè)計(jì)目的 . . . .11.2設(shè)計(jì)指標(biāo) . . . .11.3設(shè)計(jì)要求 .12.設(shè)計(jì)思路與總體框圖. .13.系統(tǒng)硬件電路的設(shè)計(jì). .23.1主控電路 . .23.2液晶顯示電路 .33.3按鍵電路 . . .33.4報(bào)警電路 . .44.系統(tǒng)仿真設(shè)計(jì) .44.1仿真原理圖 . . .44.2各功能元件的分析 .55.系統(tǒng)軟件設(shè)計(jì) .105.1主程序 .115.2讀出溫度子程序 .115.3溫度轉(zhuǎn)換命令子程序 .125.4設(shè)計(jì)溫度子程序 .125.5 1602 的溫度顯示 .136.總結(jié)與體會 . . .136 1總結(jié) . . .1
2、36.2 體會 . . .147.參考文獻(xiàn) . . .158.附錄 .161. 設(shè)計(jì)任務(wù)1數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告1.1 設(shè)計(jì)目的1. 了解數(shù)數(shù)字溫度計(jì)及工作原理。2. 進(jìn)一步掌握數(shù)字溫度計(jì)設(shè)計(jì)方法。3. 進(jìn)一步掌握各芯片的邏輯功能及使用方法。4. 進(jìn)一步掌握 keil 和仿真軟件的應(yīng)用。5. 進(jìn)一步熟悉集成電路的引腳安排 . 。1.2 設(shè)計(jì)指標(biāo)1. 顯示溫度。2. 可以顯示大于零度的溫度也可以顯示小于零度的溫度。3. 具有顯示相應(yīng)環(huán)境溫度的功能,并且具有超出設(shè)定范圍內(nèi)溫度時可以報(bào)警的功能,相應(yīng)環(huán)境可以人為選擇。1.3 設(shè)計(jì)要求1. 畫出總體設(shè)計(jì)框圖,以說明數(shù)字溫度計(jì)由哪些相對獨(dú)立的功能模塊組成
3、,標(biāo)出各個模塊之間互相聯(lián)系。并以文字對原理作輔助說明。2. 設(shè)計(jì)各個功能模塊的電路圖,加上原理說明。3. 選擇合適的元器件,在面包板上接線驗(yàn)證、調(diào)試各個功能模塊的電路,在接線驗(yàn)證時設(shè)計(jì)、 選擇合適的輸入信號和輸出方式, 在確定電路充分正確性同時,輸入信號和輸出方式要便于電路的測試和故障排除。4. 在驗(yàn)證各個功能模塊基礎(chǔ)上,對整個電路的元器件和布線進(jìn)行合理布局,進(jìn)行整個數(shù)字溫度電路的接線調(diào)試。2. 設(shè)計(jì)思路與總體框圖 .數(shù)字溫度計(jì)由主控制器(單片機(jī)) 、溫度傳感器 (DS18B20)、顯示器(LCD1602)、獨(dú)立按鍵和報(bào)警電路組成,溫度傳感器所感應(yīng)的溫度信號經(jīng)過其數(shù)據(jù)傳輸引腳傳送給單片機(jī), 單
4、片機(jī)將所接收到的溫度信號經(jīng)過處理, 將其送至顯示器 LCD1602顯示,并且能夠通過獨(dú)立按鍵設(shè)置溫度報(bào)警值, 若溫度處于報(bào)警上限和下限之外,報(bào)警電路工作。圖 1 所示為數(shù)字溫度計(jì)的一般結(jié)構(gòu)框圖:LCD1602 顯示報(bào)警溫度調(diào)STC90C51整鍵主控2制器數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告蜂鳴器,指示燈單片機(jī)時鐘振蕩DS18B20 傳感器圖 1數(shù)字溫度計(jì)結(jié)構(gòu)框圖3. 系統(tǒng)硬件電路的設(shè)計(jì)3.1 主控電路單片機(jī) STC90C51具有低電壓供電和體積小等特點(diǎn),四個端口同時使用以滿足電路系統(tǒng)的設(shè)計(jì)需要, 很適合便攜手持式產(chǎn)品的設(shè)計(jì)使用系統(tǒng)可用二節(jié)電池供電。晶振采用 12MHZ。圖 2主控電路3數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告
5、圖 3晶振電路3.2 溫度顯示電路采用液晶顯示屏LCD1602顯示,第一行顯示“ 18B20 OKTL”和報(bào)警下限值 ,第二行顯示實(shí)時溫度以及報(bào)警上限值,并且能夠顯示負(fù)溫度值。用P0口進(jìn)行LCD1602的數(shù)據(jù)寫操作, P2.5P2.7 口進(jìn)行 LCD1602的命令控制端口。電路圖如下:圖 4溫度顯示電路3.3按鍵電路本系統(tǒng)一共設(shè)置了四個按鍵, k1 鍵設(shè)置溫度下限加, k2 鍵設(shè)置溫度下限減 k3 鍵設(shè)置溫度上限加, k4 鍵設(shè)置溫度上限減。4數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告圖 5按鍵電路3.4 報(bào)警電路本設(shè)計(jì)采用蜂鳴器和LED燈組成報(bào)警電路,電路圖如下:圖6報(bào)警電路4系統(tǒng)設(shè)計(jì)仿真4.1 仿真原理圖根據(jù)
6、數(shù)字溫度計(jì)的一般結(jié)構(gòu)框圖,我們通過查閱資料書和上網(wǎng)查詢,了解不同元件的功能和實(shí)用性, 考慮性價(jià)比后,制作出的數(shù)字溫度計(jì)的仿真電路原理圖,如圖 7 所示。5數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告圖 7數(shù)字溫度計(jì)仿真電路原理圖4.2 各功能元件的分析 2設(shè)計(jì)原理圖中各功能元件的引腳圖的分析如下所示:1 DS18B20:DS18B20溫度傳感器是美國DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度, 并且可根據(jù)實(shí)際要求通過簡單的編程實(shí)現(xiàn) 9-12 位的數(shù)字值讀數(shù)方式。 DS18B20的性能特點(diǎn)如下:(1)獨(dú)特的單線接口僅需要一個端口引腳進(jìn)行通信,DS18
7、B20在與微處理器連接時僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊。(2)DS18B20支持多點(diǎn)組網(wǎng)功能,多個DS18B20可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)測溫;(3)無須外部器件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi);6數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告(4)可通過數(shù)據(jù)線供電,電壓范圍為3.0-5.5 ;(5)零待機(jī)功耗;(6)溫度以 9或 12位數(shù)字,對應(yīng)的可分辨溫度分別為0.5 、0.25 、0.125 和 0.0625 ,可實(shí)現(xiàn)高精度測溫;(7)用戶可定義報(bào)警設(shè)置;(8)報(bào)警搜索命令識別并標(biāo)志超過程序限定溫度(溫度報(bào)警條件)的器件;(9)負(fù)電壓特性,電源極性接反
8、時,溫度計(jì)不會因發(fā)熱而燒毀,但不能正常工作;(10)測量結(jié)果直接輸出數(shù)字溫度信號,以" 一線總線 " 串行傳送給 CPU,同時可傳送 CRC校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯能力DS18B20采用 3腳PR35封裝或 8腳 SOIC封裝,其引腳排列及內(nèi)部結(jié)構(gòu)框:圖 8DS18B20 引腳排列圖圖 9 內(nèi)部結(jié)構(gòu)框圖7數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告預(yù)置斜率累加器低溫度系數(shù)振蕩計(jì)數(shù)器 1比較T1預(yù)置Tx加 1高溫度系數(shù)振蕩=0溫度寄存器停止計(jì)數(shù)器 2-0T2 圖10DS18B20 測溫原理圖64 位 ROM的結(jié)構(gòu)開始 8 位是產(chǎn)品類型的編號,接著是每個器件的惟一的序號,共有 48 位,最后 8
9、 位是前面 56 位的 CRC檢驗(yàn)碼,這也是多個 DS18B20可以采用一線進(jìn)行通信的原因。 溫度報(bào)警觸發(fā)器 TH和 TL,可通過軟件寫入戶報(bào)警上下限。DS18B20溫度傳感器的內(nèi)部存儲器還包括一個高速暫存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 所示。低
10、5 位一直為 1,TM是工作模式位,用于設(shè)置 DS18B20在工作模式還是在測試模式, DS18B20出廠時該位被設(shè)置為 0,用戶不要去改動, R1 和 R0 決定溫度轉(zhuǎn)換的精度位數(shù),來設(shè)置分辨率。8數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告溫度 LSB溫度 MSBTH用戶字節(jié) 1TL 用戶字節(jié) 2配置寄存器保留保留保留CRCTMR1R011111圖 11 DS18B20的字節(jié)定義DS18B20的分辨率定義如表1 所示表 1分辨率設(shè)置表R0R1分辨率最大溫度轉(zhuǎn)移時間009 位96.75ms0110 位187.5ms1011 位375ms1112 位750ms由表 1 可見, DS18B20溫度轉(zhuǎn)換的時間比較長,而
11、且分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時間越長。因此,在實(shí)際應(yīng)用中要將分辨率和轉(zhuǎn)換時間權(quán)衡考慮。主機(jī)控制 DS18B20完成溫度轉(zhuǎn)換過程是: 每一次讀寫之前都要對 DS18B20進(jìn)行復(fù)位,即將數(shù)據(jù)總線下拉 500us,然后釋放, DS18B20收到信號后等待 16-60us 左右,之后發(fā)出 60-240us 的存在低脈沖,主 CPU收到此此信號表示復(fù)位成功;復(fù)位成功后發(fā)送一條 ROM指令,然后發(fā)送 RAM指令,這樣才能對 DS18B20進(jìn)行預(yù)訂的讀寫操作。表 2ROM指令集指令約定代碼功能讀 ROM33H讀 DS18B20中的編碼發(fā)出此命令后,接著發(fā)出64 位 ROM編碼,訪問單線總線符合 ROM
12、55H上與該編輯相對應(yīng)的DS18B20使之做出響應(yīng),為下一步9數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告對該 DS18B20的讀寫作準(zhǔn)備搜索 ROM0F0H用于確定掛接在同一總線上的DS18B20個數(shù)和識別 64 位ROM地址,為操作各器件作準(zhǔn)備跳過 ROM0CCH忽略 64 位 ROM地址,直接向 DS18B20發(fā)送溫度變換指令告警搜索0ECH執(zhí)行后,只有溫度跳過設(shè)定值上限或下限的片子才能做命令出反應(yīng)表 3RAM指令集指令約定代碼功能溫度轉(zhuǎn)換44H啟動 DS18B20進(jìn)行溫度轉(zhuǎn)換讀暫存器0BEH讀暫存器 9 個字節(jié)內(nèi)容寫暫存器4EH將數(shù)據(jù)寫入暫存器的 TH、 TL 字節(jié)復(fù)制暫存器48H2中把暫存器的 TH、 T
13、L 字節(jié)寫到 E RAM重調(diào) E2RAM0B8H把 E2RAM中的 TH、 TL 字節(jié)寫到暫存器 TH、 TL 字節(jié)讀供電方式0B4H啟動 DS18B20發(fā)送電源供電方式的信號給主 CPUDS18B20的測溫原理是這這樣的, 器件中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號送給減法計(jì)數(shù)器1;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所產(chǎn)生的信號作為減法計(jì)數(shù)器 2 的脈沖輸入。器件中還有一個計(jì)數(shù)門,當(dāng)計(jì)數(shù)門打開時, DS18B20就對低溫度系數(shù)振蕩器產(chǎn)生的時鐘脈沖進(jìn)行計(jì)數(shù)進(jìn)而完成溫度測量。 計(jì)數(shù)門的開啟時間由高溫度系數(shù)振蕩器來決定,每次測量前,首先將最低溫所對應(yīng)的一個
14、基數(shù)分別置入減法計(jì)數(shù)器 1、溫度寄存器中,計(jì)數(shù)器 1 和溫度寄存器被預(yù)置在最低溫所對應(yīng)的一個基數(shù)值。減法計(jì)數(shù)器 1 對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器 1 的預(yù)置值減到 0 時,溫度寄存器的值將加 1,減法計(jì)數(shù)器 1 的預(yù)置將重新被裝入,減法計(jì)數(shù)器 1 重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計(jì)數(shù), 如此循環(huán)直到減法計(jì)數(shù)器計(jì)數(shù)到 0 時,停止溫度寄存器的累加, 此時溫度寄存器中的數(shù)值就是所測溫度值。 其輸出用于修正減法計(jì)數(shù)器的預(yù)置值, 只要計(jì)數(shù)器門仍未關(guān)閉就重復(fù)上述過程,直到溫度寄存器值大致被測溫度值。10數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告 圖 12測溫電路圖2. LCD1602:
15、工業(yè)字符型液晶, 能夠同時顯示 16x02 即 32 個字符( 16 列 2 行)。1602 液晶也叫 1602 字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號等的點(diǎn)陣型液晶模塊。它由若干個 5X7 或者 5X11 等點(diǎn)陣字符位組成,每個點(diǎn)陣字符位都可以顯示一個字符,每位之間有一個點(diǎn)距的間隔,每行之間也有間隔, 起到了字符間距和行間距的作用,正因?yàn)槿绱怂运荒芎芎玫仫@示圖形(用自定義CGRAM ,顯示效果也不好) 。 1602LCD 是指顯示的內(nèi)容為16X2, 即可以顯示兩行,每行 16 個字符液晶模塊(顯示字符和數(shù)字) 。 1602 芯片的接口信號說明如下表:1602 芯片的接口信號說明
16、5 系統(tǒng)軟件設(shè)計(jì)整個系統(tǒng)是由硬件配合軟件來實(shí)現(xiàn)的,在硬件確定后,編寫的軟件的功能也就基本定型了。所以軟件的功能大致可分為兩個部分:一是監(jiān)控,這也是系統(tǒng)的核心部分,二是執(zhí)行部分,完成各個具體的功能。系統(tǒng)程序主要包括主程序,讀出溫度子程序,溫度轉(zhuǎn)換命令子程序,計(jì)算溫度子程序, 顯示數(shù)據(jù)刷新子程序11數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告等。5.1 主程序主程序的主要功能是負(fù)責(zé)溫度的實(shí)時顯示、讀出并處理DS18B20的測量的當(dāng)前溫度值, 溫度測量每 1s 進(jìn)行一次。這樣可以在一秒之內(nèi)測量一次被測溫度,其程序流程見圖13 所示。開始液晶初始化調(diào)用按鍵函數(shù),液晶顯示函數(shù)發(fā) DS18B20 復(fù)位命令發(fā)跳過 ROM 命令發(fā)
17、讀取溫度命令讀取操作, CRC 校驗(yàn)判斷溫度值與設(shè)定報(bào)警值大小大于TH或N者小于 TLYN9 字節(jié)完?YNCRC 校驗(yàn)正?Y移入溫度暫存器報(bào)警結(jié)束結(jié)束 圖13主程序流程圖 圖14讀溫度流程圖5.2 讀出溫度子程序讀出溫度子程序的主要功能是讀出RAM中的 9 字節(jié),在讀出時需進(jìn)行CRC校驗(yàn),校驗(yàn)有錯時不進(jìn)行溫度數(shù)據(jù)的改寫。其程序流程圖如圖15 示:12數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告發(fā) DS18B20 復(fù)位命令發(fā)跳過 ROM 命令發(fā)溫度轉(zhuǎn)換開始命令結(jié)束 圖 15溫度轉(zhuǎn)換流程圖5.3 溫度轉(zhuǎn)換命令子程序溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令, 當(dāng)采用 12 位分辨率時轉(zhuǎn)換時間約為 750ms,在本程序設(shè)
18、計(jì)中采用 1s 顯示程序延時法等待轉(zhuǎn)換的完成。溫度轉(zhuǎn)換命令子程序流程圖如上圖,圖 13 所示5.4 計(jì)算溫度子程序計(jì)算溫度子程序?qū)?RAM中讀取值進(jìn)行 BCD碼的轉(zhuǎn)換運(yùn)算,并進(jìn)行溫度值正負(fù)的判定,其程序流程圖如圖 16 所示。開始N溫度零下 ?Y溫度值取補(bǔ)碼置“”標(biāo)志置“ +”標(biāo)志計(jì)算小數(shù)位溫度計(jì)算整數(shù)位溫度結(jié)束13數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告 圖 16計(jì)算溫度溫度流程圖5.51602 的液晶顯示 圖 171602 液晶顯示流程圖6. 總結(jié)與體會6.1 總結(jié)1. 根據(jù)原理和芯片引腳圖,分功能設(shè)計(jì)原理圖,并根據(jù)接線順序分步驟驗(yàn)證。2. 容易出現(xiàn)故障為接觸不良。a) 集成塊引腳方向預(yù)先彎好對準(zhǔn)面包板的金
19、屬孔,再小心插入。b) 導(dǎo)線的剝線長度與面包板的厚度相適應(yīng)(比板的厚度稍短) 。c) 導(dǎo)線的裸線部分不要露在板的上面,以防短路。d) 導(dǎo)線要插入金屬孔中央。3. 注意芯片的控制引腳必須正確接好4. 檢查故障時除測試輸入、輸出信號外,要注意電源、接地和控制引腳。5. 要注意芯片引腳上的信號與面包板上插座上信號是否一致 (集成塊引腳與面包板常接觸不良)。6. 接校時電路時可接模擬信號輸入(如1Hz 和 2Hz)測試輸出信號的切換正14數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告確后,再將秒進(jìn)位和分進(jìn)位信號接到校時電路,再接校時電路輸出到分計(jì)數(shù)器和時計(jì)數(shù)器。從較時電路接入信號時,必須將原進(jìn)位信號拔掉。6.2體會經(jīng)過將近兩
20、周的單片機(jī)課程設(shè)計(jì), 終于完成了我們的數(shù)字溫度計(jì)課程設(shè)計(jì), 雖然課程設(shè)計(jì)做的不是特別好,但從心底里說,還是高興的,因?yàn)槲覀兪斋@了很多很多,這些在平常的學(xué)習(xí)當(dāng)中是收獲不到的,但高興之余不得不靜下來深思!在本次課程設(shè)計(jì)的過程中,我們發(fā)現(xiàn)很多的問題,雖然以前還做過類似的課程設(shè)計(jì),但這次設(shè)計(jì)真的讓我學(xué)到了很多、長進(jìn)了很多,單片機(jī)課程設(shè)計(jì)的重點(diǎn)就在于軟件算法的設(shè)計(jì),需要有很巧妙的程序算法,雖然以前寫過一些程序, 但覺的要寫好一個程序并不是一件簡單的事, 所以我們只能不斷的調(diào)試不斷的修改才能把程寫的更好。所以得出結(jié)論是:有好多的東西,只有我們?nèi)ピ囍隽?,才能真正的掌握,只學(xué)習(xí)理論有些東西是很難理解的,更談
21、不上掌握, 實(shí)踐才是硬道理,實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)。通過這次的課程設(shè)計(jì), 我們真正的意識到, 在以后的學(xué)習(xí)中, 要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識用到實(shí)際當(dāng)中, 這樣我們才能更好的理解、 掌握這些知識,學(xué)習(xí)單機(jī)片機(jī)更是如此, 程序只有在經(jīng)常的寫與讀的過程中才能提高, 這就是我在這次課程設(shè)計(jì)中的最大收獲。 通過這次對數(shù)字溫度計(jì)的設(shè)計(jì)與制作, 讓我們了解了設(shè)計(jì)電路的程序, 也讓我們了解了關(guān)于數(shù)字溫度計(jì)的原理與設(shè)計(jì)理念, 要設(shè)計(jì)一個電路總要先用仿真仿真成功之后才實(shí)際接線的。 但是最后的成品卻不一定與仿真時完全一樣,因?yàn)?,在?shí)際接線中有著各種各樣的條件制約著。并且,在仿真中無法成功的電路接法,在實(shí)
22、際中因?yàn)樾酒旧淼奶匦远軌虺晒?。所以,在設(shè)計(jì)時應(yīng)考慮兩者的差異,從中找出最適合的設(shè)計(jì)方法。通過這次學(xué)習(xí),讓我們對各種電路都有了大概的了解,所以說, 坐而言不如立而行,對于這些電路還是應(yīng)該自己動手實(shí)際操作才會有深刻理解。當(dāng)然在這個過程中我們還會遇到很多其它的問題, 這些問題我們也不是那么輕易的就能夠解決的,此時我們就會去翻閱相關(guān)資料,或者是問同學(xué)、問老師,我們的同學(xué)和老師那一個個真的事知無不答的, 這樣我們就能很快的把問題給決絕掉了,那種感覺真的讓人很舒暢, 這也讓我們明白了一件事, 在學(xué)習(xí)中我們?nèi)?5數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告少不了同學(xué)、老師的幫助,他們能夠很快的解決一些問題。從這次的課程設(shè)計(jì)中
23、, 我真正的意識到, 在以后的學(xué)習(xí)中, 要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識應(yīng)用到實(shí)際當(dāng)中,學(xué)習(xí)單機(jī)片機(jī)更是如此, 程序只有在經(jīng)常的寫與讀的過程中才能提高,這就是我在這次課程設(shè)計(jì)中的最大收獲。7參考文獻(xiàn)1 單片機(jī)原理及應(yīng)用楊恢先、黃輝光主編 M 湘潭大學(xué)出版社2 電子技術(shù)基礎(chǔ)(第五版)華中科技大學(xué)電子技術(shù)課程組編 M 康華光主編,陳大欽、張林副主編,高等教育出版社3單片機(jī)課程指導(dǎo)樓然苗、李光飛編著,北京航空航天大學(xué)大學(xué)出版社451 單片機(jī) C 語言教程郭天祥編著16數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告8. 附錄:#include<reg51.h>#include <intrins.h>
24、;#define uchar unsigned char#define uint unsigned intuchar temp,num,k1num;uchar code table="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 d
25、elay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);/* 溫度傳感器的延時程序*/void Delay1(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_();17數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告_nop_();delay2(1
26、00);DQ=1;/*溫度傳感器寫字節(jié)命令函數(shù)*/void Ds18b20xiezijie(uchar date)uchar i;for(i=0;i<8;i+)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
27、_();_nop_();dat>>=1;DQ=1;/然后釋放總線_nop_();/延時一下等待數(shù)據(jù)穩(wěn)定_nop_();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 Ds18b20Read
28、TempCom()init_18b20();Delay1(1);Ds18b20xiezijie(0xcc);/跳過 ROM操作命令18數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告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()
29、;/ 再讀高字節(jié)temp = tmh;temp <<= 8;temp |= tml;return temp;/*液晶屏寫指令函數(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)<<
30、4;delay(5);lcden=1;delay(5);lcden=0;/* 液晶屏寫數(shù)據(jù)命令函數(shù)*/void write_data(char date)lcdrs=1;LCD_RW=0;lcden=0;P0=date;19數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告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)
31、;write_com2(0x28);write_com2(0x0c);write_com2(0x06);write_com2(0x01);write_com2(0X80);/*報(bào)警上下線處理函數(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(0x3
32、0+ge);/*報(bào)警上下線處理函數(shù)*/void write_hl1(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+add);write_data(0x30+bai);write_data(0x30+shi);write_data(0x30+ge);/*液晶屏顯示函數(shù),顯示溫度值*/void Lcdxianshi(int temp)20數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告uchar sz4=0,0,0,0;unsig
33、ned char datas = 0, 0, 0, 0, 0; /定義數(shù)組float tp;if(temp< 0)/ 當(dāng)溫度值為負(fù)數(shù)write_com2(0x80+0x40);/ 寫地址 80 表示初始地址write_data('-');/ 顯示負(fù)temp=temp-1;/因?yàn)樽x取的溫度是實(shí)際溫度的補(bǔ)碼,所以減1,再取反求出原碼temp=temp;tp=temp;temp=tp*0.0625*100+0.5;elsewrite_com2(0x80+0x40);/ 寫地址 80 表示初始地址write_data('+');/ 顯示正tp=temp;/因?yàn)閿?shù)據(jù)
34、處理有小數(shù)點(diǎn)所以將溫度賦給一個浮點(diǎn)型變量如果溫度是正的那么,那么正數(shù)的原碼就是補(bǔ)碼它本身temp=tp*0.0625*100+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_
35、com2(0x80+0x40+3);write_data('0'+datas2);write_com2(0x80+0x40+4);write_data('.');write_com2(0x80+0x40+5);write_data('0'+datas3);a=(datas0*100+datas1*10+datas2);/用于溫度的比較值write_hl(13,shangxiaxian1);/ 顯示報(bào)警上限write_hl1(13,shangxiaxian0); /顯示報(bào)警下限/*按鍵處理函數(shù),用于設(shè)置溫度報(bào)警值*/void key()if(k1=
36、0)delay(5);if(k1=0)/溫度報(bào)警下限加shangxiaxian0+;if(shangxiaxian0=127)shangxiaxian0=126;write_hl1(13, shangxiaxian0);if(k2=0)/溫度報(bào)警下限減21數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告delay(5);if(k2=0)shangxiaxian0-;if(shangxiaxian0=-56)shangxiaxian0=-55;write_hl1(13, shangxiaxian0);if(k3=0)/ 溫度報(bào)警上限加delay(5);if(k3=0)shangxiaxian1+;if(shangxiaxian1=127)shangxiaxian1=126;write_hl(13, s
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高血壓患者的基礎(chǔ)護(hù)理
- 二零二五版勞動合同書模板涵蓋勞動權(quán)益保障
- 二零二五年醫(yī)院外科主治醫(yī)師聘用合同書
- 二零二五年度離婚不撫養(yǎng)子女贍養(yǎng)及財(cái)產(chǎn)協(xié)議
- 2025版定制化企業(yè)級軟件銷售與維護(hù)服務(wù)合同
- 二零二五年度房地產(chǎn)營銷活動智慧社區(qū)建設(shè)合作協(xié)議
- 2025年度門崗聘用合同范本(創(chuàng)新優(yōu)化版)
- 2025版鋼筋綁扎與材料配送一體化服務(wù)合同范本
- 2025版健身中心場地租賃與物業(yè)管理合同
- 二零二五版建筑安裝工程施工合同執(zhí)行與風(fēng)險(xiǎn)控制論文
- 礦山員工請假管理制度
- 大學(xué)混合式教學(xué)的評估體系構(gòu)建與應(yīng)用
- 全國一卷2025年高考語文真題含解析
- 無痛門診麻醉管理制度
- 低壓電工說課課件
- 2025課件:紅色基因作風(fēng)建設(shè)七一黨課
- 安全輸血試題及答案
- 跨部門協(xié)作績效量化方法-洞察闡釋
- 供配電技術(shù)(第4版)唐志平全套教案課件
- 活動審批流程管理制度
- T/CIQA 70-2023船用甲醇燃料
評論
0/150
提交評論