單片機之數(shù)字溫度計_第1頁
單片機之數(shù)字溫度計_第2頁
單片機之數(shù)字溫度計_第3頁
單片機之數(shù)字溫度計_第4頁
單片機之數(shù)字溫度計_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、HEFEI UNIVERSITY單片機應用課程設計 設計題目: 數(shù)字溫度計 班 級:10電子信息工程(2)成員信息:趙鵬飛 1005072024朱 奎 1005074037劉良虎 1005072029指導老師:胡學友 高先和 2013年6月28日目錄1引言22 設計方案32.1設計思路32.2方案論證與選擇33 設計實現(xiàn)63.1系統(tǒng)硬件設計63.2 系統(tǒng)軟件設計73.2.1 主程序設計73.2.2 溫度數(shù)據(jù)采集程序設計93.2.3 LCD顯示子程序113.2.4 溫度設置、聲光報警程序設計114 總結135 參考文獻13附錄114附錄215附錄315 摘要:數(shù)字溫度計系統(tǒng)由溫度數(shù)據(jù)采集模塊、L

2、CD顯示模塊以及聲光上限報警等模塊組成。它主要以單片機STC89C52為控制核心,利用溫度傳感器DS18B20采用單總線協(xié)議、直接將被測環(huán)境的溫度轉化成數(shù)字信號的特點,加之LCD12864液晶數(shù)據(jù)顯示與有源蜂鳴器和LED的聲光報警顯示,實現(xiàn)了環(huán)境溫度的實時監(jiān)測被測溫點溫度及聲光上限報警等功能。關鍵詞:STC89C52 DS18B20 LCD顯示 蜂鳴器 LED聲光報警1引言數(shù)字溫度計以單片機STC89C52為控制核心,利用溫度傳感器DS18B20采用單總線協(xié)議、直接將被測環(huán)境的溫度轉化成數(shù)字信號的特點,數(shù)據(jù)傳送給單片機處理,最終并用LCD12864顯示環(huán)境溫度數(shù)據(jù)。還可以通過鍵盤來改變設定的溫

3、度上限值,如果溫度超過設置上限,則有源蜂鳴器和LED聲光顯示報警。根據(jù)題目,其基本要求有:(1)能夠實現(xiàn)現(xiàn)實環(huán)境溫度;(2)能夠保存使用時間內的溫度最大值最小值;(3)能實現(xiàn)設置溫度上下限以及聲光報警;對此題目分析我們采用的模塊為:(a)溫度采集模塊:本系統(tǒng)使用DS18B20,其測量溫度范圍為-55+125,它可以實現(xiàn)基本要求第(1)項要求。(b)鍵盤模塊:通過功能上下鍵改變溫度的上下限值,可以設置溫度上下限報警即可實現(xiàn)基本要求的第(3)項。(c)溫度報警模塊:聲光報警器通過軟件的編程控制,可以實現(xiàn)基本要求的第(3)項。(d)顯示模塊:模塊使用LCD12864來顯示被測溫度點的溫度數(shù)據(jù),再在軟

4、件程序中加入時鐘模塊,可顯示此時的時間信息。(e)時鐘模塊:顯示當前時間,更好的顯示當前環(huán)境。2 設計方案2.1設計思路溫度采集模塊DS18B20溫度處理模塊STC89C52顯示模塊12864溫度上下限設置模塊:獨立按鍵聲光報警模塊:LED,蜂鳴器 圖1 系統(tǒng)設計框圖2.2方案論證與選擇1、溫度傳感器的選擇方案一:選擇熱電阻溫度傳感器熱電阻傳感器由熱電阻、連接導線及顯示儀表組成,熱電阻也可以與溫度變送器連接,將溫度轉換為標準電流信號輸出。它是利用導體或半導體的電阻值隨溫度變化而變化的原理進行測溫的一種傳感器溫度計。熱電阻廣泛應用于測量-200+850°C范圍內的溫度,少數(shù)情況下,低溫

