設計(論文)題目:
基于單片機的數字溫度計設計
摘 要
隨著現代工農業技術的發展及人們對生活環境要求的提高,人們在生活的許多方面都有著對溫度進行感知和控制的需要。而傳統的溫度計由于各種原因,精度不能達到我們預期的效果,隨著現代微電子及信息科學的發展,數字溫度計無疑成為溫度計設計的最有效方案。
本文是介紹基于單片機的數字溫度計的設計,該溫度計由中央控制器、溫度檢測器、顯示器及報警部分組成。該溫度計的基本范圍為-50℃-110℃,精度誤差小于0.5℃,LCD液晶顯示器直接讀取溫度值顯示,當測量溫度超出報警門限時,系統將輸出光報警信號。
本文主要包括兩個方面的設計:一方面是硬件電路的設計,另一方面是系統程序的設計。其中,硬件電路各部分組成如下:中央控制器采用單片機AT89S51,溫度檢測部分采用DS18B20溫度傳感器,用LCD液晶1602作為顯示器。其次,系統軟件程序包括主程序,溫度值讀取、轉換及計算程序,顯示數據刷新程序等。
該溫度計整體功能的實現是通過溫度傳感器DS18B20采集溫度信號送該給單片機處理,單片機再把溫度數據送液晶顯示器1602顯示。
目 錄
前 言
第一章 數字溫度計的總體方案設計及論證
第二章 數字溫度計硬件電路的實現
第一節 復位電路及晶振電路設計
一、復位電路
二、晶振電路
第二節 溫度傳感器設計
一、概述
二、DS18B20的外形及內部結構
三、DS18B20工作原理
四、DS18B20 溫度測量通信協議
五、DS18B2的外部電路圖
第三節 液晶顯示電路設計
一、1602的引腳功能介紹
二、1602的標準字庫
三、1602液晶模塊內部的控制指令
四、1602的外部電路圖
第三章 數字溫度計軟件設計流程及程序
第一節 主程序設計
第二節 溫度值讀取程序設計
一、DS18B20的延時程序
二、DS18B20的初始化程序
三、DS18B20的讀時序程序
四、DS18B20的寫時序程序
第三節 計算溫度程序設計
第四節 顯示數據及刷新程序設計
第四章 程序調試
結 論
結束語
參考文獻
附 件
一、英文原文
二、英文翻譯
三、工程設計圖紙
四、源程序
五、教學檔案
前 言 信息科學和微電子技術的飛速發展給控制領域帶來了巨大的飛躍,控制技術更加趨向自動化和智能化,為無數的使用者帶來了方便。在控制領域里,溫度是一個常見的名詞,然而它所帶來的技術問題和所起的作用卻是非同一般的。在控制領域中,對溫度的控制有著舉足輕重的作用。例如陶瓷的燒烤,只有控制住溫度的適度,才能制作出一件完美的藝術品,否則只是一件廢品;還有如釀酒的過程,也需要對溫度進行控制。可見,在生活的許多方方面面都有著對溫度進行感知和控制的需要。 溫度是一個十分重要的物理量,對它的測量與控制有十分重要的意義。隨著現代工農業技術的發展及人們對生活環境要求的提高,人們也迫切需要檢測與控制溫度。在人類的生活環境中,溫度扮演著極其重要的角色。無論你生活在哪里,從事什么工作,無時無刻不在與溫度打著交道。在冶金、鋼鐵、石化、水泥、玻璃、醫藥等等行業,可以說幾乎80%的工業部門都不得不考慮著溫度的因素。溫度對于工業如此重要,由此推進了溫度傳感器的發展。 測量溫度的基本方法是使用溫度計直接讀取溫度。最常見到的測量溫度的工具是各種各樣的溫度計,例如,水銀玻璃溫度計,酒精溫度計,熱電偶或熱電阻溫度計等。它們常常以刻度的形式表示溫度的高低,人們必須通過讀取刻度值的多少來測量溫度。而在傳統的模擬信號溫度測量系統中,測溫電路的電磁環境非常惡劣,各種干擾信號較強,模擬溫度信號容易受到干擾而產生測量誤差,影響測量精度,不能滿足數字化時代的需求。利用單片機和溫度傳感器構成的電子式智能溫度計精度高、抗干擾能力強,可擴展性強、集成方便得到了廣泛的應用。而且可以直接測量溫度,得到溫度的數字值,既簡單方便,又直觀準確,新型數字溫度傳感器是溫度計設計的最有效方案。 本課題就是一個對溫度進行檢測,采集和顯示的溫度檢測系統。它以單片機(AT89S51)為主要控制器件,DS18B20為溫度傳感器,并通過LCD液晶1602直接顯示所測溫度的新型數字溫度計。由于本人所學知識有限,設計過程中難免會出現錯誤,還請各位老師指正。
第一章 數字溫度計的總體方案設計及論證
根據系統設計的功能,本時鐘溫度系統的設計必須采用單片機軟件系統實現,用單片機的自動控制能力來測量、顯示溫度數值。 初步確定設計系統由單片機主控模塊、測溫模塊、顯示模塊、報警模塊共4個模塊組成,電路系統框圖如圖1.1所示。 
圖1.1 系統基本方框圖 對于單片機的選擇,如果用8051系列,由于它沒有內部RAM,系統又需要一定的內存存儲數據。AT89S51是一個低功耗、高性能CMOS 8位的單片機,片內含8k Bytes ISP的可反復擦寫1000次的Flash只讀程序存儲器,兼容標準MCS-51指令系統及80C51引腳結構,功能強大的AT89S51可為許多嵌入式控制應用系統提供高性價比的解決方案。而AT89S51與AT89C51相比,外型管腳完全相同,AT89C51的HEX程序無須任何轉換可直接在AT89S51運行,且AT89S51比AT89C51新增了一些功能,相比較后,在本設計中選用AT89S51更能很好的實現溫度計控制功能。 測溫電路可以使用熱敏電阻之類的器件,利用其感溫效應,將被測溫度變化的電壓或電流采集過來,進行A/D轉換后,就可以用單片機進行數據處理。但是這種感溫電路比較復雜,且采用熱敏電阻精度低,重復性、可靠性都比較差。 如果采用溫度傳感器DS18B20可以減少外部硬件電路,而且可以很容易直接讀取被測溫度值,進而轉換,還可以在高溫報警,且成本低、易使用,可以很好的滿足設計要求。所以本文采用傳感器DS18B20代替傳統的測溫電路。 溫度的顯示可以采用LED數碼管來顯示,LED亮度高、醒目,但是電路復雜,占用資 源多且信息量小。而采用液晶顯示器有明顯的優點:工作電流比LED小幾個數量級,功耗低;尺寸小,厚度約為LED的1/3;字跡清晰、美觀、使人舒服;壽命長,使用方便,可得性強。故本設計采用LCD來顯示溫度。 第二章 數字溫度計硬件電路的實現
第一節 復位電路及晶振電路設計
根據方案的設計,系統硬件電路主要由主控單片機AT80S51、溫度傳感器DS18B20、液晶顯示器1602等組成。 影響單片機系統運行穩定性的內部因素包括復位電路和振蕩源的穩定性,振蕩源的穩定性主要由起振時間、頻率穩定度和占空比穩定度決定,起振時間可由電路參數整定,穩定度受振蕩器類型、溫度和電壓等參數影響。 一、復位電路復位電路的基本功能是:系統上電時提供復位信號,直至系統電源穩定后,撤銷復位信號。在本系統中,上電復位采用電平方式開關復位,具體電路如圖2.1所示。上電復位采用RC電路,其中電容為10 F,電阻為10K 。 二、晶振電路單片機系統里晶振的作用非常大,它結合單片機內部的電路,產生單片機所必須的時鐘頻率,單片機的一切指令的執行都是建立在這個基礎上的,晶振提供的十種頻率越高,單片機運行的速度也就越快。單片機的晶振頻率應低于40MHZ,本設計中采用的晶振頻率為12MHZ,具體電路如2.2所示,在晶振上并聯兩個30 F電容。  
第二節 溫度傳感器設計 一、概述
DS18B20溫度傳感器是一種改進型智能溫度傳感器,與傳統的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據實際要求通過簡單的編程實現9~12位的數字值讀數方式。DS18B20的性能特點如下:
①獨特的單線接口僅需要一個端口引腳進行通信;
②多個DS18B20可以并聯在惟一的三線上,實現多點組網功能;
③無須外部器件;
④可通過數據線供電,電壓范圍為3.0~5.5V;
⑤零待機功耗;
⑥溫度以9或12位數字;
⑦用戶可定義報警設置;
⑧報警搜索命令識別并標志超過程序限定溫度(溫度報警條件)的器件;
⑨負電壓特性,電極接反時,溫度計不會因發熱而燒毀,只是不能正常工作。 二、DS18B20的外形及內部結構1、DS18B20引腳定義及電源工作方式 DS18B20的外形及引腳如圖2.3所示。
DS18B20引腳功能的詳細描述如表2.1所示。 DS18B20的電源供電方式有兩種,一種為寄生電源供電方 式,另一種為外部電源工作方式。其中,在寄生電源供電方式 下,DS18B20從單線信號線上汲取能量:在信號線DQ處于高電 平期間把能量儲存在內部電容里,在信號線處于低電平期間消耗 電容上的電能工作,直到高電平到來再給寄生電源(電容)充電。 圖2.3 DS18B20的引腳 其具體電路如圖2.4。
表2.1 DS18B20詳細引腳功能描述圖 名稱 | 引腳功能描述 | GND | 地信號 | DQ | 數據輸入/輸出引腳。開漏單總線接口引腳。當被用在寄生電源下,可以向器件提供電源。 | VDD | 可選擇的VDD引腳。當工作于寄生電源時,此引腳必須接地。 |

