單片機數(shù)字溫度計課程設(shè)計報告
《單片機數(shù)字溫度計課程設(shè)計報告》由會員分享,可在線閱讀,更多相關(guān)《單片機數(shù)字溫度計課程設(shè)計報告(29頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、數(shù)字溫度計課程設(shè)計報告 目 錄 1. 設(shè)計任務(wù) 1 1.1設(shè)計目的 1 1.2設(shè)計指標(biāo) 1 1.3設(shè)計要求 1 2. 設(shè)計思路與總體框圖 1 3. 系統(tǒng)硬件電路的設(shè)計 2 3.1主控電路 2 3.2液晶顯示電路 3 3.3按鍵電路 3 3.4報警電路 4 4. 系統(tǒng)仿真設(shè)計 4 4.1仿真原理圖 4 4.2各功能元件的分析 5 5. 系統(tǒng)軟件設(shè)計 10 5.1主程序 11 5.2讀出溫度子程序 11 5.3溫度轉(zhuǎn)換命令子程序 12 5.4設(shè)計溫度子程序 12 5.5 1602的溫度顯示 13 6. 總結(jié)與體會 13 6 1總結(jié) 13
2、6. 2體會 14 7. 參考文獻(xiàn) 15 8. 附錄 16 1. 設(shè)計任務(wù) 1.1設(shè)計目的 1. 了解數(shù)數(shù)字溫度計及工作原理。 2. 進(jìn)一步掌握數(shù)字溫度計設(shè)計方法。 3. 進(jìn)一步掌握各芯片的邏輯功能及使用方法。 4. 進(jìn)一步掌握keil和仿真軟件的應(yīng)用。 5. 進(jìn)一步熟悉集成電路的引腳安排.。 1.2設(shè)計指標(biāo) 1. 顯示溫度。 2. 可以顯示大于零度的溫度也可以顯示小于零度的溫度。 3. 具有顯示相應(yīng)環(huán)境溫度的功能,并且具有超出設(shè)定范圍內(nèi)溫度時可以報 警的功能,相應(yīng)環(huán)境可以人為選擇。 1.3設(shè)計要求 1. 畫出總體設(shè)計框圖,以說明數(shù)字溫度計由哪些相對獨立的功能
3、模塊組 成,標(biāo)出各個模塊之間互相聯(lián)系。并以文字對原理作輔助說明。 2. 設(shè)計各個功能模塊的電路圖,加上原理說明。 3. 選擇合適的元器件,在面包板上接線驗證、調(diào)試各個功能模塊的電路, 在接線驗證時設(shè)計、選擇合適的輸入信號和輸出方式,在確定電路充分正確性同 時,輸入信號和輸出方式要便于電路的測試和故障排除。 4. 在驗證各個功能模塊基礎(chǔ)上,對整個電路的元器件和布線進(jìn)行合理布 局,進(jìn)行整個數(shù)字溫度電路的接線調(diào)試。 2. 設(shè)計思路與總體框圖. 數(shù)字溫度計由主控制器(單片機)、溫度傳感器(DS18B20)、顯示器 (LCD1602)、獨立按鍵和報警電路組成,溫度傳感器所感應(yīng)的溫度信號經(jīng)過
4、其數(shù) 據(jù)傳輸引腳傳送給單片機,單片機將所接收到的溫度信號經(jīng)過處理, 將其送至顯 示器LCD1602顯示,并且能夠通過獨立按鍵設(shè)置溫度報警值, 若溫度處于報警上 限和下限之外,報警電路工作。圖1所示為數(shù)字溫度計的一般結(jié)構(gòu)框圖: 數(shù)字溫度計課程設(shè)計報告 數(shù)字溫度計課程設(shè)計報告 STC90C51 LCD1602 顯示 數(shù)字溫度計課程設(shè)計報告 5 數(shù)字溫度計課程設(shè)計報告 單片機時鐘 振蕩 ▲圖1 數(shù)字溫度計結(jié)構(gòu)框圖 3.系統(tǒng)硬件電路的設(shè)計 3.1主控電路 蜂鳴器,指示燈 DS18B20傳感器 單片機
5、STC90C5具有低電壓供電和體積小等特點,四個端口同時使用以滿 足電路系統(tǒng)的設(shè)計需要,很適合便攜手持式產(chǎn)品的設(shè)計使用系統(tǒng)可用二節(jié)電池供 電。晶振采用12MHZ JJ丄 1= :亠 :丄 * A 1-rtL 1 PO1/AD1 PO.2/AD2 XTAL2 P0L3/AD3 PO4/AD4 P0 5/AD5 PO.6/ADB PO.7/AD7 P2O/AS RST P2.1/A9 P2 2/A10 PSEN P2.37A11 ALE P2.4JA12 EA P2 5JA13 P2.6;A14 P2.7/A15 P1.0
6、 P3.0)RXD P1 1 P31/TXD P3.2/INT0 ri .2 P1.3 P331NT1 P1.4 P3.4H0 P1.5 P35/T1 P1.6 P3.5A/^R P1 7 P3.7JRD ■11 —L1 1B 17 I ▲圖2主控電路 # 數(shù)字溫度計課程設(shè)計報告 ▲圖3晶振電路 3.2溫度顯示電路 采
7、用液晶顯示屏LCD1602顯示,第一行顯示“ 18B20 OKTL”和報警下限值, 第二行顯示實時溫度以及報警上限值,并且能夠顯示負(fù)溫度值。用 P0 口進(jìn)行 LCD1602的數(shù)據(jù)寫操作,P2.5~P2.7 口進(jìn)行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仿真原理圖
8、根據(jù)數(shù)字溫度計的一般結(jié)構(gòu)框圖, 我們通過查閱資料書和上網(wǎng)查詢,了解不 同元件的功能和實用性,考慮性價比后,制作出的數(shù)字溫度計的仿真電路原理圖, 如圖7所示。 WD □ 1 ONO G H-.-BTAL bXTftLI FDIVADEI pg FD2?Afil2 XTP.L2 袒雪翼M FDj9AD€ FZIVAS *Z.1W 賞 F2^A11 ?ME F2J&A1# FZ.T^tJ P1.D P1 1 R31IRX* F3.1fTX P1.4 口 4/TQ MS F3*Ti p 1 F3J&UUW. IF3.T/KF F1
9、J1 uTE:e 11 F ~iT LCD1 IAC16L ■P TEXTS- ▲圖7 數(shù)字溫度計仿真電路原理圖 4.2各功能元件的分析 設(shè)計原理圖中各功能元件的引腳圖的分析如下所示: 1. DS18B20 DS18B20溫度傳感器是美國DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能 溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度, 并且 可根據(jù)實際要求通過簡單的編程實現(xiàn) 9-12位的數(shù)字值讀數(shù)方式。DS18B20的性 能特點如下: (1) 獨特的單線接口僅需要一個端口引腳進(jìn)行通信, DS18B2在與微處理器 連接時僅需要一條口線即可實現(xiàn)微處
10、理器與 DS18B2的雙向通訊。 (2) DS18B20支持多點組網(wǎng)功能,多個 DS18B20可以并聯(lián)在惟一的三線上, 實現(xiàn)多點組網(wǎng)測溫; (3) 無須外部器件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集 成電路內(nèi); (4) 可通過數(shù)據(jù)線供電,電壓范圍為 3.0-5.5 V; (5) 零待機功耗; (6) 溫度以9或12位數(shù)字,對應(yīng)的可分辨溫度分別為0.5 C、0.25 C、0.125 C 和0.0625 C,可實現(xiàn)高精度測溫; (7) 用戶可定義報警設(shè)置; (8) 報警搜索命令識別并標(biāo)志超過程序限定溫度(溫度報警條件)的器件; (9) 負(fù)電壓特性,電源極性接反時,溫度
11、計不會因發(fā)熱而燒毀,但不能正 常工作; (10) 測量結(jié)果直接輸出數(shù)字溫度信號,以"一線總線"串行傳送給CPU同 時可傳送CR校驗碼,具有極強的抗干擾糾錯能力 DS18B20采用3腳PR35封裝或8 腳SOIC封裝,其引腳排列及內(nèi)部結(jié)構(gòu)框: DS18R20 12 3 Vce NC NC NC 11 數(shù)字溫度計課程設(shè)計報告 # 數(shù)字溫度計課程設(shè)計報告 GMD g UDD PR-35封裝 ▲ 圖8 DS18B20引腳排列圖 64位 和 接口 電源檢測 高速 存巾粹 低潮蝮:器TL 配置寄存器 # 數(shù)字溫度計課程設(shè)計
12、報告 # 數(shù)字溫度計課程設(shè)計報告 ▲圖9內(nèi)部結(jié)構(gòu)框圖 # 數(shù)字溫度計課程設(shè)計報告 ▲ 圖10 DS18B20測溫原理圖 64位R0啲結(jié)構(gòu)開始8位是產(chǎn)品類型的編號,接著是每個器件的惟一的序號, 共有48位,最后8位是前面56位的CRC僉驗碼,這也是多個DS18B2C可以采用 一線進(jìn)行通信的原因。溫度報警觸發(fā)器TH和TL,可通過軟件寫入戶報警上下限。 DS18B20溫度傳感器的內(nèi)部存儲器還包括一個高速暫存 RAM和一個非易失性 的可電擦除的EERAM高速暫存RAM勺結(jié)構(gòu)為8字節(jié)的存儲器,結(jié)構(gòu)如圖4所示。 頭2個字節(jié)包含測得的溫度信息,第 3
13、和第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在工作模式還是在測試模式,DS18B2C出廠時該位被設(shè)置為0,用戶 不要去改動,R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),來設(shè)置分辨率。 溫度LSB 溫度MSB TH用戶字節(jié)1 TL用戶字節(jié)2 配置寄存器 保留 保留 保留 CRC TM R1 R0 1 1 1 1 1 圖11 DS18B2
14、0的字節(jié)定義 DS18B20的分辨率定義如表1所示 表1 分辨率設(shè)置表 R0 R1 分辨率 最大溫度轉(zhuǎn)移時間 0 0 9位 96.75ms 0 1 10位 187.5ms 1 0 11位 375ms 1 1 12位 750ms 由表1可見,DS18B20溫度轉(zhuǎn)換的時間比較長,而且分辨率越高,所需要的 溫度數(shù)據(jù)轉(zhuǎn)換時間越長。因此,在實際應(yīng)用中要將分辨率和轉(zhuǎn)換時間權(quán)衡考慮。 主機控制DS18B20完成溫度轉(zhuǎn)換過程是:每一次讀寫之前都要對 DS18B20進(jìn)行復(fù) 位,即將數(shù)據(jù)總線下拉500us,然后釋放,DS18B20攵到信號后等待16-60us左 右
15、,之后發(fā)出60-240us的存在低脈沖,主CPU攵到此此信號表示復(fù)位成功;復(fù) 位成功后發(fā)送一條ROM旨令,然后發(fā)送RAM旨令,這樣才能對DS18B20進(jìn)行預(yù)訂 的讀寫操作。 表2 ROM 指令集 指令 約定代碼 功能 讀ROM 33H 讀DS18B2C中的編碼 符合ROM 55H 發(fā)出此命令后,接著發(fā)出64位ROM碼,訪問單線總線 上與該編輯相對應(yīng)的 DS18B20使之做出響應(yīng),為下一步 對該DS18B20勺讀寫作準(zhǔn)備 搜索ROM 0F0H 用于確定掛接在同一總線上的 DS18B2C個數(shù)和識別64位 ROM地址,為操作各器件作準(zhǔn)備 跳過ROM 0
16、CCH 忽略64位ROM地址,直接向DS18B2C發(fā)送溫度變換指令 告警搜索 命令 0ECH 執(zhí)行后,只有溫度跳過設(shè)定值上限或下限的片子才能做 出反應(yīng) 表3 RAM 指令集 指令 約定代碼 功能 溫度轉(zhuǎn)換 44H 啟動DS18B20S行溫度轉(zhuǎn)換 讀暫存器 0BEH 讀暫存器9個字節(jié)內(nèi)容 寫暫存器 4EH 將數(shù)據(jù)寫入暫存器的TH TL字節(jié) 復(fù)制暫存器 48H 把暫存器的TH TL字節(jié)寫到E^RAM中 重調(diào)Wram 0B8H 把E2RAM中的TH TL字節(jié)寫到暫存器 TH TL字節(jié) 讀供電方式 0B4H 啟動DS18B2C發(fā)送電源供電方
17、式的信號給主 CPU DS18B20的測溫原理是這這樣的,器件中低溫度系數(shù)晶振的振蕩頻率受溫度 的影響很小,用于產(chǎn)生固定頻率的脈沖信號送給減法計數(shù)器 1 ;高溫度系數(shù)晶振 隨溫度變化其振蕩頻率明顯改變,所產(chǎn)生的信號作為減法計數(shù)器 2的脈沖輸入。 器件中還有一個計數(shù)門,當(dāng)計數(shù)門打開時, DS18B20就對低溫度系數(shù)振蕩器產(chǎn)生 的時鐘脈沖進(jìn)行計數(shù)進(jìn)而完成溫度測量。 計數(shù)門的開啟時間由高溫度系數(shù)振蕩器 來決定,每次測量前,首先將最低溫所對應(yīng)的一個基數(shù)分別置入減法計數(shù)器 1、 溫度寄存器中,計數(shù)器1和溫度寄存器被預(yù)置在最低溫所對應(yīng)的一個基數(shù)值。 減法計數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號
18、進(jìn)行減法計數(shù),當(dāng)減法計數(shù)器 1 的預(yù)置值減到0時,溫度寄存器的值將加1,減法計數(shù)器1的預(yù)置將重新被裝入, 減法計數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計數(shù),如此循環(huán)直 到減法計數(shù)器計數(shù)到0時,停止溫度寄存器的累加,此時溫度寄存器中的數(shù)值就 是所測溫度值。其輸出用于修正減法計數(shù)器的預(yù)置值, 只要計數(shù)器門仍未關(guān)閉就 重復(fù)上述過程,直到溫度寄存器值大致被測溫度值。 ▲圖12 測溫電路圖 2. LCD1602: 工業(yè)字符型液晶,能夠同時顯示16x02即32個字符(16列2行)。1602液 晶也叫1602字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號等的 點陣型 液晶模塊
19、。它由若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可 以顯示一個字符,每位之間有一個點距的間隔, 每行之間也有間隔,起到了字符 間距和行間距的作用,正因為如此所以它不能很好地顯示圖形(用自定義 CGRAM,顯示效果也不好)。1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩 行,每行16個字符液晶模塊(顯示字符和數(shù)字)。1602芯片的接口信號說明如 下表: 1602芯片的接口信號說明 編號 符號 引腳說明 編號 料號 引腳說訊 1 VSS 電源地 g 02 敵撇I 0 VDD 屯源il.按 10 D3 數(shù)搦【0 3 VL H
20、 D4 1 RS 數(shù)i電命令選擇端 12 D5 獨據(jù)【u 5 R *P 讀瀉1翻鞫t 13 Dtt 歡據(jù)14 6 E ]1 07 數(shù) 1/0 7 閃 眾撫1 ◎ 15 Rl A 肯死iF械 呂 DI 數(shù)拯】用 16 HIX 背尤說械 5系統(tǒng)軟件設(shè)計 整個系統(tǒng)是由硬件配合軟件來實現(xiàn)的,在硬件確定后,編寫的軟件的功能 也就基本定型了。所以軟件的功能大致可分為兩個部分:一是監(jiān)控, 這也是系統(tǒng) 的核心部分,二是執(zhí)行部分,完成各個具體的功能。系統(tǒng)程序主要包括主程序, 讀出溫度子程序,溫度轉(zhuǎn)換命令子程序, 計算溫度子程序,顯示數(shù)據(jù)
21、刷新子程序等。 DS18B20的測量的 5.1主程序 主程序的主要功能是負(fù)責(zé)溫度的實時顯示、讀出并處理 當(dāng)前溫度值, 溫度測量每1s進(jìn)行一次 這樣可以在一秒之內(nèi)測量一次被測溫度, 17 數(shù)字溫度計課程設(shè)計報告 # 數(shù)字溫度計課程設(shè)計報告 其程序流程見圖13所示 ▲圖13主程序流程圖 ▲圖14讀溫度流程圖 # 數(shù)字溫度計課程設(shè)計報告 # 數(shù)字溫度計課程設(shè)計報告 5.2讀出溫度子程序 讀出溫度子程序的主要功能是讀出 RAM中的9字節(jié),在讀出時需進(jìn)行 CRC 校驗,校驗有錯時不進(jìn)行溫度數(shù)據(jù)的改寫。其
22、程序流程圖如圖 15示: 發(fā)DS18B20復(fù)位命令 1 F 發(fā)跳過ROM命令 1 發(fā)溫度轉(zhuǎn)換 電開始命令 1 f ▲圖15 溫度轉(zhuǎn)換流程圖 5.3溫度轉(zhuǎn)換命令子程序 溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令, 當(dāng)采用12位分辨率時轉(zhuǎn) 換時間約為750ms在本程序設(shè)計中采用1s顯示程序延時法等待轉(zhuǎn)換的完成。 溫度轉(zhuǎn)換命令子程序流程圖如上圖,圖 13所示 5.4計算溫度子程序 計算溫度子程序?qū)AM中讀取值進(jìn)行BCD碼的轉(zhuǎn)換運算,并進(jìn)行溫度值正負(fù) 的判定,其程序流程圖如圖16所示。 ▲圖16 計算溫度溫度流程圖 5.5 1602的液晶顯示
23、 ▲圖17 1602液晶顯示流程圖 6. 總結(jié)與體會 6.1總結(jié) 1. 根據(jù)原理和芯片引腳圖,分功能設(shè)計原理圖,并根據(jù)接線順序分步驟驗 證。 2. 容易出現(xiàn)故障為接觸不良。 a) 集成塊引腳方向預(yù)先彎好對準(zhǔn)面包板的金屬孔,再小心插入。 b) 導(dǎo)線的剝線長度與面包板的厚度相適應(yīng)(比板的厚度稍短)。 c) 導(dǎo)線的裸線部分不要露在板的上面,以防短路。 d) 導(dǎo)線要插入金屬孔中央。 3. 注意芯片的控制引腳必須正確接好 4. 檢查故障時除測試輸入、輸出信號外,要注意電源、接地和控制引腳。 5. 要注意芯片引腳上的信號與面包板上插座上信號是否一致 (集成塊引腳與 面包板常接
24、觸不良)。 6. 接校時電路時可接模擬信號輸入(如 1Hz和2Hz)測試輸出信號的切換正 確后,再將秒進(jìn)位和分進(jìn)位信號接到校時電路, 再接校時電路輸出到分計數(shù)器和 時計數(shù)器。 從較時電路接入信號時,必須將原進(jìn)位信號拔掉。 6.2體會 經(jīng)過將近兩周的單片機課程設(shè)計,終于完成了我們的數(shù)字溫度計課程設(shè)計, 雖 然課程設(shè)計做的不是特別好,但從心底里說,還是高興的,因為我們收獲了很多 很多,這些在平常的學(xué)習(xí)當(dāng)中是收獲不到的,但高興之余不得不靜下來深思! 在本次課程設(shè)計的過程中,我們發(fā)現(xiàn)很多的問題,雖然以前還做過類似的課 程設(shè)計,但這次設(shè)計真的讓我學(xué)到了很多、長進(jìn)了很多,單片機課程設(shè)計的重點 就
25、在于軟件算法的設(shè)計,需要有很巧妙的程序算法,雖然以前寫過一些程序, 但 覺的要寫好一個程序并不是一件簡單的事,所以我們只能不斷的調(diào)試不斷的修改 才能把程寫的更好。所以得出結(jié)論是:有好多的東西,只有我們?nèi)ピ囍隽?,?能真正的掌握,只學(xué)習(xí)理論有些東西是很難理解的,更談不上掌握, 實踐才是硬 道理,實踐是檢驗真理的唯一標(biāo)準(zhǔn)。 通過這次的課程設(shè)計,我們真正的意識到,在以后的學(xué)習(xí)中,要理論聯(lián)系實際, 把我們所學(xué)的理論知識用到實際當(dāng)中,這樣我們才能更好的理解、掌握這些知識, 學(xué)習(xí)單機片機更是如此,程序只有在經(jīng)常的寫與讀的過程中才能提高, 這就是我 在這次課程設(shè)計中的最大收獲。通過這次對數(shù)字溫度計的
26、設(shè)計與制作, 讓我們了 解了設(shè)計電路的程序,也讓我們了解了關(guān)于數(shù)字溫度計的原理與設(shè)計理念, 要設(shè) 計一個電路總要先用仿真仿真成功之后才實際接線的。但是最后的成品卻不一定 與仿真時完全一樣,因為,在實際接線中有著各種各樣的條件制約著。并且,在 仿真中無法成功的電路接法,在實際中因為芯片本身的特性而能夠成功。所以, 在設(shè)計時應(yīng)考慮兩者的差異,從中找出最適合的設(shè)計方法。 通過這次學(xué)習(xí),讓我們對各種電路都有了大概的了解,所以說, 坐而言不如 立而行,對于這些電路還是應(yīng)該自己動手實際操作才會有深刻理解。 當(dāng)然在這個過程中我們還會遇到很多其它的問題,這些問題我們也不是那么 輕易的就能夠解決的,此時
27、我們就會去翻閱相關(guān)資料,或者是問同學(xué)、問老師, 我們的同學(xué)和老師那一個個真的事知無不答的,這樣我們就能很快的把問題給決 絕掉了,那種感覺真的讓人很舒暢,這也讓我們明白了一件事,在學(xué)習(xí)中我們?nèi)?少不了同學(xué)、老師的幫助,他們能夠很快的解決一些問題。 從這次的課程設(shè)計中,我真正的意識到,在以后的學(xué)習(xí)中,要理論聯(lián)系實際, 把我們所學(xué)的理論知識應(yīng)用到實際當(dāng)中, 學(xué)習(xí)單機片機更是如此,程序只有在經(jīng) 常的寫與讀的過程中才能提高,這就是我在這次課程設(shè)計中的最大收獲。 7. 參考文獻(xiàn) [1] 《單片機原理及應(yīng)用》楊恢先、黃輝光主編[M].湘潭大學(xué)出版社 [2] 《電子技術(shù)基礎(chǔ)》(第五版)華中科技大學(xué)電子
28、技術(shù)課程組編[M].康華 光主編,陳大欽、張林副主編,高等教育出版社
[3] 《單片機課程指導(dǎo)》樓然苗、李光飛編著,北京航空航天大學(xué)大學(xué)出 版社
《51單片機C語言教程》 郭天祥 編著
21
數(shù)字溫度計課程設(shè)計報告
8?附錄:
#in clude
29、a ngxiaxia n[2]={-10,10}; char a; sbit k仁 P1A0; sbit k2=P1Al; sbit k3=P1A2; sbit k4=P1A3; sbit LCD_RW=P2A5; sbit lcdrs=P2A6; sbit Icde n=P2A7; sbit Beep=P3A0; sbit led=P3A1; sbit DQ=P3A7; /*液晶顯示屏的延時程序*/ void delay( uint z) { ui nt x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /*溫度傳感器
30、的延時程序 */ void Delay1(ui nt 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 in it_18b20() { DQ=1; delay2(8); DQ=0; delay2(90); DQ=1; _no p_(); _no p_(); delay2(100); DQ=1; } /*溫度傳感器寫字
31、節(jié)命令函數(shù) */ void Ds18b20xiezijie(uchar date) { uchar i; for(i=0;i<8;i++) { DQ=0; DQ=date&0 x01; delay2(5); DQ=1; date>>=1; II在寫入一位數(shù)據(jù)之前先把總線拉低 II寫入一個數(shù)據(jù),從最低位開始寫 II延時一下 II將總線拉高,等待第二位數(shù)據(jù)寫入 II右移一位,寫入第二位數(shù)據(jù) } } /*溫度傳感器讀字節(jié)命令函數(shù) */ uchar Ds18b20duzijie() { uchar i,dat=O; DQ=1; _no p_(); for(i
32、=0;i<8;i++) { DQ=0; II先將總線拉低 _nop_(); _nop_(); dat>>=1; DQ=1; II然后釋放總線 _nop_(); II延時一下等待數(shù)據(jù)穩(wěn)定 _nop_(); if(DQ) dat|=0x80; II讀取數(shù)據(jù),從最低位開始讀取 delay2(30); II讀取完之后等待一下,再接著讀取下一個數(shù) DQ=1; } return dat; II返回所讀到的溫度 } I*寫溫度轉(zhuǎn)換命令函數(shù)*I void Ds18b20Cha ngTemp() { in it_18b20(); II跳過ROM操作命令 II 溫度轉(zhuǎn)換命令
33、 II跳過ROM操作命令 Delay1(1); Ds18b20xiezijie(0xcc); Ds18b20xiezijie(0x44); } I*讀溫度命令函數(shù)*I void Ds18b20ReadTempCom() { in it_18b20(); Delay1(1); Ds18b20xiezijie(0xcc); //發(fā)送讀取溫度命令 //先寫入轉(zhuǎn)換命令 //然后等待轉(zhuǎn)換完后發(fā)送讀取溫度命令 //讀取溫度值共16位,先讀低字節(jié) //再讀高字節(jié) Ds18b20xiezijie(0xbe); } /*讀溫度函數(shù)*/ int Ds18b20ReadTemp
34、() { int temp = 0; uchar tmh, tml; Ds18b20Cha ngTemp(); Ds18b20ReadTempCom(); tml = Ds18b20duzijie(); tmh = Ds18b20duzijie(); temp = tmh; temp <<= 8; temp |= tml; return temp; } /*液晶屏寫指令函數(shù)*/ void write_com(uchar com) { - lcdrs=0; lcde n=0; LCD_RW=0; P0=com; delay(5); lcde n=1; dela
35、y(5); lcde n=0; } /*液晶屏寫指令函數(shù)*/ void write_com2(i nt com) { - lcdrs=0; LCD_RW=0; lcde n=0; delay(5); P0=com; delay(5); lcde n=1; delay(5); lcde n=0; P0=(co m&OxOf)<<4; delay(5); lcde n=1; delay(5); lcde n=0; } /*液晶屏寫數(shù)據(jù)命令函數(shù) */ void write_data(char date) { lcdrs=1; LCD_RW=0; lc
36、de n=0; P0=date; delay(5); Icde n=1; delay(5); Icde n=0; lcdrs=1; LCD_RW=O; Icde n=0; PO=(date&0x0f)<<4; // 一次寫入 4 位 delay(5); Icde n=1; delay(5); lcde n=0; } /*液晶屏初始化函數(shù)*/ void in it() { lcde n=0; write_com(0x28); write_com2(0x28); write_com2(0x0c); write_com2(0x06); write_com
37、2(0x01); write_com2(0X80);
} -
/*報警上下線處理函數(shù)*/
void write_hl(uchar add,char date)
{ -
uchar bai,shi,ge;
if(date 38、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 Lcdxia nshi (int temp)
{
uchar sz[4]={0,0,0,0} 39、;
un sig 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ù)
1,再取反求出原碼
temp=temp-1;〃因為讀取的溫度是實際溫度的補碼,所以減
temp=~temp; tp=temp;
temp=tp*0.0625*100+0.5;
} else { write_com2(0x80+0x40);
write_data(+); tp=temp 40、; //
temp=tp*0.0625*100+0.5;
}
datas[0] = temp / 10000;
datas[1] = temp % 10000 / 1000; // datas[2] = temp % 1000 / 100; datas[3] = temp % 100 / 10; //
write_com2(0x80+0x40+1); write_data(0+datas[0]);
write_com2(0x80+0x40+2); write_data(0+datas[1]);
write_com2(0x80+0x40+3); write_data(0+datas 41、[2]);
write_com2(0x80+0x40+4); write_data(.);
write_com2(0x80+0x40+5); write_data(0+datas[3]);
a=(datas[0]*100+datas[1]*10+datas[2]); write_hl(13,sha ngxiaxia n[ 1]);
write_hl1(13,shangxiaxian[0]); //
}-
/*按鍵處理函數(shù),用于設(shè)置溫度報警值
//寫地址80表示初始地址
//顯示正
因為數(shù)據(jù)處理有小數(shù)點所以將溫度賦給一個浮點型變量 如果溫度是正的那么,那么正數(shù)的原碼就是補碼它本 42、身
// 百位
十位
//個位
小數(shù)
//用于溫度的比較值
//顯示報警上限
顯示報警下限
*/
void key()
{
if(k1==0)
{
delay(5);
if(k1==0) // 溫度報警下限加
{
sha ngxiaxia n[ 0]++;
if(sha ngxiaxia n[0]==127)
sha ngxiaxia n[0]=126; write_hl1(13, sha ngxiaxia n[0]);
}-
}
if(k2==0) //溫度報警下限減
{
delay(5);
if(k2==0)
{
sha ngxi 43、axia n[0 卜-;
if(sha ngxiaxia n[0]==-56)
sha ngxiaxia n[0]=-55;
write_hl1(13, shangxiaxian[0]);
}
}
if(k3==0) //溫度報警上限加
{
delay(5);
if(k3==0)
{
sha ngxiaxia n[ 1]++;
if(sha ngxiaxia n[1]==127)
sha ngxiaxia n[1]=126;
write_hl(13, sha ngxiaxia n[ 1]);
} -
}
if(k4==0) //溫度報警上限減
{
dela 44、y(5);
if(k4==0)
{
sha ngxiaxia n[1]--;
if(sha ngxiaxia n[1]==-56)
sha ngxiaxia n[1]=-55;
write_hl(13, sha ngxiaxia n[ 1]);
}-
}
}
void mai n()
{
int b;
in it();
led=0;
for(num=0;num<11;num++) // 讓液晶屏顯示"18B20 OK TL ” {
write_data(table [nu m]);
delay(20);
}
write_com2(0x80+0x40+9); 45、
write_data(T);
write_com2(0x80+0x40+10);
write_data(H);
while(1)
{
key();
Lcdxia nshi(Ds18b20ReadTemp());
delay(100);
if(sha ngxiaxia n[0]<0)
{
write_com2(0x80+12);
write_data(_);
}-
else
{
write_com2(0x80+12);
write_data(+);
}
if(sha ngxiaxia n[ 1]<0)
{
write_com2(0x80+0x40+1 46、2);
write_data(-);
}-
else
{
write_com2(0x80+0x40+12);
write_data(+);
}-
if(a>sha ngxiaxia n[1]) // 判斷溫度值與報警值的大小
{ write_com2(0x80+0x40+6);
write_data(>);
write_com2(0x80+0x40+7);
write_data(H);
}-
if(a 47、te_com2(0x80+0x40+7);
write_data(L);
}
if(a>=sha ngxiaxia n[0] &&a<=sha ngxiaxia n[ 1]) // 判斷溫度值與報警值的大小
{ write_com2(0x80+0x40+6);
write_data();
write_com2(0x80+0x40+7);
write_data(!);
蜂鳴
}-
if(a
- 溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運動會安全工作預(yù)案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個人工作總結(jié)(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動總結(jié)+在機關(guān)“弘揚憲法精神推動發(fā)改工作高質(zhì)量發(fā)展”專題宣講報告會上的講話
- 2024年XX村合作社年報總結(jié)
- 2024-2025年秋季第一學(xué)期初中歷史上冊教研組工作總結(jié)
- 2024年小學(xué)高級教師年終工作總結(jié)匯報
- 2024-2025年秋季第一學(xué)期初中物理上冊教研組工作總結(jié)
- 2024年xx鎮(zhèn)交通年度總結(jié)
- 2024-2025年秋季第一學(xué)期小學(xué)語文教師工作總結(jié)
- 2024年XX村陳規(guī)陋習(xí)整治報告
- 2025年學(xué)校元旦迎新盛典活動策劃方案
- 2024年學(xué)校周邊安全隱患自查報告
- 2024年XX鎮(zhèn)農(nóng)村規(guī)劃管控述職報告