5、可測至1K,高溫達1000°C。但是它靈敏度比較低,容易受到環(huán)境的信號干擾,也容易受到前置放大器溫漂的影響,不適合測量微小的溫度變化。方案二:選擇熱電偶溫度傳感器它的原理是不同的并行金屬片根據(jù)溫度變化會產(chǎn)生一個微弱的感應電勢差,此電勢差可依據(jù)相應關系轉化為溫度數(shù)值。一般熱電偶測溫范圍較寬,較適合于500°C以上的測溫,可滿足-50+1600°C 的溫度測量,有的可以達+2000°C。其測量精度高,當其直接與被測對象接觸時,不受中間介質的影響。在使用時,它能將溫度信號轉換成熱電勢信號, 通過電氣測量儀表的配合, 就能測量出被測的溫度。在測量高溫方面比較適合

6、,但是在常溫下精準度不夠,價錢也比較昂貴。方案三:選擇數(shù)字化溫度傳感器DS18B20它采用獨特的單線接口方式,當其與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通訊;在使用中不需要任何外圍元件;可用數(shù)據(jù)線供電,供電電壓范圍+3.0V+5.5V;測溫范圍為-55+125,最高測溫分辨率為0.0625。當在-10+85范圍內,可確保測量誤差不超過0.5;在-55+125范圍內,測量誤差也不超過2。用戶可自行設定非易失性的報警上下限值。DS18B20的轉換速率比較高,進行9位的溫度值轉換只需93.75ms;適配各種單片機或系統(tǒng)。通過以上方案的對比分析,根據(jù)題目需求的測溫范圍10

7、65,誤差<0.5,方案一中熱電阻溫度傳感器的測量精度不能滿足需求,方案二中的溫度傳感器測溫精度高,溫度范圍較廣,但是其需要用外圍A/D電路來處理測量到的模擬溫度信號,并且此傳感器的價格比較高,由此一來加大了系統(tǒng)的復雜性以及制作成本。方案三中的DS18B20分辨力最高可達0.0625,在1065溫度范圍內誤差小于0.5,通過軟件可以進一步進行溫度補償,減小誤差,使其小于0.2,其轉換時間最大小于750ms。且DS18B20為數(shù)字型溫度傳感器,測量到的是數(shù)字信號,無需進行模數(shù)轉換,方案簡單易行,因此我們選擇用DS18B20作為系統(tǒng)的溫度測量傳感器。2、溫度數(shù)據(jù)顯示模塊方案一: 采用LED數(shù)

8、碼管顯示LED數(shù)碼管顯示溫度數(shù)據(jù)相對來說簡單方便且應用廣泛,同時程序編程也相對較簡單,在光線較強的地方也能夠很好的顯示,受環(huán)境的影響較小。但是,數(shù)碼管占用的IO口較多,且顯示字符相對狹隘。方案二: 采用LCD1602液晶顯示LCD1602液晶模塊內部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點陣字符圖形,這些字符有:阿拉伯數(shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼。這樣在顯示溫度數(shù)據(jù)的時候就比較的直觀,同時在一定程度上也增加了字符的豐富感。與數(shù)碼管相比該模塊有如下優(yōu)點:位數(shù)多,可顯示32位,32個數(shù)碼管體積相當龐大了;顯示內容豐富,可顯示所有數(shù)字

9、和大、小寫字母;程序簡單。如果用數(shù)碼管動態(tài)顯示,會占用很多時間來刷新顯示,而1602自動完成此功能。方案三:采用LCD12864顯示LCD12864是一種內部含有國標一級、二級簡體中文字庫的點陣圖形液晶顯示模塊。其顯示分辨率為128×64點;內置漢字字庫(可提供8192個16×16點陣漢字、簡繁體可選)和128個16×8點陣字符; LCD12864采用4位/8位并行、2線或3線串行多種接口方式,其接口方式靈活,操作簡單、方便。該模塊構成的液晶顯示方案與同類型的圖形點陣液晶顯示模塊相比,不論硬件電路結構或顯示程序都要簡潔得多,且該模塊的價格也略低于相同點陣的圖形液晶

10、模塊?;陬}目中的需求,考慮到溫度的顯示過程中還需要顯示其他的提示信息,比如英文單詞,漢字,以及數(shù)字時鐘的顯示??偟膩碚f,需要顯示的信息量比較大,因此我們組用LCD12864顯示溫度及數(shù)字時鐘等信息。3、溫度上限聲光報警模塊方案一:有源蜂鳴器有源蜂鳴器工作的理想信號是直流電,通常標示為VDC、VDD等。因為蜂鳴器內部有一簡單的振蕩電路,能將恒定的直流電轉化成一定頻率的脈沖信號,從而輸出磁場交變,帶動鉬片振動發(fā)音。因其內部帶有振蕩源,故有源蜂鳴器只需要通上其正常的工作直流電壓就可以有效的工作,并且其連接線路簡單,占用的程序儲存空間小。方案二:無源蜂鳴器無源蜂鳴器工作的理想信號是方波,無源蜂鳴器沒

