題目 基于單片機的數字溫度計設計
作 者 姓 名 張 三
專 業 班 級
學 號
指導教師姓名
摘要
隨著國民經濟的發展,人們需要對各中加熱爐、熱處理爐、反應爐和鍋爐中溫度進行監測和控制。采用單片機來對他們控制不僅具有控制方便,簡單和靈活性大等優點,而且可以大幅度提高被控溫度的技術指標,從而能夠大大的提高產品的質量和數量。
在日常生活及工業生產過程中,經常要用到溫度的檢測及控制,溫度是生產過程和科學實驗中普遍而且重要的物理參數之一。在生產過程中,為了高效地進行生產,必須對它的主要參數,如溫度、壓力、流量等進行有效的控制。溫度控制在生產過程中占有相當大的比例。溫度測量是溫度控制的基礎,技術已經比較成熟。傳統的測溫元件有熱電偶和熱敏電阻,而熱電偶和熱電阻測出的一般都是電壓,再轉換成對應的溫度,這些方法相對比較復雜,需要比較多的外部硬件支持。本文采用一種相對比較簡單的方式來測量。
本文介紹一種基于AT89C51單片機的溫度測量及報警電路,該電路采用DS18B20作為溫度監測元件,測量范圍-50℃-110℃,使用LED數碼管顯示,能設置溫度報警上下限。正文著重給出了軟硬件系統的各部分電路,介紹了集成溫度傳感器DS18B20的原理,AT89C51單片機的功能和應用等。本文設計的電路通過Proteus軟件仿真實現,并在單片機開發板中進行了實現。
ABSTRACT
Along with the development of national economy , people need to monitor and the control all kinds of the temperature of heating furnace,the heat-treatment furnace, the reactor and the boiler. Not only using the single chip machine can make control becoming convenient, simple and flexibility, but also it enhance the technical specification of controled temperature in large scale, which as a result can improve the quality and quantity.of products efficiently.
During daily life and industrial production process, the detection and control of temperature always play an important role, temperature is one of the general but important physical parameter in the production process and scientific experiments. In the production process, in order to carry out the production efficiently, it’s necessary to control its main parameters effectively, such as temperature, pressure, flow control, etc. Temperature control occupy a large proportion in the production process. Temperature measurement is the basis of temperature control,which technology has been matured. The thermocouple and thermal resistance are traditional temperature measured components, which receivce voltage and then replace into the corresponding temperature.These methods are rather complex relatively, which requiring a large number of external hardware support. In this paper,we use a relatively simple method to measure it.
This paper introduced a temperature measurement and alerting electrocircuits based MCU-AT89C51, the electrocircuits uses DS18B20 as its temperature sensor with measuring scope range from -50℃to100℃ which uses the seven segments LED to display the current temperature and it can set the warning limitation. The paper focuses on providing the components electrocircuit of the software and hardware system, and introduces the theory of DS18B20, the founctions and application of AT89C51.The electrocircuits designed in this paper was realized and simulated in Proteus,which has also been realized in the developing-board of MCU.
目錄
摘 要
ABSTRACT
第一章 緒論
1.1課題背景及研究意義
1.2國內外現狀
1.3設計目的
1.4課題的主要工作
1.5本文研究內容
第二章 系統概述
2.1方案選擇
2.1.1主控制部分
2.1.2 溫度傳感器部分
2.1.3顯示電路部分
2.1.4報警電路部分
2.2系統總體方案
第三章 系統硬件設計
3.1 80C51單片機的介紹
3.1.1引腳功能說明
3.1.2時鐘電路
3.1.3復位電路
3.2 LED顯示部分
3.2.1 LED數碼管的管腳
3.2.2數碼管驅動電路
3.3 DS18B20部分
3.3.1 DS18B20管腳功能
3.3.2 DS18B20驅動電路
3.3.3DS18B20測溫原理
3.3.4 DS18B20工作過程
3.3.5 DS18B20使用中的注意事項
3.4報警電路部分設計
3.5按鍵部分
第四章 系統軟件設計
4.1主程序流程圖
4.2數碼管顯示子程序流程圖
4.3 DS18B20讀取溫度子程序流程圖
4.4按鍵掃描子程序流程圖
4.5報警子程序流程圖
第五章 系統仿真
5.1仿真軟件簡介
5.1.1 Keil軟件簡介
5.1.2 Proteus簡介
5.2仿真結果
5.2.1仿真總體設計圖
5.2.2溫度顯示仿真
5.2.3溫度設定仿真
5.2.4報警仿真
第六章 系統開發板實現
6.1 AT89C51單片機開發板簡介
6.2開發板連線及效果圖
第七章 課題總結
7.1系統評價
7.1.1系統的優點
7.1.2系統的缺點
7.1.3將來可能改進的方向
7.2課題結論
參考文獻
致 謝
附 錄:源程序代碼
第一章緒論 1.1課題背景及研究意義 隨著新技術的不斷開發與應用,近年來單片機發展十分迅速,一個以微機應用為主的新技術革命浪潮正在蓬勃興起,單片機的應用已經滲透到電力、冶金、化工、建材、機械、食品、石油等各個行業。傳統的溫度采集方法不僅費時費力,而且精度差,單片機的出現使得溫度的采集和數據處理問題能夠得到很好的解決。溫度是工業對象中的一個重要的被控參數。傳統的控制方式以不能滿足高精度,高速度的控制要求,如溫度控制表溫度接觸器,其主要缺點是溫度波動范圍大,由于主要通過控制接觸器的通斷時間比例來達到改變加熱功率的目的,受儀表本身誤差和交流接觸器的壽命限制,通斷頻率很低。近幾年來快速發展了多種先進的溫度控制方式,如:PID控制,模糊控制,神經網絡及遺傳算法控制等。這些控制技術大大的提高了控制精度,不但使控制變得簡便,而且使產品的質量更好,降低了產品的成本,提高了生產效率[1]。 本設計使用單片機作為核心進行控制。單片機具有集成度高,通用性好,功能強,特別是體積小,重量輕,耗能低,可靠性高,抗干擾能力強和使用方便等獨特優點,在數字、智能化方面有廣泛的用途。 1.2國內外現狀 溫度控制系統在國內各行各業的應用雖然已經十分廣泛,但從國內生產的溫度控制器來講,總體發展水平仍然不高,同日本、美國、德國等先進國家相比,仍然有著較大的差距。成熟的溫控產品主要以“點位”控制及常規的PID控制器為主,它們只能適應一般溫度系統控制,而用于較高控制場合的智能化、自適應控制儀表,國內技術還不十分成熟,形成商品化并廣泛應用的控制儀表較少。隨著我國經濟的發展及加入WTO,我國政府及企業對此都非常重視,對相關企業資源進行了重組,相繼建立了一些國家、企業的研發中心,開展創新性研究,使我國儀表工業得到了迅速的發展。 自70年代以來,由于工業過程控制的需要,特別是在微電子技術和計算機技術的迅猛發展,以及自動控制理論和設計方法發展的推動下,國外溫度控制系統發展迅速,并在智能化自適應參數自整定等方面取得成果。在這方面以日本、美國、德國、瑞典等國技術領先,并且都生產出了一批商品化的性能優異的溫度控制器及儀器儀表,目前,國外溫度控制系統及儀表正朝著高精度智能化、小型化等方面快速發展。 溫度控制系統在國內各行各業的應用雖然已經十分廣泛,但從國內生產的溫度控制器來講,總體發展水平仍然不高,同日本、美國、德國等先進國家相比,仍然有著較大的差距。成熟的溫控產品主要以“點位”控制及常規的PID控制器為主,它們只能適應一般溫度系統控制,而用于較高控制場合的智能化、自適應控制儀表,國內技術還不十分成熟,形成商品化并廣泛應用的控制儀表較少。 1.3設計目的 1. 鞏固、加深和擴大單片機應用的知識面,提高綜合及靈活運用所學知識解決工業控制的能力。 2. 培養針對課題需要,選擇和查閱有關手冊、圖表及文獻資料的自學能力,提高組成系統、編程、調試的動手能力。 3. 通過對課題設計方案的分析、選擇、比較、熟悉單片機用系統開發、研制的過程,軟硬件設計的方法、內容及步驟。 4.通過設計實現一定的智能功能,培養學術能力和科研能力。 1.4課題的主要工作 本設計主要研究單片機控制的數字溫度計,本溫度計屬于多功能溫度計,可以設置上下報警溫度,當溫度不在設置范圍內時,可以報警。 主要要求如下: 1.設置溫度范圍為: -50℃-110℃; 2.精度誤差小于0.5℃,LED數碼直讀顯示; 3. LED數碼直讀顯示; 4.可以任意設定溫度的上下限報警功能。 1.5本文研究內容 本文是基于AT89C51單片機,采用數字溫度傳感器DS18B20,利用DS18B20不需要A/D轉換,可直接進行溫度采集顯示,報警的數字溫度計設計。包括傳感器數據采集電路,溫度顯示電路,上下限報警調整電路,單片機主板電路等組成。
第二章 系統概述 2.1方案選擇 該系統主要由主控部分、溫度傳感部分、顯示部分、報警部分等電路組成,每部分實現的方法都有很多種,現把常見的實現方案列出并進行比較。 2.1.1主控制部分 方案一:采用PC機實現 此方案采用PC機實現。它可在線編程,可在線仿真的功能,這讓調試變得方便。且人機交互友好。但是PC機輸出信號不能直接與DS18B20通信。需要通過RS232電平轉換兼容,硬件的合成在線調試,較為繁瑣,很不簡便。而且在一些環境比較惡劣的場合,PC機的體積大,攜帶安裝不方便,性能不穩定,給工程帶來很多麻煩。 方案二:采用AT89C51八位單片機實現 此方案采用AT89C51八位單片機實現。單片機軟件編程的自由度大,可通過編程實現各種各樣的算術算法和邏輯控制。而且體積小,硬件實現簡單,安裝方便。既可以單獨對多DS18B20控制工作,還可以與PC機通信。運用主從分布式思想,由一臺上位機(PC微型計算機),下位機(單片機)多點溫度數據采集,組成兩級分布式多點溫度測量的巡回檢測系統,實現遠程控制。另外AT89C51在工業控制上也有著廣泛的應用,編程技術及外圍功能電路的配合使用都很成熟。 最終方案:采用AT89C51八位單片機實現 2.1.2 溫度傳感器部分 溫度檢測系統有共同的特點:環境復雜、布線分散、測量點多、現場離監控室遠等,這都會使檢測系統的穩定性和可靠性下降 。因此需要針對這些特點選擇合適的測溫方案,常見的有以下三種方案。 方案一:采用熱敏電阻 采用熱敏電阻,可滿足40攝氏度至90攝氏度測量范圍,但熱敏電阻精度、重復性、可靠性較差,對于檢測1攝氏度的信號是不適用的。而且在溫度測量系統中,采用單片溫度傳感器,比如AD590,LM35等.但這些芯片輸出的都是模擬信號,必須經過A/D轉換后才能送給計算機,這樣就使得測溫裝置的結構較復雜。另外,這種測溫裝置的一根線上只能掛一個傳感器,不能進行多點測量.即使能實現,也要用到復雜的算法,一定程度上也增加了軟件實現的難度[2]。 方案二:采用熱電偶溫差電路 采用熱電偶溫差電路測溫,溫度檢測部分可以使用低溫熱偶,熱電偶由兩個焊接在一起的異金屬導線所組成,熱電偶產生的熱電勢由兩種金屬的接觸電勢和單一導體的溫差電勢組成。通過將參考結點保持在已知溫度并測量該電壓,便可推斷出檢測結點的溫度。數據采集部分則使用帶有A/D 通道的單片機,在將隨被測溫度變化的電壓或電流采集過來,進行A/D 轉換后,就可以用單片機進行數據的處理,在顯示電路上,就可以將被測溫度顯示出來。熱電偶的優點是工作溫度范圍非常寬,且體積小,但是它們也存在著輸出電壓小、容易遭受來自導線環路的噪聲影響以及漂移較高的缺點,并且這種設計需要用到A/D 轉換電路,感溫電路比較麻煩[2]。 方案三:采用數字溫度芯片DS18B20測量溫度 采用數字溫度芯片DS18B20測量溫度,輸出信號全數字化。便于單片機處理及控制,省去傳統的測溫方法的很多外圍電路。且該芯片的物理化學性很穩定,它能用做工業測溫元件,此元件線形較好。在0—100攝氏度時,最大線形偏差小于1攝氏度。DS18B20的最大特點之一采用了單總線的數據傳輸,由數字溫度計DS1820和微控制器AT89C51構成的溫度測量裝置,它直接輸出溫度的數字信號,可直接與計算機連接。這樣,測溫系統的結構就比較簡單,體積也不大,且由于AT89C51可以帶多個DSB1820,因此可以非常容易實現多點測量。輕松的組建傳感器網絡[3]。 采用溫度芯片DS18B20測量溫度,可以體現系統芯片化這個趨勢。部分功能電路的集成,使總體電路更簡潔,搭建電路和焊接電路時更快。而且,集成塊的使用,有效地避免外界的干擾,提高測量電路的精確度。所以集成芯片的使用將成為電路發展的一種趨勢。 最終方案:采用數字溫度芯片DS18B20測量溫度 2.1.3顯示電路部分 方案一:LED數碼管顯示: 成本低、電路設計簡單、亮度高、夜間及光照差的情況無需額外光源; 方案二:LCD1602顯示 顯示信息豐富、電路設計簡單,但是價格相對較高,而且夜間沒有背光。 最終方案:LED數碼管顯示 2.1.4報警電路部分 方案一:單片機控制繼電器控制220V鬧鈴及閃光燈; 方案二:通過單片機控制蜂鳴器報警,控制發光二極管交替點亮形成閃光效果; 最終方案:通過單片機控制蜂鳴器報警,控制發光二極管交替點亮形成閃光效果。 2.2系統總體方案 經過各部分方案選擇與匯總,得到系統總體方案。系統主控電路采用AT89C51單片機,溫度傳感器部分采用DS18B20,顯示部分4位LED共陰極數碼管,報警部分采用蜂鳴器與發光二極管實現報警,系統如圖2-1所示。 
圖2-1 系統總體圖
第三章 系統硬件設計 3.1 80C51單片機的介紹 80C51有40個引腳,4個8位并行I/O口,1個全雙工異步串行口,同時內含5個中斷源,2個優先級,2個16位定時/計數器。80C51的存儲器系統由4K的程序存儲器(掩膜ROM),和128B的數據存儲器(RAM)組成[4]。單片機引腳如圖3-1所示。 3.1.1引腳功能說明 
圖3-1 AT89C51單片機管腳圖 1.時鐘電路引腳XTAL1 和XTAL2: (1)XTAL2(18 腳):接外部晶體和微調電容的一端;在8051 片內它是振蕩電路反相放大器的輸出端,振蕩電路的頻率就是晶體固有頻率。若需采用外部時鐘電路時,該引腳輸入外部時鐘脈沖。 要檢查8051/8031 的振蕩電路是否正常工作,可用示波器查看XTAL2 端是否有脈沖信號輸出。 (2)XTAL1(19 腳):接外部晶體和微調電容的另一端;在片內它是振蕩電路反相放大器的輸入端。在采用外部時鐘時,該引腳必須接地。 2.控制信號引腳RST,ALE,PSEN 和EA: (1)RST/VPD(9 腳):RST 是復位信號輸入端,高電平有效。當此輸入端保持備用電源的輸入端。當主電源Vcc 發生故障,降低到低電平規定值時,將+5V 電源自動兩個機器周期(24個時鐘振蕩周期)的高電平時,就可以完成復位操作。RST 引腳的第二功能是VPD,即接入RST 端,為RAM 提供備用電源,以保證存儲在RAM 中的信息不丟失,從而合復位后能繼續正常運行。 (2)ALE/PROG(30 腳):地址鎖存允許信號端。當8051 上電正常工作后,ALE 引腳不斷向外輸出正脈沖信號,此頻率為振蕩器頻率fOSC 的1/6。CPU 訪問片外存儲器時,ALE 輸出信號作為鎖存低8 位地址的控制信號。 平時不訪問片外存儲器時,ALE 端也以振蕩頻率的1/6 固定輸出正脈沖,因而ALE 信號可以用作對外輸出時鐘或定時信號。如果想確定8051/8031 芯片的好壞,可用示波器查看ALE端是否有脈沖信號輸出。如有脈沖信號輸出,則8051/8031 基本上是好的。 ALE 端的負載驅動能力為8 個LS 型TTL(低功耗甚高速TTL)負載。 此引腳的第二功能PROG 在對片內帶有4KB EPROM 的8751 編程寫入(固化程序)時,作為編程脈沖輸入端。 (3)PSEN(29 腳):程序存儲允許輸出信號端。在訪問片外程序存儲器時,此端定時輸出負脈沖作為讀片外存儲器的選通信號。此引肢接EPROM 的OE 端(見后面幾章任何一個小系統硬件圖)。PSEN 端有效,即允許讀出EPROM/ROM 中的指令碼。PSEN 端同樣可驅動8個LS 型TTL 負載。要檢查一個8051/8031 小系統上電后CPU 能否正常到EPROM/ROM 中讀取指令碼,也可用示波器看PSEN 端有無脈沖輸出。如有則說明基本上工作正常。 (4)EA/Vpp(31 腳):外部程序存儲器地址允許輸入端/固化編程電壓輸入端。當EA 引腳接高電平時,CPU只訪問片內EPROM/ROM并執行內部程序存儲器中的指令,但當PC(程序計數器)的值超過0FFFH(對8751/8051 為4K)時,將自動轉去執行片外程序存儲器內的程序。當輸入信號EA 引腳接低電平(接地)時,CPU 只訪問外部EPROM/ROM 并執行外部程序存儲器中的指令,而不管是否有片內程序存儲器。對于無片內ROM 的8031 或8032,需外擴EPROM,此時必須將EA 引腳接地。此引腳的第二功能是Vpp 是對8751 片內EPROM固化編程時,作為施加較高編程電壓(一般12V~21V)的輸入端。 3.輸入/輸出端口P0/P1/P2/P3: (1)P0口(P0.0~P0.7,39~32 腳):P0口是一個漏極開路的8 位準雙向I/O口。作為漏極開路的輸出端口,每位能驅動8 個LS 型TTL負載。當P0 口作為輸入口使用時,應先向口鎖存器(地址80H)寫入全1,此時P0 口的全部引腳浮空,可作為高阻抗輸入。作輸入口使用時要先寫1,這就是準雙向口的含義。在CPU 訪問片外存儲器時,P0口分時提供低8 位地址和8 位數據的復用總線。在此期間,P0口內部上拉電阻有效。 (2)P1口(P1.0~P1.7,1~8 腳):P1口是一個帶內部上拉電阻的8 位準雙向I/O口。P1口每位能驅動4 個LS 型TTL 負載。在P1口作為輸入口使用時,應先向P1口鎖存地址(90H)寫入全1,此時P1口引腳由內部上拉電阻拉成高電平。 (3)P2口(P2.0~P2.7,21~28 腳):P2口是一個帶內部上拉電阻的8 位準雙向I/O口。P口每位能驅動4個LS 型TTL 負載。在訪問片外EPROM/RAM 時,它輸出高8 位地址。 (4)P3口(P3.0~P3.7,10~17 腳):P3口是一個帶內部上拉電阻的8 位準雙向I/O口。P3口每位能驅動4個LS型TTL負載。P3口與其它I/O 端口有很大的區別,它的每個引腳都有第二功能,詳見表3-1。 表3-1 P3口的第二功能
3.1.2時鐘電路 時鐘電路用于產生單片機工作所需要的時鐘信號,而時序所研究的是指令執行中各地信號之間的相互關系。單片機本身就如一個復雜的同步時序電路,為了保證同步工作方式的實現,電路應在唯一的時鐘信號控制下嚴格地按時序進行工作。單片機的時鐘電路,如圖3-2所示。 
圖3-2 時鐘振蕩電路 一般電容C1,C2取22pF左右,晶體X1的振蕩頻率范圍是1.2MHz~12 MHz 。晶體振蕩頻率高, 則系統的時鐘頻率也高, 單片機運行速度也就快。MCS-51在通常應用情況下,使用振蕩頻率為的6MHz或12MHz。本設計采用12MHz的振蕩頻率。 3.1.3復位電路 單片機復位的條件是:必須使RST/VPD 或RST引腳(9)加上持續二個機器周期(即24個振蕩周期)的高電平。單片機常見的復位電路如圖3-3所示。該電路除具有上電復位功能外,若要復位,只需按圖3-3中的“復位”鍵,此時電源VCC經電阻R2、R8分壓,在RST端產生一個復位高電平。 
圖3-3復位電路 3.2 LED顯示部分 3.2.1 LED數碼管的管腳 本設計采用4位LED共陰極數碼管顯示,數碼管均為7段數碼管,共有12個管腳,其中1—4管腳用于位選,5—12腳顯示段碼,數碼管如圖3-4所示。 圖3-4 LED數碼管管腳圖 3.2.2數碼管驅動電路 驅動電路使用2片74HC573鎖存器驅動。74HC573是8位數據鎖存器,主要用于數碼管、按鍵等等的控制與驅動。驅動電路如圖3-5所示。 
圖3-5 數碼管驅動電路 3.3 DS18B20部分 DALLAS 最新單線數字溫度傳感器DS18B20是一種新型的“一線器件”,其體積更小、更適用于多種場合、且適用電壓更寬、更經濟。DALLAS 半導體公司的數字化溫度傳感器DS18B20是世界上第一片支持“一線總線”接口的溫度傳感器。溫度測量范圍為-55~+125 攝氏度,可編程為9位~12 位轉換精度,測溫分辨率可達0.0625攝氏度,分辨率設定參數以及用戶設定的報警溫度存儲在EEPROM 中,掉電后依然保存。被測溫度用符號擴展的16位數字量方式串行輸出;其工作電源既可以在遠端引入,也可以采用寄生電源方式產生;多個DS18B20可以并聯到3 根或2 根線上,CPU只需一根端口線就能與諸多DS18B20 通信,占用微處理器的端口較少,可節省大量的引線和邏輯電路。因此用它來組成一個測溫系統,具有線路簡單,在一根通信線,可以掛很多這樣的數字溫度計,十分方便[5]。DS18B20如圖3-6所示。 
圖3-6 DS18B20引腳圖 1.DS18B20有4個主要的數據部件: (1)光刻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為符號位。 (3)DS18B20溫度傳感器的存儲器 DS18B20溫度傳感器的內部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的EEPRAM,后者存放高溫度和低溫度觸發器 TH、TL和結構寄存器。 (4)配置寄存器。 2.DS18B20內部結構及功能: DS18B20的內部結構如圖4-7所示。主要包括:寄生電源,溫度傳感器,64位ROM和單總線接口,存放中間數據的高速暫存器RAM,用于存儲用戶設定溫度上下限值的TH和TL觸發器,存儲與控制邏輯,8位循環冗余校驗碼(CRC)發生器等7部分 3.3.1 DS18B20管腳功能 DS18B20引腳功能如表3-2所示[7]。 表3-2 DS18B20管腳功能表 | | | | | | | | 數據輸入/輸出引腳。開漏單總線接口引腳。當被用著在寄生電源下,也可以向器件提供電源。 | | | 可選擇的VDD引腳。當工作于寄生電源時此引腳必須接地。 |
3.3.2 DS18B20驅動電路 在硬件上,DS18B20與單片機的連接有兩種方法,一種是VCC接外部電源,GND接地,I/O與單片機的I/O線相連;另一種是用寄生電源供電,此時VDD、GND接地,I/O接單片機I/O。無論是內部寄生電源還是外部供電,I/O口線要接上拉電阻。我們采用的是第一種方法,如圖3-7所示 
圖3-7 DS18B20驅動電路 3.3.3DS18B20測溫原理 DS18B20測溫原理:低溫度系數晶振的振蕩頻率受溫度影響很小,用于產生固定頻率的脈沖信號送給計數器1。高溫度系數晶振 隨溫度變化其振蕩率明顯改變,所產生的信號作為計數器2的脈沖輸入。計數器1和溫度寄存器被預置在-55℃所對應的一個基數值。計數器1對 低溫度系數晶振產生的脈沖信號進行減法計數,當計數器1的預置值減到0時,溫度寄存器的值將加1,計數器1的預置將重新被裝入,計數器1重 新開始對低溫度系數晶振產生的脈沖信號進行計數,如此循環直到計數器2計數到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數值即 為所測溫度。 3.3.4 DS18B20工作過程 1.溫度的讀取: DS18B20在出廠時以配置為12位,讀取溫度時共讀取16位,所以把后11位的2進制轉化為10進制后在乘以0.0625便為所測的溫度,還需要判斷正負。前5個數字為符號位,當前5位為1時,讀取的溫度為負數;當前5位為0時,讀取的溫度為正數。 2.DS18B20的初始化: (1)先將數據線置高電平“1”。 (2)延時(該時間要求的不是很嚴格,但是盡可能的短一點)。 (3)數據線拉到低電平“0”。 (4)延時750微秒(該時間的時間范圍可以從480到960微秒)。 (5)數據線拉到高電平“1”。 (6)延時等待(如果初始化成功則在15到60毫秒時間之內產生一個由DS18B20所返回的低電平“0”。據該狀態可以來確定它的存在,但是應注意不能無限的進行等待,不然會使程序進入死循環,所以要進行超時控制 (7)若CPU讀到了數據線上的低電平“0”后,還要做延時,其延時的時間從發出的高電平算起(第(5)步的時間算起)最少要480微秒。 (8)將數據線再次拉高到高電平“1”后結束。 3.DS18B20的寫操作: (1)數據線先置低電平“0”。 (2)延時確定的時間為15微秒。 (3)按從低位到高位的順序發送字節(一次只發送一位)。 (4)延時時間為45微秒。 (5)將數據線拉到高電平。 (6)重復上(1)到(6)的操作直到所有的字節全部發送完為止。 (7)最后將數據線拉高。 4.DS18B20的讀操作: (1)將數據線拉高“1”。 (2)延時2微秒。 (3)將數據線拉低“0”。 (4)延時15微秒。 (5)將數據線拉高“1”。 (5)延時15微秒。 (6)讀數據線的狀態得到1個狀態位,并進行數據處理。 (7)延時30微秒。 3.3.5 DS18B20使用中的注意事項 DS18B20 雖然具有測溫系統簡單、測溫精度高、連接方便、占用口線少等優點,但在實際應用中也應注意以下幾方面的問題: 1. DS18B20 從測溫結束到將溫度值轉換成數字量需要一定的轉換時間,這是必須保證的,不然會出現轉換錯誤的現象,使溫度輸出總是顯示85。 2. 在實際使用中發現,應使電源電壓保持在5V 左右,若電源電壓過低,會使所測得的溫度精度降低。 3. 較小的硬件開銷需要相對復雜的軟件進行補償,由于DS1820與微處理器間采用串行數據傳送,因此,在對DS1820進行讀寫編程時,必須嚴格的保證讀寫時序,否則將無法讀取測溫結果。在使用PL/M、C等高級語言進行系統程序設計時,對DS1820操作部分最好采用匯編語言實現。 4. 在DS18B20的有關資料中均未提及單總線上所掛DS18B20 數量問題,容易使人誤認為可以掛任意多個DS18B20,在實際應用中并非如此,當單總線上所掛DS18B20 超過8 個時,就需要解決微處理器的總線驅動問題,這一點在進行多點測溫系統設計時要加以注意。 5. 在DS18B20測溫程序設計中,向DS18B20 發出溫度轉換命令后,程序總要等待DS18B20的返回信號,一旦某個DS18B20 接觸不好或斷線,當程序讀該DS18B20 時,將沒有返回信號,程序進入死循環,這一點在進行DS18B20硬件連接和軟件設計時也要給予一定的重視[8]。 3.4報警電路部分設計 閃光燈部分主要由發光二極管LED組成,紅燈交替閃爍實現閃光功能以表示報警狀態。單片機的P1.0和P1.1口分別控制LED燈D1和D2的開關,在兩個二極管加1k的保護電阻,防止電流過大燒壞二極管[6]。 蜂鳴器由NPN三極管驅動,由單片機P1.3口提供控制信號,并傳送至三極管的基極,引起蜂鳴器發聲。報警電路圖如圖3-7所示。 
圖3-7 報警電路 3.5按鍵部分 本系統按鍵部分設置了三個按鍵,分別是“SET”、“ADD”、“DEC”鍵,分別實現功能選定和報警溫度的加減。按鍵分別經三個上拉電阻接+5V電源。按鍵放開時,單片機管腳輸入高電平;按鍵按下時,單片機管腳接地,輸入低電平。按鍵采用軟件消抖。按鍵電路設計如圖3-8所示。 
圖3-8 按鍵電路
第四章 系統軟件設計 系統程序主要包括:主程序、數碼管顯示子程序、DS18B20讀取溫度子程序、按鍵掃描子程序、報警子程序等五部分組成[9]。 4.1主程序流程圖 主程序實現按鍵的判斷,在無按鍵按下的情況下讀取并顯示溫度;若有按鍵按下,則進行報警上下限溫度的設定;每次讀取顯示溫度后與報警溫度比較,若正常則繼續讀取溫度,否則將進行報警。程序流程圖如圖4-1所示。 
圖4-1 主程序流程圖 4.2數碼管顯示子程序流程圖 數碼管顯示子程序:先讀取需要顯示的數值t,然后判斷t的正負;若t為負則在最高位顯示“-“號,然后掃描顯示t的百位、十位、各位、小數;若t不為負則直接掃描顯示。程序流程圖如圖4-2所示。 
圖4-2數碼管顯示子程序流程圖 4.3 DS18B20讀取溫度子程序流程圖 該子程序實現了DS18B20的初始化,并讀出溫度數據,最后進行數值轉換并返回該數值。流程圖如圖4-3所示。 
圖4-3 讀取溫度子程序流程圖 4.4按鍵掃描子程序流程圖 按鍵采用掃描查詢方式,其中按鍵采用了軟件消抖。其中功能標志位func=0時,顯示當前溫度;func=1時,設置溫度上限;func=2時,設置溫度下限;func>=3時,令func=1,并顯示當前溫度。程序流程圖如圖4-4所示。 
圖4-4 按鍵掃描子程序流程圖 4.5報警子程序流程圖 該子程序實現系統的聲光報警,程序流程圖如圖4-5所示。 
圖4-5報警子程序流程圖
第五章 系統仿真 系統仿真過程主要用到了Keil和Proteus兩個軟件,其中Keil用于程序的編譯以及生成.hex格式的燒錄文件,Proteus用于系統的仿真。 5.1仿真軟件簡介 5.1.1 Keil軟件簡介 Keil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發系統,與匯編相比,C語言在功能上、結構性、可讀性、可維護性上有明顯的優勢,因而易學易用。用過匯編語言后再使用C來開發,體會更加深刻。Keil C51軟件提供豐富的庫函數和功能強大的集成開發調試工具,全Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil C51生成的目標代碼效率非常之高,多數語句生成的匯編代碼很緊湊,容易理解。在開發大型軟件時更能體現高級語言的優勢。Keil C51軟件是一個基于32位Windows環境的應用程序,支持C語言和匯編語言編程,其6.0以上的版本將編譯和仿真軟件統一為μVision(通常稱為μV2)。軟件圖標如圖5-1所示。 
圖5-1 Keil軟件 5.1.2 Proteus簡介 Proteus軟件是英國Labcenter electronics公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機及外圍器件。它是目前最好的仿真單片機及外圍器件的工具。其處理器模型支持8051、PIC、AVR、ARM、8086等,2010年即將增加Cortex和DSP系列處理器,并持續增加其他系列處理器模型。在編譯方面,它支持IAR、Keil和MPLAB等多種編譯器[10]。軟件圖標如圖5-2所示。 
圖5-2 Proteus軟件 該軟件的特點是: 1. 容易實現單片機仿真。 2. 提供了多種虛擬儀器。如示波器、邏輯分析儀、信號發生器等,調試非常方便。 3. 提供軟件調試功能,同時支持第三方的軟件編譯和調試環境,如Keil、Matlab等軟件。 4. 具有強大的原理圖繪制功能。 5.2仿真結果 5.2.1仿真總體設計圖 總體設計圖如圖5-3所示。 
圖5-3仿真總體設計圖 5.2.2溫度顯示仿真 當溫度在正常范圍時,LED數碼管正常顯示當前溫度。如圖5-4所示。 
圖5-4溫度顯示仿真 5.2.3溫度設定仿真 當按下一次SET鍵時,可以通過ADD鍵和DEC鍵設置報警溫度上限;當按下二次SET鍵時,可以通過ADD鍵和DEC鍵設置報警溫度下限;按下三次SET鍵時,返回,并顯示當前溫度。如圖5-5所示。 
圖5-5 溫度設定仿真 5.2.4報警仿真 設置環境溫度為31.0,高于報警溫度上限30.0。此時仿真系統中,蜂鳴器發出警報聲,二極管交替閃光報警。
第六章 系統開發板實現 6.1 AT89C51單片機開發板簡介 該開發板采用獨立模塊式結構,大部分模塊都是完全獨立的,僅有電源部分連接,信號接口部分默認懸空,需要用到該器件時,可用杜邦線連接到對應的單片機端口,不使用時懸空即可。這種方式大大提高了自由度,模塊完全獨立,可以自由配置端口。開發板集成了AT89C51單片機、DS18B20溫度傳感模塊、4位共陰極LED數碼管、74HC573鎖存器、獨立按鍵、發光二極管等模塊,可完全滿足本設計需求。開發板總體圖如圖6-1(a)所示。 6.2開發板連線及效果圖 如圖6-1所示:當系統接通電源后,顯示當前溫度,如圖6-1(a)所示;當第一次按下SET鍵時,系統顯示報警上限溫度“30.0”,此時按ADD鍵和DEC鍵,可實現上限溫度的設定,如圖6-1(b)所示;當第二次按下SET鍵時,系統顯示報警下限溫度“20.0”,此時按ADD鍵和DEC鍵,可實現下限溫度的設定,如圖6-1(c)所示;當再次按下SET鍵時,系統返回,并顯示當前溫度,如圖6-1(d)所示。 
圖6-1系統開發板實現
第七章 課題總結 7.1系統評價 系統評價就是客觀、公正的從各個方面評價系統的各項功能。本部分將具體從三方面闡述:優點,缺點以及將來可能改進的方向。 7.1.1系統的優點 (1)該系統實現了溫度的實時轉換,而且轉換精度達到0.1度。 (2)溫度顯示清晰,無需額外光源,可適應各種光照環境。 (3)提供溫度報警上下限的自由設定。 (4)溫度不正常時,高響度的蜂鳴器報警和醒目的閃光燈設計。 (5)設計簡單,易于維護,低功耗,成本低廉。 7.1.2系統的缺點 (1)由于時間及經費原因,未能實現系統的封裝與產品化。 (2)測溫范圍較窄,無法測量超過125度的高溫。 (3)系統的穩定性還有待加強。 7.1.3將來可能改進的方向 (1)將系統與PC機連接,實現通過PC機的遠程控制; (2)實現智能化,如加入語音報告溫度,按鍵改進為觸摸屏,已獲得更好的用戶體驗; (3)將系統進行封裝,并將體積壓縮,以實現設計的產品化。 7.2課題結論 經過不斷實踐與探索,基于單片機的數字溫度計設計己經完成,基本上達到了預期的設計要求和目的。該系統可實現溫度的實時轉換顯示,以及設置溫度報警上下限的功能。該數字溫度計的轉換精度高,速度快,操作簡單,功耗低,成本低廉。 通過課程設計,我學到了很多知識,也提高了自己的科研和學術能力。在設計中搜集資料,調試程序的過程讓我受益匪淺。課程設計不僅是對我在大學所學知識的一個綜合運用,也是一次增長知識和經驗的好機會,同時也使我學會了許多處理、解決問題的方法,大大提高了自己的動手能力,為即將走上工作崗位打下了良好的基礎。 由于時間和經費原因,系統的功能還有待完善,希望以后有機會對該系統進行進一步的設計和改進。 總之,該課題得到了成功的實現。
附 錄:源程序代碼
- //課程設計題目《基于單片機的數字溫度計設計》//
- //學校: 齊魯***************//
- //學院: *********//
- //專業: ***************//
- //姓名: *****************//
- //學號: **************//
- //時間: *****************//
-
- #include "reg51.h"
- #define DataPort P0 //定義數據端口程序中遇到DataPort 則用P0 替換
- sbit LATCH1=P2^2; //定義鎖存使能端口 段鎖存
- sbit LATCH2=P2^3; // 位鎖存
- sbit DQ = P1^0; //定義ds18B20總線IO
- sbit set=P3^5; //溫度設置切換鍵
- sbit add=P3^4; //溫度加
- sbit dec=P3^3; //溫度減
- sbit bj=P1^3; //蜂鳴器
- sbit fg1=P1^1; //指示燈
- sbit fg2=P1^2;
- unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f}; // 顯示段碼值0~9
- unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,
- 0xef,0xdf,0xbf,0x7f}; //分別對應相應的數碼管點亮,即位碼
- unsigned char TempData[8]; //存儲顯示值的全局變量
- int func=0,i=0; //設置溫度的標志位
- unsigned int high=280,low=200,tempera=0;
-
- /****************************延時子函數***************************************/
- void delay(int num)//延時函數
- {
- while(num--) ;
- }
-
- /******************************初始化DS18B20*******************************/
- void Init_DS18B20() //初始化ds1820
- {
- unsigned char x=0;
- DQ = 1; //DQ復位
- delay(8); //稍做延時
- DQ = 0; //單片機將DQ拉低
- delay(80); //精確延時 大于 480us
- DQ = 1; //拉高總線
- delay(14);
- x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
- delay(20);
- }
-
- /*********************DS18B20讀一個字節***********************************/
- unsigned char ReadOneChar() //讀一個字節
- {
- unsigned char i=0;
- unsigned char dat = 0;
- for (i=8;i>0;i--)
- {
- DQ = 0; // 給脈沖信號
- dat>>=1;
- DQ = 1; // 給脈沖信號
- if(DQ)
- dat|=0x80;
- delay(4);
- }
- return(dat);
- }
-
- /****************************DS18B20寫一個字節*******************************/
- void WriteOneChar(unsigned char dat) //寫一個字節
- {
- unsigned char i=0;
- for (i=8; i>0; i--)
- {
- DQ = 0;
- DQ = dat&0x01;
- delay(5);
- DQ = 1;
- dat>>=1;
- }
- }
-
- /***************************讀取溫度并進行轉換*******************************/
- unsigned int Readtemp() //讀取溫度
- {
- unsigned char a=0;
- unsigned char b=0;
- unsigned int t=0;
- float tt=0;
- Init_DS18B20();
- WriteOneChar(0xCC); // 跳過讀序號列號的操作
- WriteOneChar(0x44); // 啟動溫度轉換
- Init_DS18B20();
- WriteOneChar(0xCC); //跳過讀序號列號的操作
- WriteOneChar(0xBE); //讀取溫度寄存器
- a=ReadOneChar(); //連續讀兩個字節數據 //讀低8位
- b=ReadOneChar(); //讀高8位
- t=b;
- t<<=8;
- t=t|a; //兩字節合成一個整型變量。
- tt=t*0.0625; //得到真實十進制溫度值,因為DS18B20可以精確到0.0625
- //度,所以讀回數據的最低位代表的是0.0625度
- t= tt*10+0.5; //放大十倍,這樣做的目的將小數點后第一位也轉換為可顯
- //示數字,同時進行一個四舍五入操作。
- return(t);
- }
-
- /**********************LED數碼管顯示**************************/
- void display(unsigned int temp)
- {
- TempData[0]=0;
- if(temp&0x8000)
- {
- TempData[0]=0x40; //負號標志
- temp=~temp; // 取反加1
- temp +=1;
- }
-
- if(temp/1000==0)
- TempData[1]=0;
- else
- TempData[0]=DuanMa[temp/1000]; //百位溫度
- if((temp/1000==0)&&((temp%1000)/100==0)) //消隱
- TempData[1]=0;
- else
- TempData[1]=DuanMa[(temp%1000)/100]; //十位溫度
- TempData[2]=DuanMa[(temp%1000)%100/10]|0x80; //個位溫度,帶小數點
- TempData[3]=DuanMa[((temp%1000)%100)%10];
- for(i=0;i<4;i++)
- {DataPort=0; //清空數據,防止有交替重影
- LATCH1=1; //段鎖存
- LATCH1=0;
-
- DataPort=WeiMa[i]; //取位碼
- LATCH2=1; //位鎖存
- LATCH2=0;
-
- DataPort=TempData[i]; //取顯示數據,段碼
- LATCH1=1; //段鎖存
- LATCH1=0;
-
- delay(50);}
- }
-
- /******************************報警子程序************************************/
- void baojing()
- {
-
-
- for(i=0;i<200;i++)
- {
- delay(100);
- bj=!bj;fg1=0; fg2=1;
- }
- bj=0; //防止一直給喇叭通電造成損壞
- for(i=0;i<100;i++)
- {
- delay(500); fg1=1;fg2=0;
- }
-
- }
-
-
- /***********************鍵盤掃描子程序**************************************/
- void keyscan()
- {
- //最高溫度和最低溫度標志位
- if(set==0)
- {
- while(1)
- {
- delay(500); //消抖
- if(set==0)
- {
-
- while(!set)
- display(high);
- func++;
- }
- if(func==1)
- {
- display(high);
- if(add==0)
- {
- while(!add)
- display(high);
- high+=1;
- }
- if(dec==0)
- {
- while(!dec)
- display(high);
- high-=1;
- }
- }
- if(func==2)
- {
- display(low);
- if(add==0)
- {
- while(!add)
- display(low);
- low+=1;
- }
- if(dec==0)
- {
- while(!dec)
- display(low);
- low-=1;
- }
- }
- if(func>=3)
- {
- func=0;
- break;
- }
- }
- }
- }
-
- /***************************主程序*****************************************/
- void main()
- {Init_DS18B20();
- WriteOneChar(0xCC); // 跳過讀序號列號的操作
- WriteOneChar(0x44); // 啟動溫度轉換
- while(1)
- {
- while(func==0)
-
- {display(Readtemp());delay(10);fg1=1;fg2=1;
- if((set&&(func==0))&&((Readtemp()<=low)|(Readtemp()>=high)))
- {baojing();}
- keyscan();
- }
- keyscan();
-
- }
- }
- /************************結束*****************************************/</font>
復制代碼
完整的Word格式文檔51黑下載地址:
智能儀器設計---參考.rar
(6.96 MB, 下載次數: 56)
2018-8-26 02:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|