圖2.4 寄生電源工作方式 DS18B20獨特的寄生電源方式有如下三個好處:
①進行遠距離測溫時,無需本地電源;
②可在沒有常規電源的條件下讀取ROM;
③電路更簡潔,僅用一根I/O口實現測溫
要使DS18B20進行精確的溫度轉換,I/O線必須保證在溫度轉換期間提供足夠的能量,由于每個DS18B20在溫度轉換期間工作電流要達到1mA,當幾個溫度傳感器掛在同一根I/O線上進行多點測溫時,只靠4.7K上拉電阻就無法提供足夠的能量,會造成無法轉換溫度或溫度誤差大。
因此,圖2.4的寄生電源電路只適應于單一溫度傳感器測溫情況下使用,不適宜采用電池供電系統中。并且工作電源VCC必須保證在5V,當電源電壓下降時,寄生電源能夠汲取的能量也降低,會使溫度誤差變大。
DS18B20外部電源供電方式如圖2.5所示,其工作電源由VDD引腳接入,此時I/O線不需要強上拉,不存在電源電流不足的問題,可以保證轉換精度,同時在總線理論上可以掛接任意多個DS18B20傳感器,組成多點測溫系統。注意:在外部供電的方式下,DS18B20的GND引腳不能懸空,否則不能轉換溫度,讀取的溫度總是85℃。 外部電源供電方式是DS18B20最佳的工作方式,工作穩定可靠,抗干擾能力強,而且電路也比較簡單,本設計中使用外部電源供電方式。在外接電源方式下,可以充分發揮DS18B20寬 電源電壓范圍的優點,即使電源電壓VCC降到3V時,依然能夠保證溫度量精度。 
圖2.5 外部電源工作方式 2、DS18B20內部結構 DS18B20內部結構如圖2.6,它主要由四部分組成:64位光刻ROM、溫度傳感器、存儲器、非揮發的溫度報警觸發器TH和TL。

