單片機數字溫度計課程設計報告
《單片機數字溫度計課程設計報告》由會員分享,可在線閱讀,更多相關《單片機數字溫度計課程設計報告(29頁珍藏版)》請在裝配圖網上搜索。
1、數字溫度計課程設計報告 目 錄 1. 設計任務 1 1.1設計目的 1 1.2設計指標 1 1.3設計要求 1 2. 設計思路與總體框圖 1 3. 系統(tǒng)硬件電路的設計 2 3.1主控電路 2 3.2液晶顯示電路 3 3.3按鍵電路 3 3.4報警電路 4 4. 系統(tǒng)仿真設計 4 4.1仿真原理圖 4 4.2各功能元件的分析 5 5. 系統(tǒng)軟件設計 10 5.1主程序 11 5.2讀出溫度子程序 11 5.3溫度轉換命令子程序 12 5.4設計溫度子程序 12 5.5 1602的溫度顯示 13 6. 總結與體會 13 6 1總結 13
2、6. 2體會 14 7. 參考文獻 15 8. 附錄 16 1. 設計任務 1.1設計目的 1. 了解數數字溫度計及工作原理。 2. 進一步掌握數字溫度計設計方法。 3. 進一步掌握各芯片的邏輯功能及使用方法。 4. 進一步掌握keil和仿真軟件的應用。 5. 進一步熟悉集成電路的引腳安排.。 1.2設計指標 1. 顯示溫度。 2. 可以顯示大于零度的溫度也可以顯示小于零度的溫度。 3. 具有顯示相應環(huán)境溫度的功能,并且具有超出設定范圍內溫度時可以報 警的功能,相應環(huán)境可以人為選擇。 1.3設計要求 1. 畫出總體設計框圖,以說明數字溫度計由哪些相對獨立的功能
3、模塊組 成,標出各個模塊之間互相聯(lián)系。并以文字對原理作輔助說明。 2. 設計各個功能模塊的電路圖,加上原理說明。 3. 選擇合適的元器件,在面包板上接線驗證、調試各個功能模塊的電路, 在接線驗證時設計、選擇合適的輸入信號和輸出方式,在確定電路充分正確性同 時,輸入信號和輸出方式要便于電路的測試和故障排除。 4. 在驗證各個功能模塊基礎上,對整個電路的元器件和布線進行合理布 局,進行整個數字溫度電路的接線調試。 2. 設計思路與總體框圖. 數字溫度計由主控制器(單片機)、溫度傳感器(DS18B20)、顯示器 (LCD1602)、獨立按鍵和報警電路組成,溫度傳感器所感應的溫度信號經過
4、其數 據傳輸引腳傳送給單片機,單片機將所接收到的溫度信號經過處理, 將其送至顯 示器LCD1602顯示,并且能夠通過獨立按鍵設置溫度報警值, 若溫度處于報警上 限和下限之外,報警電路工作。圖1所示為數字溫度計的一般結構框圖: 數字溫度計課程設計報告 數字溫度計課程設計報告 STC90C51 LCD1602 顯示 數字溫度計課程設計報告 5 數字溫度計課程設計報告 單片機時鐘 振蕩 ▲圖1 數字溫度計結構框圖 3.系統(tǒng)硬件電路的設計 3.1主控電路 蜂鳴器,指示燈 DS18B20傳感器 單片機
5、STC90C5具有低電壓供電和體積小等特點,四個端口同時使用以滿 足電路系統(tǒng)的設計需要,很適合便攜手持式產品的設計使用系統(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主控電路 # 數字溫度計課程設計報告 ▲圖3晶振電路 3.2溫度顯示電路 采
7、用液晶顯示屏LCD1602顯示,第一行顯示“ 18B20 OKTL”和報警下限值, 第二行顯示實時溫度以及報警上限值,并且能夠顯示負溫度值。用 P0 口進行 LCD1602的數據寫操作,P2.5~P2.7 口進行LCD1602的命令控制端口。電路圖如 下: ▲圖4溫度顯示電路 3.3 按鍵電路 本系統(tǒng)一共設置了四個按鍵,k1鍵設置溫度下限加,k2鍵設置溫度下限減 k3鍵設置溫度上限加,k4鍵設置溫度上限減。 ▲圖5按鍵電路 3.4報警電路 本設計采用蜂鳴器和LED燈組成報警電路,電路圖如下: ▲圖6報警電路 4 .系統(tǒng)設計仿真 4.1仿真原理圖
8、根據數字溫度計的一般結構框圖, 我們通過查閱資料書和上網查詢,了解不 同元件的功能和實用性,考慮性價比后,制作出的數字溫度計的仿真電路原理圖, 如圖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 數字溫度計仿真電路原理圖 4.2各功能元件的分析 設計原理圖中各功能元件的引腳圖的分析如下所示: 1. DS18B20 DS18B20溫度傳感器是美國DALLAS半導體公司最新推出的一種改進型智能 溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度, 并且 可根據實際要求通過簡單的編程實現(xiàn) 9-12位的數字值讀數方式。DS18B20的性 能特點如下: (1) 獨特的單線接口僅需要一個端口引腳進行通信, DS18B2在與微處理器 連接時僅需要一條口線即可實現(xiàn)微處
10、理器與 DS18B2的雙向通訊。 (2) DS18B20支持多點組網功能,多個 DS18B20可以并聯(lián)在惟一的三線上, 實現(xiàn)多點組網測溫; (3) 無須外部器件,全部傳感元件及轉換電路集成在形如一只三極管的集 成電路內; (4) 可通過數據線供電,電壓范圍為 3.0-5.5 V; (5) 零待機功耗; (6) 溫度以9或12位數字,對應的可分辨溫度分別為0.5 C、0.25 C、0.125 C 和0.0625 C,可實現(xiàn)高精度測溫; (7) 用戶可定義報警設置; (8) 報警搜索命令識別并標志超過程序限定溫度(溫度報警條件)的器件; (9) 負電壓特性,電源極性接反時,溫度
11、計不會因發(fā)熱而燒毀,但不能正 常工作; (10) 測量結果直接輸出數字溫度信號,以"一線總線"串行傳送給CPU同 時可傳送CR校驗碼,具有極強的抗干擾糾錯能力 DS18B20采用3腳PR35封裝或8 腳SOIC封裝,其引腳排列及內部結構框: DS18R20 12 3 Vce NC NC NC 11 數字溫度計課程設計報告 # 數字溫度計課程設計報告 GMD g UDD PR-35封裝 ▲ 圖8 DS18B20引腳排列圖 64位 和 接口 電源檢測 高速 存巾粹 低潮蝮:器TL 配置寄存器 # 數字溫度計課程設計
12、報告 # 數字溫度計課程設計報告 ▲圖9內部結構框圖 # 數字溫度計課程設計報告 ▲ 圖10 DS18B20測溫原理圖 64位R0啲結構開始8位是產品類型的編號,接著是每個器件的惟一的序號, 共有48位,最后8位是前面56位的CRC僉驗碼,這也是多個DS18B2C可以采用 一線進行通信的原因。溫度報警觸發(fā)器TH和TL,可通過軟件寫入戶報警上下限。 DS18B20溫度傳感器的內部存儲器還包括一個高速暫存 RAM和一個非易失性 的可電擦除的EERAM高速暫存RAM勺結構為8字節(jié)的存儲器,結構如圖4所示。 頭2個字節(jié)包含測得的溫度信息,第 3
13、和第4字節(jié)TH和TL的拷貝,是易失的, 每次上電復位時被刷新。第5個字節(jié),為配置寄存器,它的內容用于確定溫度值 的數字轉換分辨率。DS18B20工作時寄存器中的分辨率轉換為相應精度的溫度數 值。該字節(jié)各位的定義如圖5所示。低5位一直為1, TM是工作模式位,用于設 置DS18B20在工作模式還是在測試模式,DS18B2C出廠時該位被設置為0,用戶 不要去改動,R1和R0決定溫度轉換的精度位數,來設置分辨率。 溫度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 分辨率設置表 R0 R1 分辨率 最大溫度轉移時間 0 0 9位 96.75ms 0 1 10位 187.5ms 1 0 11位 375ms 1 1 12位 750ms 由表1可見,DS18B20溫度轉換的時間比較長,而且分辨率越高,所需要的 溫度數據轉換時間越長。因此,在實際應用中要將分辨率和轉換時間權衡考慮。 主機控制DS18B20完成溫度轉換過程是:每一次讀寫之前都要對 DS18B20進行復 位,即將數據總線下拉500us,然后釋放,DS18B20攵到信號后等待16-60us左 右
15、,之后發(fā)出60-240us的存在低脈沖,主CPU攵到此此信號表示復位成功;復 位成功后發(fā)送一條ROM旨令,然后發(fā)送RAM旨令,這樣才能對DS18B20進行預訂 的讀寫操作。 表2 ROM 指令集 指令 約定代碼 功能 讀ROM 33H 讀DS18B2C中的編碼 符合ROM 55H 發(fā)出此命令后,接著發(fā)出64位ROM碼,訪問單線總線 上與該編輯相對應的 DS18B20使之做出響應,為下一步 對該DS18B20勺讀寫作準備 搜索ROM 0F0H 用于確定掛接在同一總線上的 DS18B2C個數和識別64位 ROM地址,為操作各器件作準備 跳過ROM 0
16、CCH 忽略64位ROM地址,直接向DS18B2C發(fā)送溫度變換指令 告警搜索 命令 0ECH 執(zhí)行后,只有溫度跳過設定值上限或下限的片子才能做 出反應 表3 RAM 指令集 指令 約定代碼 功能 溫度轉換 44H 啟動DS18B20S行溫度轉換 讀暫存器 0BEH 讀暫存器9個字節(jié)內容 寫暫存器 4EH 將數據寫入暫存器的TH TL字節(jié) 復制暫存器 48H 把暫存器的TH TL字節(jié)寫到E^RAM中 重調Wram 0B8H 把E2RAM中的TH TL字節(jié)寫到暫存器 TH TL字節(jié) 讀供電方式 0B4H 啟動DS18B2C發(fā)送電源供電方
17、式的信號給主 CPU DS18B20的測溫原理是這這樣的,器件中低溫度系數晶振的振蕩頻率受溫度 的影響很小,用于產生固定頻率的脈沖信號送給減法計數器 1 ;高溫度系數晶振 隨溫度變化其振蕩頻率明顯改變,所產生的信號作為減法計數器 2的脈沖輸入。 器件中還有一個計數門,當計數門打開時, DS18B20就對低溫度系數振蕩器產生 的時鐘脈沖進行計數進而完成溫度測量。 計數門的開啟時間由高溫度系數振蕩器 來決定,每次測量前,首先將最低溫所對應的一個基數分別置入減法計數器 1、 溫度寄存器中,計數器1和溫度寄存器被預置在最低溫所對應的一個基數值。 減法計數器1對低溫度系數晶振產生的脈沖信號
18、進行減法計數,當減法計數器 1 的預置值減到0時,溫度寄存器的值將加1,減法計數器1的預置將重新被裝入, 減法計數器1重新開始對低溫度系數晶振產生的脈沖信號進行計數,如此循環(huán)直 到減法計數器計數到0時,停止溫度寄存器的累加,此時溫度寄存器中的數值就 是所測溫度值。其輸出用于修正減法計數器的預置值, 只要計數器門仍未關閉就 重復上述過程,直到溫度寄存器值大致被測溫度值。 ▲圖12 測溫電路圖 2. LCD1602: 工業(yè)字符型液晶,能夠同時顯示16x02即32個字符(16列2行)。1602液 晶也叫1602字符型液晶,它是一種專門用來顯示字母、數字、符號等的 點陣型 液晶模塊
19、。它由若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可 以顯示一個字符,每位之間有一個點距的間隔, 每行之間也有間隔,起到了字符 間距和行間距的作用,正因為如此所以它不能很好地顯示圖形(用自定義 CGRAM,顯示效果也不好)。1602LCD是指顯示的內容為16X2,即可以顯示兩 行,每行16個字符液晶模塊(顯示字符和數字)。1602芯片的接口信號說明如 下表: 1602芯片的接口信號說明 編號 符號 引腳說明 編號 料號 引腳說訊 1 VSS 電源地 g 02 敵撇I 0 VDD 屯源il.按 10 D3 數搦【0 3 VL H
20、 D4 1 RS 數i電命令選擇端 12 D5 獨據【u 5 R *P 讀瀉1翻鞫t 13 Dtt 歡據14 6 E ]1 07 數 1/0 7 閃 眾撫1 ◎ 15 Rl A 肯死iF械 呂 DI 數拯】用 16 HIX 背尤說械 5系統(tǒng)軟件設計 整個系統(tǒng)是由硬件配合軟件來實現(xiàn)的,在硬件確定后,編寫的軟件的功能 也就基本定型了。所以軟件的功能大致可分為兩個部分:一是監(jiān)控, 這也是系統(tǒng) 的核心部分,二是執(zhí)行部分,完成各個具體的功能。系統(tǒng)程序主要包括主程序, 讀出溫度子程序,溫度轉換命令子程序, 計算溫度子程序,顯示數據
21、刷新子程序等。 DS18B20的測量的 5.1主程序 主程序的主要功能是負責溫度的實時顯示、讀出并處理 當前溫度值, 溫度測量每1s進行一次 這樣可以在一秒之內測量一次被測溫度, 17 數字溫度計課程設計報告 # 數字溫度計課程設計報告 其程序流程見圖13所示 ▲圖13主程序流程圖 ▲圖14讀溫度流程圖 # 數字溫度計課程設計報告 # 數字溫度計課程設計報告 5.2讀出溫度子程序 讀出溫度子程序的主要功能是讀出 RAM中的9字節(jié),在讀出時需進行 CRC 校驗,校驗有錯時不進行溫度數據的改寫。其
22、程序流程圖如圖 15示: 發(fā)DS18B20復位命令 1 F 發(fā)跳過ROM命令 1 發(fā)溫度轉換 電開始命令 1 f ▲圖15 溫度轉換流程圖 5.3溫度轉換命令子程序 溫度轉換命令子程序主要是發(fā)溫度轉換開始命令, 當采用12位分辨率時轉 換時間約為750ms在本程序設計中采用1s顯示程序延時法等待轉換的完成。 溫度轉換命令子程序流程圖如上圖,圖 13所示 5.4計算溫度子程序 計算溫度子程序將RAM中讀取值進行BCD碼的轉換運算,并進行溫度值正負 的判定,其程序流程圖如圖16所示。 ▲圖16 計算溫度溫度流程圖 5.5 1602的液晶顯示
23、 ▲圖17 1602液晶顯示流程圖 6. 總結與體會 6.1總結 1. 根據原理和芯片引腳圖,分功能設計原理圖,并根據接線順序分步驟驗 證。 2. 容易出現(xiàn)故障為接觸不良。 a) 集成塊引腳方向預先彎好對準面包板的金屬孔,再小心插入。 b) 導線的剝線長度與面包板的厚度相適應(比板的厚度稍短)。 c) 導線的裸線部分不要露在板的上面,以防短路。 d) 導線要插入金屬孔中央。 3. 注意芯片的控制引腳必須正確接好 4. 檢查故障時除測試輸入、輸出信號外,要注意電源、接地和控制引腳。 5. 要注意芯片引腳上的信號與面包板上插座上信號是否一致 (集成塊引腳與 面包板常接
24、觸不良)。 6. 接校時電路時可接模擬信號輸入(如 1Hz和2Hz)測試輸出信號的切換正 確后,再將秒進位和分進位信號接到校時電路, 再接校時電路輸出到分計數器和 時計數器。 從較時電路接入信號時,必須將原進位信號拔掉。 6.2體會 經過將近兩周的單片機課程設計,終于完成了我們的數字溫度計課程設計, 雖 然課程設計做的不是特別好,但從心底里說,還是高興的,因為我們收獲了很多 很多,這些在平常的學習當中是收獲不到的,但高興之余不得不靜下來深思! 在本次課程設計的過程中,我們發(fā)現(xiàn)很多的問題,雖然以前還做過類似的課 程設計,但這次設計真的讓我學到了很多、長進了很多,單片機課程設計的重點 就
25、在于軟件算法的設計,需要有很巧妙的程序算法,雖然以前寫過一些程序, 但 覺的要寫好一個程序并不是一件簡單的事,所以我們只能不斷的調試不斷的修改 才能把程寫的更好。所以得出結論是:有好多的東西,只有我們去試著做了,才 能真正的掌握,只學習理論有些東西是很難理解的,更談不上掌握, 實踐才是硬 道理,實踐是檢驗真理的唯一標準。 通過這次的課程設計,我們真正的意識到,在以后的學習中,要理論聯(lián)系實際, 把我們所學的理論知識用到實際當中,這樣我們才能更好的理解、掌握這些知識, 學習單機片機更是如此,程序只有在經常的寫與讀的過程中才能提高, 這就是我 在這次課程設計中的最大收獲。通過這次對數字溫度計的
26、設計與制作, 讓我們了 解了設計電路的程序,也讓我們了解了關于數字溫度計的原理與設計理念, 要設 計一個電路總要先用仿真仿真成功之后才實際接線的。但是最后的成品卻不一定 與仿真時完全一樣,因為,在實際接線中有著各種各樣的條件制約著。并且,在 仿真中無法成功的電路接法,在實際中因為芯片本身的特性而能夠成功。所以, 在設計時應考慮兩者的差異,從中找出最適合的設計方法。 通過這次學習,讓我們對各種電路都有了大概的了解,所以說, 坐而言不如 立而行,對于這些電路還是應該自己動手實際操作才會有深刻理解。 當然在這個過程中我們還會遇到很多其它的問題,這些問題我們也不是那么 輕易的就能夠解決的,此時
27、我們就會去翻閱相關資料,或者是問同學、問老師, 我們的同學和老師那一個個真的事知無不答的,這樣我們就能很快的把問題給決 絕掉了,那種感覺真的讓人很舒暢,這也讓我們明白了一件事,在學習中我們缺 少不了同學、老師的幫助,他們能夠很快的解決一些問題。 從這次的課程設計中,我真正的意識到,在以后的學習中,要理論聯(lián)系實際, 把我們所學的理論知識應用到實際當中, 學習單機片機更是如此,程序只有在經 常的寫與讀的過程中才能提高,這就是我在這次課程設計中的最大收獲。 7. 參考文獻 [1] 《單片機原理及應用》楊恢先、黃輝光主編[M].湘潭大學出版社 [2] 《電子技術基礎》(第五版)華中科技大學電子
28、技術課程組編[M].康華 光主編,陳大欽、張林副主編,高等教育出版社
[3] 《單片機課程指導》樓然苗、李光飛編著,北京航空航天大學大學出 版社
《51單片機C語言教程》 郭天祥 編著
21
數字溫度計課程設計報告
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寫數據函數的延時程序 */ void delay2( uint a) { while(--a); } /*溫度傳感器初始化函數*/ void in it_18b20() { DQ=1; delay2(8); DQ=0; delay2(90); DQ=1; _no p_(); _no p_(); delay2(100); DQ=1; } /*溫度傳感器寫字
31、節(jié)命令函數 */ 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在寫入一位數據之前先把總線拉低 II寫入一個數據,從最低位開始寫 II延時一下 II將總線拉高,等待第二位數據寫入 II右移一位,寫入第二位數據 } } /*溫度傳感器讀字節(jié)命令函數 */ 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延時一下等待數據穩(wěn)定 _nop_(); if(DQ) dat|=0x80; II讀取數據,從最低位開始讀取 delay2(30); II讀取完之后等待一下,再接著讀取下一個數 DQ=1; } return dat; II返回所讀到的溫度 } I*寫溫度轉換命令函數*I void Ds18b20Cha ngTemp() { in it_18b20(); II跳過ROM操作命令 II 溫度轉換命令
33、 II跳過ROM操作命令 Delay1(1); Ds18b20xiezijie(0xcc); Ds18b20xiezijie(0x44); } I*讀溫度命令函數*I void Ds18b20ReadTempCom() { in it_18b20(); Delay1(1); Ds18b20xiezijie(0xcc); //發(fā)送讀取溫度命令 //先寫入轉換命令 //然后等待轉換完后發(fā)送讀取溫度命令 //讀取溫度值共16位,先讀低字節(jié) //再讀高字節(jié) Ds18b20xiezijie(0xbe); } /*讀溫度函數*/ int Ds18b20ReadTemp
34、() { int temp = 0; uchar tmh, tml; Ds18b20Cha ngTemp(); Ds18b20ReadTempCom(); tml = Ds18b20duzijie(); tmh = Ds18b20duzijie(); temp = tmh; temp <<= 8; temp |= tml; return temp; } /*液晶屏寫指令函數*/ 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; } /*液晶屏寫指令函數*/ 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; } /*液晶屏寫數據命令函數 */ 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; } /*液晶屏初始化函數*/ 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);
} -
/*報警上下線處理函數*/
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);
}-
/* 液晶屏顯示函數,顯示溫度值 */
void Lcdxia nshi (int temp)
{
uchar sz[4]={0,0,0,0} 39、;
un sig ned char datas[] = {0, 0, 0, 0, 0}; // 定義數組
float tp;
if(temp< 0) //當溫度值為負數
{
write_com2(0x80+0x40); //寫地址80表示初始地址
write_data(-); // 顯示負
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]); //
}-
/*按鍵處理函數,用于設置溫度報警值
//寫地址80表示初始地址
//顯示正
因為數據處理有小數點所以將溫度賦給一個浮點型變量 如果溫度是正的那么,那么正數的原碼就是補碼它本 42、身
// 百位
十位
//個位
小數
//用于溫度的比較值
//顯示報警上限
顯示報警下限
*/
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)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。