11、有內部驅動電路,即內部不帶振蕩源。如果給預直流信號,蜂鳴器是不響應的,因為磁路恒定,故鉬片不能振動發(fā)音,所以必須用2kHz5kHz的方波信號去控制驅動它,那樣它才能順利的工作。有源蜂鳴器和無源蜂鳴器的根本區(qū)別是產(chǎn)品對輸入信號的要求不一樣;有源蜂鳴器直接接上額定電源(新的蜂鳴器在標簽上都有注明)就可連續(xù)發(fā)聲;而無源蜂鳴器則和電磁揚聲器一樣,需要接在音頻輸出電路中才能發(fā)聲。綜合以上的對比論證分析,聲音報警我們組選擇體積小、重量輕、結構牢靠、廣泛應用在各種需要發(fā)聲的電器設備、電子制作和單片機等電路中的有源蜂鳴器,即方案一。而光報警我們選擇體積小、亮度高的LED發(fā)光二極管。4、鍵盤模塊方案一:矩陣鍵盤

12、在單片機通信中,運用到較多的鍵盤就是矩陣鍵盤。矩陣鍵盤可以用較少的IO口就能得到較多的按鍵。這樣,一個端口(如P1口)就可以構成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯。比如再多加一條線就可以構成20鍵的鍵盤,然而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時,采用矩陣法來做鍵盤是合理的。 方案二:獨立按鍵獨立按鍵只是一個按鍵,只能控制一條線路的通斷。當需要用到多個按鍵時,會占用大量的IO口。其編程比較簡單。本無線溫度遙測系統(tǒng)中,需要運用到鍵盤的地方并不多,只有在復位和設定溫度上下限時需要用到。因此可以選擇五個獨立按鍵來作為系統(tǒng)的控制

13、。一個復位鍵,四個設定按鍵,分別是溫度上限上調鍵、下調鍵以及溫度下限上調鍵、下調鍵。3 設計實現(xiàn)3.1系統(tǒng)硬件設計溫度采集工作由DS18B20溫度傳感器來完成。 我們需要完成的是在DS18B20完成采集溫度的工作后通過單片機進行存儲數(shù)值與實際溫度之間的轉換,將采集到的信息轉換成溫度數(shù)據(jù)。通過設置TH和TL的值可以設置溫度的上下限報警。設置時可以定義一個溫度數(shù)據(jù),在軟件程序中實現(xiàn)通過按鍵可以改變它的值,然后放入TH和TL中,這樣就可以實現(xiàn)自由地設定溫度的上下限,從而實現(xiàn)報警。當DS18B20接收到溫度轉換命令后,開始啟動轉換。轉換完成后的溫度值就以16位帶符號擴展的二進制補碼形式存儲在高速暫存存

14、儲器的第1,2字節(jié)。單片機讀取溫度時,一次會讀兩字節(jié)共16位的數(shù)據(jù),讀完后將低11位的二進制數(shù)轉換成十進制數(shù)后再乘以0.0625就是我們所需要的實際數(shù)值。前5個數(shù)字為符號位,這五位數(shù)字同時變化。當前五位為1時,讀取的溫度為負值,需要將所測得的數(shù)值取反加1再乘以0.0625才是實際的溫度數(shù)據(jù)。當前五個數(shù)據(jù)為0時,直接將測得的數(shù)據(jù)乘以0.0625即可得到實際的溫度數(shù)據(jù)。這樣獲得的溫度數(shù)據(jù)誤差是在0.5范圍內,這是由于DS18B20測溫時的固有誤差所造成的。其典型性能曲線如下圖2所示:圖2 DS18B20測溫時性能曲線圖2中實際的溫度曲線偏離了理論的溫度值,這樣的誤差是不可避免的。但是我們可以通過軟