圖2.6 DS18B20內部結構圖 (1)、光刻ROM 光刻ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位(28H)是產品類型標號,接著的48位是該DS18B20自身的序列號,最后8位是前面56位的循環冗余校驗碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個DS18B20都各不相同,這樣就可以實現一根總線上掛接多個DS18B20的目的。 (2)、溫度傳感器 DS18B20中的溫度傳感器可完成對溫度的測量,以12位轉化為例:用16位符號擴展的二進制補碼讀數形式提供,以0.0625℃/LSB形式表達,其中S為符號位,12位轉化后得到的12位數據,存儲在DS18B20的兩個8比特的RAM中。DS18B20溫度值格式如二進制表2.2所示,其中,前5位是符號位,如果測得的溫度大于0,這5位為0,只要將測得的數值乘以0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數值需要取反加1再乘于 0.0625即可得到實際溫度。 例如+125℃的數字輸出為07D0H,+25.0625℃的數字輸出為0191H,-25.0625℃的數字輸出為FF6FH,-55℃的數字輸出為FC90H。 表2.2 DS18B20溫度值格式表
(3)、DS18B20的存儲器 DS18B20溫度傳感器的內部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的EEPRAM,后者存放高溫度和低溫度觸發器的TH、TL。 ①、配置寄存器
DS18B20配置寄存器各字節意義如表2.3下: 表2.3 DS18B20寄存器中各位內容 其中,低五位一直都是"1",TM是測試模式位,用于設置DS18B20在工作模式還是在測試模式。在DS18B20出廠時該位被設置為0,用戶不要去改動。其中,R1和R0用來設置分辨率,具體設置如表2.4所示:(DS18B20出廠時被設置為12位)。 表2.4 溫度分辨率設置表
②、高速暫存存儲器
高速暫存存儲器由9個字節組成,其分配如表2.5所示。當溫度轉換命令發布后,經轉換所得的溫度值以二進制補碼形式存放在高速暫存存儲器的第0和第1個字節。單片機可通過單線接口讀到該數據,讀取時低位在前,高位在后,數據格式如表2.2所示。對應的溫度計算:當符號位S=0時,直接將二進制位轉換為十進制;當S=1時,先將補碼變為原碼,再計算十進制值。第九個字節是冗余檢驗字節。 表2.5 DS18B20暫存寄存器分布
三、DS18B20工作原理
DS18B20的溫度值的位數因分辨率不同而不同,溫度轉換時的最大延時為750ms。 DS18B20測溫原理如圖2.7所示。圖中低溫度系數晶振的振蕩頻率受溫度影響很小,用于產生固定頻率的脈沖信號送給計數器1。高溫度系數晶振隨溫度變化其振蕩率明顯改變,所產生的信號作為計數器2的脈沖輸入。計數器1和溫度寄存器被預置在-55℃所對應的一個基數值。計數器1對低溫度系數晶振產生的脈沖信號進行減法計數,當計數器1的預置值減到0時,溫度寄存器的值將加1,計數器1的預置將重新被裝入,計數器1重新開始對低溫度系數晶振產生的脈沖信號進行計數,如此循環直到計數器2計數到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數值即為所測溫度。圖中的斜率累加器用于補償和修正測溫過程中的非線性,其輸出用于修正計數器1的預置值。
圖2.7 DS18B20測溫原理
四、DS18B20 溫度測量通信協議由于DS18B20采用的是1-Wire總線協議方式,即在一根數據線實現數據的雙向傳輸,而對AT89S51單片機來說,硬件上并不支持單總線協議,因此,我們必須采用軟件的方法來模擬單總線的協議時序來完成對DS18B20芯片的訪問。
由于DS18B20是在一根I/O線上讀寫數據,因此,對讀寫的數據位有著嚴格的時序要求。 DS18B20有嚴格的通信協議來保證各位數據傳輸的正確性和完整性。該協議定義了幾種信號的 時序:初始化時序、讀時序、寫時序。所有時序都是將主機作為主設備,單總線器件作為從設備。而每一次命令和數據的傳輸都是從主機主動啟動寫時序開始,如果要求單總線器件回送數據,在進行寫命令后,主機需啟動讀時序完成數據接收。數據和命令的傳輸都是低位在先。
DS18B20的復位時序如圖2.8所示:

圖2.8 DS18B20的復位時序 DS18B20的讀時序如圖2.9所示: 
圖2.9 DS18B20的讀時序 對于DS18B20的讀時序分為讀0時序和讀1時序兩個過程。
對于DS18B20的讀時隙是從主機把單總線拉低之后,在15um之內就得釋放單總線,以讓DS18B20把數據傳輸到單總線上。DS18B20在完成一個讀時序過程,至少需要60us才能完成。
DS18B20的寫時序如圖2.10所示: 
圖2.10 DS18B20的寫時序
對于DS18B20的寫時序仍然分為寫0時序和寫1時序兩個過程。
對于DS18B20寫0和寫1時序的要求不同,當要寫0時序時,單總線要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確地采樣I/O總線上的“0”電平,當要寫1時序時,單總線被拉低之后,在15us之內就得釋放單總線。
系統對 DS18B20 的各種操作必須按協議進行。根據 DS18B20 的協議規定,微控制器控制 DS18B20 完成溫度的轉換必須經過以下 4 個步驟 : ①每次讀寫前對 DS18B20 進行復位初始化。復位要求主 CPU 將數據線下拉 500us ,然后釋放, DS18B20 收到信號后等待 16us~60ms 左右,然后發出60us~240us 的存在低脈沖,主 CPU 收到此信號后表示復位成功。 ②發送一條 ROM 指令,具體ROM指令如表2.6所示: 表2.6 DS18B20的ROM指令集 | | 指令功能 | | | 讀 DS18B20ROM 中的編碼(即讀 64 位地址) | | | 發出此命令之后,接著發出 64 位 ROM 編碼,訪問單總線上與編碼相對應 DS18B20 使之作出響應,為下一步對該 DS18B20 的讀寫作準備 | | | 用于確定掛接在同一總線上 DS18B20 的個數和識別 64 位 ROM 地址,為操作各器件作好準備 | | | 忽略 64 位 ROM 地址,直接向 DS18B20 發溫度變換命令,適用于單片機工作 | | | 該指令執行后,只有溫度超過設定值上限或下限的片子才做出響應 |
③發送存儲器指令,具體存儲器指令如表2.7所示。 ④進行數據通信。 表2.7 DS18B20 的存儲器指令集 | 指令代碼 | 指令功能 | | | 啟動 DS18B20 進行溫度轉換,轉換時間最長為 500us (典型為 200us ),結果存入內部 9 字節 RAM 中 | | | | | 4EH | 發出向內部 RAM 的第 3 、 4 字節寫上、下限溫度數據命令,緊跟該命令之后,是傳送兩字節的數據 | | 48H | 將 RAM 中第 3 、 4 字節的內容復制到 EEPROM 中 | | | EEPROM 中的內容恢復到 RAM 中的第 3 、4 字節 | | | 讀 DS18B20 的供電模式,寄生供電時 DS18B20 發送“ 0 ”,外接電源供電 DS18B20 發送“ 1 ” |
五、DS18B2的外部電路圖根據設計要求,傳感器的硬件電路圖如圖2.11所示。 
圖2.11 DS18B20外部電路圖
第三節 液晶顯示電路設計
液晶屏顯示模塊與數碼管相比,它顯得更為專業、漂亮。液晶顯示屏以其微功耗、體積小、顯示內容豐富、超薄輕巧、使用方便等諸多優點,在通訊、儀器儀表、電子設備、家用電器等低功耗應用系統中得到越來越廣泛的應用,使這些電子設備的人機界面變得越來越直觀形象,目前已廣泛應用于電子表、計算器、IC卡電話機、液晶電視機、便攜式電腦、掌上型電子玩具、復 印機、傳真機等許多方面。1602字符型液晶模塊(帶背光),是目前工控系統中使用最為廣泛的液晶屏之一。 一、1602的引腳功能介紹1602采用標準的16腳接口,其引腳功能如下: 第1腳:VSS為電源地,接GND。
第2腳:VDD接5V正電源。
第3腳:VL為液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度。
第4腳:RS為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。
第5腳:RW為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和RW共同為低電平時可以寫入指令或者顯示地址,當RS為低電平RW為高電平時可以讀忙信號,當RS為高電平RW為低電平時可以寫入數據。
第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令。
第7~14腳:D0~D7為8位雙向數據線。
第15腳:BLA背光電源正極(+5V)輸入引腳。
第16腳:BLK背光源負極,接GND 二、1602的標準字庫
1602液晶模塊內帶標準字庫,內部的字符發生存儲器(CGROM)已經存儲了192個5×7點陣字符,這些字符如表3.1所示。另外還有字符生成RAM(CGRAM)512字節,供用戶自定義字符,這些字符有:阿拉伯數字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母“A”。
指令4:顯示開關控制。 D:控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示 C:控制光標的開與關,高電平表示有光標,低電平表示無光標 B:控制光標是否閃爍,高電平閃爍,低電平不閃爍; 指令5:光標或顯示移位 S/C:高電平時移動顯示的文字,低電平時移動光標; 指令6:功能設置命令 DL:高電平時為4位總線,低電平時為8位總線 N:低電平時為單行顯示,高電平時雙行顯示 F: 低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符; 指令7:字符發生器RAM地址設置; 指令8:DDRAM地址設置; 指令9:讀忙信號和光標地址 BF:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數據,如果為低電平表示不忙; 指令10:寫數據; 指令11:讀數據; 液晶顯示模塊是一個慢顯示器件,所以在執行每條指令之前一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符。表3.3是1602的內部顯示地址。 表3.3 1602的內部顯示地址
比如第二行第一個字符的地址是40H,那么是否直接寫入40H就可以將光標定位在第二行第一個字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位D7恒定為高電平1所以實際寫入的數據應該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。 四、1602的外部電路圖根據設計要求,1602液晶顯示器的硬件電路圖如圖3.1所示。 
圖3.1 LCD1602外部連接圖 第三章 數字溫度計軟件設計流程及程序
單片機應用系統軟件可采用匯編語言和C語言進行編寫,由于匯編語言的可讀性和可移植性都較差,采用匯編語言編寫的單片機應用程序不但周期長,而且調試和排錯也比較困難。為了提高編制單片機應用程序的效率,改善程序的可讀性和可移植性,采用C語言無疑是一種最好的選擇。C語言具有一般高級語言的特點,還能直接對計算機的硬件進行操作,表達和運算能力也較強。所以,本設計采用C語言編寫程序。 第一節 主程序設計 
主程序的主要功能是負責讀出并處理DS18B20的測量的當前溫度值、實時顯示溫度值。溫度測量每1s進行一次,這樣可以在一秒之內測量一次被測溫度。系統主程序首先對系統進行初始化,然后顯示開機畫面。由于單片機沒有停止指令,所以可以設計系統程序不斷地循環執行上述顯示結果。其程序流程如圖3.1所示。 第二節 溫度值讀取程序設計
 讀出溫度子程序的主要功能是讀出RAM中的9字節,在讀出時需進行CRC校驗,校驗有錯時不進行溫度數據的改寫。其程序流程圖如圖2.1。溫度轉換命令子程序主要是發溫度轉換開始命令,當采用12位分辨率時轉換時間約為750毫秒,在本程序設計中采用1秒顯示程序延時法等待轉換的完成。 由于DS18B20有嚴格的通信協議來保證各位數據傳輸的正確性和完整性。該協議定義了三種時序:初始化時序、讀時序、寫時序。我們應很好的理解和完成DS18B20各時序程序設計。 一、DS18B20的延時程序首先,設置DS18B20的延時子程序,以利于各時序的精確延時等待,其具體程序如下。 void delay_18B20(unsigned int i) {
while(i--); } 該延時的指令條數為2×i+5,每一條指令的周期為2us。 二、DS18B20的初始化程序由第二章對DS18B20的介紹可知,對DS18B20的初始化要求主 CPU 將數據線下拉 500us ,然后釋放,DS18B20 收到信號后等待16us~60us 左右,然后發出 60us~240us 的存在低脈沖,主 CPU 收到此信號后表示復位成功。根據初始化時序的要求編寫初始化子程序如下: void Init_DS18B20(void)
{
DQ = 1; //復位 DS18B20通信端口
delay_18B20(8); //稍做延時
DQ = 0; //單片機將DQ拉低,準備復位DS18B20
delay_18B20(125); //精確延時510us delay_18B20(125);
DQ = 1; //拉高數據線
delay_18B20(4); //稍做延時后 while(DQ) { NOP() ; //等待DS18B20的ACK信號,如果DQ =0則初始化成功;DQ =1則初始化失敗 } }
delay_18B20(60); DQ=1; //拉高數據線,準備數據傳輸
} 三、DS18B20的讀時序程序DS18B20的讀時序分為讀0時序和讀1時序兩個過程,對于DS18B20的讀時隙是從主機把單總線拉低之后,在15秒之內就得釋放單總線,以讓DS18B20把數據傳輸到單總線上。DS18B20在完成一個讀時序過程,至少需要60us才能完成。由此,DS18B20的寫一個字節程序如下。
static void ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--) //每次讀取一位,8個字節需要讀取8次
{ dat>>=1; //低位先發
DQ = 0; // 高電平拉成低電平時讀周期開始
NOP();
DQ = 1; // 必須寫一,否則讀出的數據將是不預期的數據 delay_18B20(2);
if(DQ)
dat︱=0x80; delay_18B20(30); DQ=1; NOP(); //恢復一線總線 }
return(dat);
} 四、DS18B20的寫時序程序DS18B20的寫時序仍然分為寫0時序和寫1時序兩個過程。對于DS18B20寫0時序和寫1時序的要求不同,當要寫0時序時,單總線要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確地采樣I/O總線上的“0”電平,當要寫1時序時,單總線被拉低之后,在15us之內就得釋放單總線。由此,DS18B20的讀字一個節程序如下。
void WriteOneChar(uchar cmd)
{
unsigned char i=0; for (i=8; i>0; i--)
{ if(cmd&0x01) //地位在前
{DQ = 0; //從高電平拉至低電平時,寫周期的開始
delay_18B20(20); //60us到120us延時
DQ = 1;} //發送數據 else { DQ = 0; delay_18B20(20); DQ = 0;} delay_18B20(30); //等待DS18B20采樣 cmd>>=1; //從最低位到最高位傳入
} } 第三節 計算溫度程序設計
計算溫度子程序將RAM中讀取值進行BCD碼的轉換運算,并進行溫度值正負的判定,其程序流程圖如圖3.3。
第四節 顯示數據及刷新程序設計
顯示數據刷新子程序主要時對顯示緩沖器中的顯示數據進行刷新操作,當最高顯示位為零時將符號顯示位移入下一位。程序流程圖如圖4.1。
 結 論