15、件方面上的程序來實現(xiàn)溫度補償,減小誤差。在溫度高的地方減去高出的溫度,在溫度低的地方加上低的溫度。3.2 系統(tǒng)軟件設計 3.2.1 主程序設計無線溫度遙測系統(tǒng)的軟件設計主要由主程序、溫度數(shù)據(jù)采集與處理程序、溫度設置聲光報警程序及LED顯示子程序等組成。主程序進來之后首先對各個模塊初始化,經(jīng)初始化后一個DS18B20開始采集溫度,然后用一個LCD1602顯示被測點所采集到的溫度,從而實現(xiàn)溫度測量的功能,最后通過溫度設定、聲光報警模塊來設定溫度的上下限,并實現(xiàn)聲光報警的功能。主程序的流程圖如下圖3所示:初始化DS18b20、LCD12864顯示模塊、時鐘模塊設置溫度上下限值DS18B20采集溫度數(shù)

16、據(jù)開始單片機轉換并處理溫度數(shù)據(jù),進行溫度補償?shù)?2864顯示溫度、時間、上下限值等溫度是否超過預置值聲光報警YN結束圖3 主程序流程圖3.2.2 溫度數(shù)據(jù)采集程序設計開始對DS18B20初始化,接著利用寫函數(shù)命令將CCH寫入DS18B20命令跳過讀ROM指令,然后向DS18B20寫入44H命令,用來啟動DS18B20進行溫度轉換,并將轉換結果存入內部12字節(jié)的RAM中,最后通過一定的延時后向DS18B20寫入BE命令讀出內部RAM中的12字節(jié)的溫度數(shù)據(jù),讀出來的溫度用LCD1602顯示出來。其中在用LCD顯示采集溫度數(shù)據(jù)之前,為了減小測量誤差,本套系統(tǒng)用到了溫度補償功能。在軟件設計時利用If語

17、句判斷測出溫度的大小,然后根據(jù)DS18B20數(shù)字溫度計讀數(shù)與恒溫源誤差特性曲線來放大、縮小要顯示的溫度,顯示時精確到了0.01位。具體程序流程圖如下圖4、5 所示:圖4 DS18B20讀寫字節(jié)子程序流程圖開始DS18B20初始化向DS18B20寫入CCH、44H命令啟動進行溫度轉換向DS18B20寫入CCH、BE命令讀出RAM中的溫度數(shù)據(jù)讀出的溫度數(shù)據(jù)轉換成十進制的溫度Temp,并精確到0.01位NN65<Temp<850<Temp<15000045<Temp<65 YY YTemp=Temp-0.3Temp=Temp+0.1Temp=Temp-0.2LCD

18、顯示Temp結束圖5 DS18B20溫度處理與溫度補償流程圖3.2.3 LCD顯示子程序程序里用LCD12864來顯示溫度值與時間信息。LCD12864用來顯示DS18B20發(fā)送的溫度數(shù)據(jù)、溫度上下限、以及日期和時間,其中的顯示可以利用主函數(shù)產(chǎn)生中斷,T0計時器來記時,從而實現(xiàn)時間的變化。主要的操作流程圖如下圖6開始 定義各引腳初始化LCD12864利用寫操作命令將數(shù)據(jù)指針定位利用寫操作命令將字符串寫入,并顯示出來結束圖6 LCD顯示子程序3.2.4 溫度設置、聲光報警程序設計通過接受,進入LCD顯示模塊界面后,按鍵輸入,按加減鍵分別上調和下調設定報警溫度值,當實時溫度值超過或低于溫度設定值時

19、會驅動蜂鳴器發(fā)聲,并點亮發(fā)光二極管,實現(xiàn)聲光報警。溫度設置、聲光報警程序設計圖如下圖7所示:入口功能鍵按下? N N Y下調設定值 確認按下?延時消抖減鍵按下?加鍵按下?確認按下?上調設定值延時消抖顯示設定溫度值確認按下? N Y N YN N Y N YN N Y Y判斷退出界面?取消報警溫度超出設定值?聲光報警Y NY N Y返回圖7 溫度設定、聲光報警子程序4 總結通過為期兩周的單片機的實訓,我們對單片機有了比較系統(tǒng)的了解。對于老師給我們的課程設計題目,拿到題目后,我們組趙鵬飛、劉良虎、朱奎三個人聚在了一起對每個題進行了認真分析。我們通過了討論,研究,最終決定選擇了數(shù)字溫度計這個題目。之