溫度的檢測和控制是一個經典的課題,生活中的各個領域里經常需要檢測和控制某一特定環境的溫度,使之能夠穩定在一定的溫度范圍之內。這就要求系統對溫度的檢測具有足夠的精度和實時性,控制要有足夠的精度,并且盡可能具有較低的成本,這樣的產品才具有實用價值。DS18B20恰好具有這樣的優勢,由于其可直接輸出數字量,不需要AD轉換,測溫范圍大,與單片機容易接口,成為原來廣為使用的熱電阻、熱電偶的理想替代品。因此本設計可以應用于多種溫度控制場合。 本設計敘述了智能溫度計的設計,包括硬件組成和軟件的設計。該系統在硬件設計上主要是通過其核心控制器件AT89S51將采集到的數字溫度電壓值經單片機處理得到相應的溫度值,送到LCD顯示器,以數字形式顯示測量的溫度。整個系統的軟件編程就是通過C語言對單片機AT89S51實現其控制功能,整個系統結構緊湊,簡單可靠,操作靈活,功能強大,性能價格比高,較好的滿足了現代農業生產和科研的需要。 通過仿真軟件Proteus仿真后,很好的實現了溫度值得顯示,滿足課程要求,具體的仿真圖如下: 結束語
畢業設計完成了,在這個過程中使我覺得不論從理論知識還是從實際設計中都學到了不少知識。首先我要感謝我的導師劉雙臨老師,他在我完成論文的過程中,給予了我很大的幫助。 在論文開始的初期,由于對于溫度計的認識很少,我對于論文的結構以及文獻選取等方面都有很多問題,通過對溫度計原理的認識,并比較多種不同的設計方案,最后確定了設計溫度計的功能以及各類功能模塊的器件選擇。并在導師的幫助下,找到相應的各類資料,并大致整理,粗略閱讀了一遍。認識到很多知識以前都沒有接觸過,所以制定了一個大致的計劃,希望能夠很好的完成論文。 在接下來的畢業設計中,由于在公司實習,相對在畢業設計的時間少了很多。主要是深入對前期溫度設計方案的認識。在這期間,很多知識都是第一次接觸,通過查找了很多知識,認真閱讀,有了一定的認識。相對困難最大的還是硬件的設計和程序編寫方面。這些都需要很多的實際設計經驗,第一次設計起來覺得相當吃力,剛開始不知道從何下手。后來,通過老師的指導,在實際的設計過程中,都有了很大進步。 在畢業設計的過程中,還認識到理論知識對實踐有很大的指導作用,只有在正確的理論指導下,才能設計出合乎實際需要的硬件電路。但同時,實際的應用中與理論又會有一定出入,所以要很好的掌握好理論與實際的矛盾。 這次畢業設計是對大學三年所學知識的一次實際應用與檢閱,同時對自學能力提出了很高的要求,所以平時的學習離開思考,就是嚴重的錯誤,不能只為了考試而學習。并且在學習的過程中更要廣闊的接觸各方面的知識,才能更好的為以后的工作打好基礎。 在我寫論文的過程中,劉雙臨老師給我提供了許多資料,并對實踐中出現的問題給予了耐心的解答,完稿之后在百忙中仔細閱讀,給出修改意見。在設計過程中,還有很多同學給予我各方面的支持,在此對他們都表示誠摯感謝!
|