20、所以選擇這道題是因為我們三個對這道題都必要感興趣,覺得這個系統(tǒng)很有意思,而且對我們電子專業(yè)的學生來說做這道題比較合適。確定了題目后,我們一組三人便開始圍繞題目要求,在網(wǎng)上搜索資料,在圖書館查閱相關書籍。經(jīng)過一定的了解之后,我們又開始對每個模塊選擇方案,按照題目的各項要求,逐一排查,選擇出最佳的方案。方案決定之后,便對每個模塊進行軟硬件設計,對于這塊內容主要參考網(wǎng)上的知識。經(jīng)過幾天的努力,終于把這個關于數(shù)字溫度計做出來。方案有許多不足之處,希望老師能夠給予指正。5 參考文獻1 郭天祥 51單片機C語言教程北京:電子工業(yè)出版社,2010年10月2 譚浩強 C程序設計.北京:清華大學出版社,1991

21、年3 張崇,于曉琳,劉建平 無線收發(fā)一體芯片NRF2401及其應用. 2004年4 單片無線收發(fā)集成電路原理與應用、黃智偉編著.北京:人民郵電出版社,2005年9月5 黃智偉 無線數(shù)據(jù)通信IC原理與應用北京:北京航空航天大學出版社,2004年附錄1系統(tǒng)電路原理圖 附錄2實物圖 附錄3部分程序及注釋主函數(shù)#include<reg52.h> /包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義#include<stdio.h>#include "12864.h"#include "delay.h"#include &quo

22、t;keyscan.h"#include "ds1302.h"#include "18b20.h"#define uchar unsigned char#define uint unsigned intuchar code dis1="Temp: " uchar code dis2="TempL: "uchar code dis3="TempH: "uchar code dis5="星期"void main (void) int temp;float tempera

23、ture;char displaytemp16;/定義顯示區(qū)域臨時存儲數(shù)組Delay(100);Init_12864();WriteString(2,1,dis1); /顯示現(xiàn)實溫度WriteString(3,1,dis2); /顯示上限WriteString(4,1,dis3); /顯示下限 WriteString(1,6,dis5); /顯示下限 /set_rtc();while(1) temp=ReadTemperature(); temperature=(float)temp*0.0625; if(5<temperature<15) temperature=temperat

24、ure+0.1; /溫度補償功能 if(45<temperature<65) temperature=temperature-0.2; /溫度補償功能 if(65<temperature<85) temperature=temperature-0.3; /溫度補償功? sprintf(displaytemp," % 6.2f",temperature);/打印溫度值 WriteString(2,4,displaytemp);/顯示測量溫度 read_rtc(); /讀時間 time_pros();/時間轉換 display(); /顯示時間 keys

25、can(temperature); 18B20溫度傳感器#include"delay.h"#include"18b20.h"bit Init_DS18B20(void) bit dat=0; DQ = 1; /DQ復位 DelayUs2x(5); /稍做延時 DQ = 0; /單片機將DQ拉低 DelayUs2x(200); /精確延時 大于 480us 小于960us DelayUs2x(200); DQ = 1; /拉高總線 DelayUs2x(50); /1560us 后 接收60-240us的存在脈沖 dat=DQ; /如果x=0則初始化成功,

26、x=1則初始化失敗 DelayUs2x(25); /稍作延時返回 return dat;/*- 讀取一個字節(jié)-*/unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-) DQ = 0; / 給脈沖信號 dat>>=1; DQ = 1; / 給脈沖信號 if(DQ) dat|=0x80; DelayUs2x(25); return(dat);/*- 寫入一個字節(jié)-*/void WriteOneChar(unsigned char dat) unsigned c

27、har i=0; for (i=8; i>0; i-) DQ = 0; DQ = dat&0x01; DelayUs2x(25); DQ = 1; dat>>=1; DelayUs2x(25);/*- 讀取溫度-*/unsigned int ReadTemperature(void)unsigned char a=0;unsigned int b=0;unsigned int t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳過讀序號列號的操作WriteOneChar(0x44); / 啟動溫度轉換DelayMs(10);Init_DS18B20();WriteOneChar(0xCC); /跳過讀序號列號的操作 WriteOneChar(0xBE); /讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度a=ReadOneChar(); /低位b=ReadOneChar(); /高位b<<=8;t=a+b;return(t);聲光報警#include "de

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論