基于51單片機與DS18B20的數字溫度計設計_第1頁
基于51單片機與DS18B20的數字溫度計設計_第2頁
基于51單片機與DS18B20的數字溫度計設計_第3頁
基于51單片機與DS18B20的數字溫度計設計_第4頁
基于51單片機與DS18B20的數字溫度計設計_第5頁
已閱讀5頁,還剩30頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、精選優質文檔-傾情為你奉上安徽農業大學課程設計報告基于單片機的DS18B20數字溫度計設計學生姓名杜恒院系名稱物理與電子工程學院專業名稱電子信息工程班 級2008 級 6 班學 號指導教師汪文蝶完成時間2011年 5 月 20 日基于單片機的DS18B20數字溫度計設計學生姓名:杜恒 指導老師:汪文蝶內容摘要:隨著現代信息化技術的飛速發展和傳統工業改造的逐步實現,能獨立工作的溫度檢測系統已廣泛應用于各種不同的領域。本文介紹了一個基于STC89C52單片機和數字溫度傳感器DS18B20的測溫系統,并用LED數碼管顯示溫度值,易于讀數。系統電路簡單、操作簡便,能任意設定報警溫度并可查詢最近的10個

2、溫度值,系統具有可靠性高、成本低、功耗小等優點。關鍵詞:單片機 數字溫度傳感器 溫度計1 引言隨著人們生活水平的不斷提高,單片機控制無疑是人們追求的目標之一,它所給人帶來的方便是不可否定的,各種數字系統的應用也使人們的生活更加舒適。數字化控制、智能控制為現代人的工作、生活、科研等方面帶來方便。其中數字溫度計就是一個典型的例子。數字溫度計與傳統的溫度計相比,具有讀數方便、測溫范圍廣、測溫精確、功能多樣話等優點。其主要用于對測溫要求準確度比較高的場所,或科研實驗室使用,該設計使用STC89C52單片機作控制器,數字溫度傳感器DS18B20測量溫度,單片機接受傳感器輸出,經處理用LED數碼管實現溫度

3、值顯示。2 設計要求2.1 基本要求實現實時溫度顯示,測溫范圍0500C,誤差50C以內。2.2 擴展功能溫度報警,能任意設定溫度范圍實現聲光報警;每隔10分鐘記錄一次溫度數據,至少能查詢過去10個時刻的溫度情況。3 總體方案設計3.1 方案論證3.1.1 方案一由于本設計是測溫電路,可以使用熱敏電阻之類的器件,將隨被測溫度變化的電壓或電流采樣,進行A/D轉換后就可以用單片機進行數據處理,實現溫度顯示。這種設計需要用到A/D轉換電路,增大了電路的復雜性,而且要做到高精度也比較困難。3.1.2 方案二考慮到在單片機屬于數字系統,容易想到數字溫度傳感器,可選用DS18B20數字溫度傳感器,此傳感器

4、為單總線數字溫度傳感器,起體積小、構成的系統結構簡單,它可直接將溫度轉化成串行數字信號給單片機處理,即可實現溫度顯示。另外DS18B20具有3引腳的小體積封裝,測溫范圍為-55+125攝氏度,測溫分辨率可達0.0625攝氏度,其測量范圍與精度都能符合設計要求。以上兩種方案相比較,第二種方案的電路、軟件設計更簡單,此方案設計的系統在功耗、測量精度、范圍等方面都能很好地達到要求,故本設計采用方案二。3.2 總體設計框圖本方案設計的系統由單片機系統、數字溫度傳感器、LED顯示模塊、按鍵控制模塊、溫度報警模塊組成,其總體架構如下圖1。AT89C2051單片機顯示電路DS18B20、圖1 系統總體方框圖

5、4 硬件設計4.1 單片機系統1. 本設計采用STC89C52單片機作為控制器,完成所有功能的控制,包括:l DS18B20數字溫度傳感器的初始化和讀取溫度值l LED數碼管顯示驅動與控制l 按鍵識別和響應控制l 溫度設置和報警l 溫度值的存儲和讀取2. 單片機系統電路原理圖:圖2 單片機系統原理圖4.2 數字溫度傳感器模塊4.2.1 DS18B20性能l 獨特的單線接口僅需一個端口引腳進行通信l 簡單的多點分布應用l 無需外部器件l 可通過數據線供電l 零待機功耗l 測溫范圍-55+125,以0.5遞增l 可編程的分辨率為912位,對應的可分辨溫度分別為0.5、0.25、0.125和0.06

6、25l 溫度數字量轉換時間200ms,12位分辨率時最多在750ms內把溫度轉換為數字l 應用包括溫度控制、工業系統、消費品、溫度計和任何熱感測系統l 負壓特性:電源極性接反時,傳感器不會因發熱而燒毀,但不能正常工作4.2.2 DS18B20外形及引腳說明圖3 DS18B20外形及引腳l GND:地l DQ:單線運用的數據輸入/輸出引腳l VD:可選的電源引腳4.2.3 DS18B20接線原理圖單總線通常要求接一個約4.7K左右的上拉電阻,這樣,當總線空閑時,其狀態為高電平。圖4 DS18B20接線原理圖4.2.4 DS18B20時序圖主機使用時間隙來讀寫DS18B20的數據位和寫命令字的位。

7、1. 初始化時序如下圖:圖5 DS18B20初始化時序2. DS18B20讀寫時序:圖6 DS18B20讀寫時序4.2.5 數據處理高速暫存存儲器由9個字節組成,其分配如表5所示。當溫度轉換命令發布后,經轉換所得的溫度值以二字節補碼形式存放在 高速暫存存儲器的第0和第1個字節。單片機可通過單線接口讀到該數據,讀取時低位在前,高位在后。圖7 字節分配下表為12位轉化后得到的12位數據,存儲在18B20的兩個8比特的RAM中,二進制中的前面5位是符號位,如果測得的溫度大于0, 這5位為0,只要將測到的數值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數值需要取反加1再乘于0.

8、0625即可得到實際 溫度。 例如+125的數字輸出為07D0H,實際溫度=07D0H*0.0625=2000*0.0625=125。例如-55的數字輸出為FC90H,則應先將11位數據位取反加1得370H(符號位不變,也不作運算),實際溫度=370H*0.0625=880*0.0625=55。可見其中低四位為小數位。圖8 DS18B20溫度數據表4.3 顯示電路LED數碼管顯示采用動態掃描方式,能簡化電路布線,節約單片機I/O端口。段碼和位碼由單片機P0送出,分別用74HC673N鎖存。圖9 數碼管驅動顯示電路4.4 聲光報警電路當溫度超過設定溫度值時,實現聲光報警,蜂鳴器鳴叫、8個發光二極

9、管點亮。蜂鳴器由單片機P23口控制,用三極管驅動,發光二極管接單片機P1口,由74HC673N鎖存。圖10 聲光報警電路4.5 鍵盤輸入電路四個鍵分別連接單片機P34、P35、P36、P37構成獨立式鍵盤,分別實現加、減、報警溫度設定功能鍵和溫度查詢功能鍵。圖11 鍵盤輸入電路5 軟件設計5.1 主程序模塊主程序需要調用3個子程序,分別為:l 實時溫度顯示子程序:驅動數碼管把實時溫度值送出在LED數碼管顯示l 查詢記錄溫度值子程序:查詢過去存儲的溫度值,最多可查詢10個值l 溫度設定、報警子程序:設定報警溫度值,當溫度超過該值時產生報警,即驅動蜂鳴器鳴叫、8個發光二極管發光主程序流程圖:開始定

10、時器初始化、啟動顯示實時溫度溫度設定、報警查詢記錄溫度值圖12 主程序流程圖5.2 讀溫度值模塊讀溫度值模塊需要調用4個子程序,分別為:l DS18B20初始化子程序:讓單片機知道DS18B20在總線上且已準備好操作l DS18B20寫字節子程序:對DS18B20發出命令l DS18B20讀字節子程序:讀取DS18B20存儲器的數據l 延時子程序:對DS18B20操作時的時序控制1. 讀溫度值模塊流程圖:入口數據轉換處理讀取溫度值高低位跳過讀序列號DS18B20初始化延時啟動溫度轉換跳過讀序列號DS18B20初始化返回圖13 讀溫度值子程序流程圖 2. DS18B20初始化子程序流程圖:入口D

11、Q為低電平?延時1560msDQ拉高電平延時>480msDQ復位0稍延時DQ置高電平N返回Y圖14 DS18B20初始化子程序流程圖3. DS18B20寫字節和讀字節子程序流程圖: 圖15 DS18B20寫字節子程序流程圖圖16 DS18B20讀字節子程序流程圖5.3 中斷模塊中斷采用T0方式1,初始值定時為50ms。中斷模塊需調用兩個子程序:l 讀溫度值子程序:定時讀取溫度值,實時更新溫度值l 記錄溫度值子程序:定時記錄溫度值,供查詢使用把這兩個子程序放在中斷的原因是,不會因為調整報警溫度或查詢歷史溫度值而停止更新溫度值和記錄溫度值。中斷模塊流程圖:1秒?計數值加1定時器重置初值中斷入

12、口讀溫度值Y中斷返回記錄溫度值 N圖17中斷模塊流程圖5.4 溫度查詢模塊溫度查詢模塊需要接受按鍵輸入,進入查詢界面后,按加減鍵分別查詢上一個和下一個歷史溫度值,并驅動數碼管顯示需要查詢的溫度值。溫度查詢模塊流程圖如下:入口功能鍵按下? N確認按下?延時消抖 YN顯示溫度值與位次 Y加鍵按下?N確認按下?延時消抖 Y查詢下一個值Y減鍵按下? NN查詢上一個值確認按下?延時消抖 YY退出功能鍵按下? NN返回 Y圖18 溫度查詢模塊流程圖5.5 溫度設定、報警模塊此模塊跟溫度查詢模塊類似,需要接受按鍵輸入,進入模塊界面后,按加減鍵分別上調和下調設定報警溫度值,當實時溫度值超過設定值時驅動蜂鳴器發

13、聲,并點亮8位發光二極管,實現聲光報警。溫度設定、報警模塊流程圖如下:入口延時消抖減鍵按下?確認按下?延時消抖加鍵按下?顯示設定溫度值確認按下?延時消抖功能鍵按下?N YN YN Y上調設定值Y NN Y下調設定值確認按下?Y N聲光報警溫度超出設定值?Y N取消報警判斷退出界面?N Y返回圖19 溫度設定、報警模塊流程圖5.6 數碼管驅動模塊本設計數碼管通過鎖存器接單片機P0口,采用動態掃描驅動7段LED數碼管進行顯示,需調用延時子程序以穩定顯示。模塊流程圖如下:P0清零關位選送位碼開位選P0置高關段選入口開段選延時關段選送段碼返回圖20 數碼管驅動模塊流程圖6 源程序#include &l

14、t;reg52.h>#define uchar unsigned char#define uint unsigned intsbit DS=P10; sbit lcden=P34;sbit lcdrs=P35; /define interfaceuint temp; / variable of temperatureuchar flag1; uchar m4; / sign of the result positive or negative/sbit dula=P26;/sbit wela=P27;void delay(uint count) /delay uint i; while(

15、count) i=200; while(i>0) i-; count-; void dsreset(void) /send reset and initialization command uint i; DS=0; i=103; while(i>0)i-; DS=1; i=4; while(i>0)i-;bit tmpreadbit(void) /read a bit uint i; bit dat; DS=0;i+; /i+ for delay DS=1;i+;i+; dat=DS; i=8;while(i>0)i-; return (dat);uchar tmpr

16、ead(void) /read a byte date uchar i,j,dat; dat=0; for(i=1;i<=8;i+) j=tmpreadbit(); dat=(j<<7)|(dat>>1); /讀出的數據最低位在最前面,這樣剛好一個字節在DAT里 return(dat);void tmpwritebyte(uchar dat) /write a byte to ds18b20 uint i; uchar j; bit testb; for(j=1;j<=8;j+) testb=dat&0x01; dat=dat>>1; i

17、f(testb) /write 1 DS=0; i+;i+; DS=1; i=8;while(i>0)i-; else DS=0; /write 0 i=8;while(i>0)i-; DS=1; i+;i+; void tmpchange(void) /DS18B20 begin change dsreset(); delay(1); tmpwritebyte(0xcc); / address all drivers on bus tmpwritebyte(0x44); / initiates a single temperature conversionuint tmp() /

18、get the temperature float tt; uchar a,b; dsreset(); delay(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); a=tmpread(); b=tmpread(); temp=b; temp<<=8; /two byte compose a int variable temp=temp|a; tt=temp*0.0625; temp=tt*10+0.5; return temp; void write_com(uchar com)lcdrs=0;P2=com;delay(5);lcden=1;

19、delay(5);lcden=0;void write_data(uchar date)lcdrs=1;P2=date;delay(5);lcden=1;delay(5);lcden=0;void init()/液晶初始化 lcden=0;write_com(0x38);write_com(0x0e);write_com(0x06);write_com(0x01);write_com(0x80);void main() init(); do tmpchange(); delay(100); m0=tmp()/100+'0'/將數據組成字符串,便于顯示 m1=tmp()%100/

20、10+'0' m2='.' m3=tmp()%10+'0' write_com(0x80); write_data(m0); write_data(m1); write_data(m2); write_data(m3); delay(100); while(1);7 總結此次課程設計中,難點在于DS18B20的使用,即對它的時序控制、初始化以及字節讀寫方法,任何一個環節出錯或是時序控制不到位的話就不能得到正確的數據。一旦學會了正確的使用方法,就能感覺到它帶來的便利是熱電偶不能比擬的,以后再次使用的話就能很快上手了。軟件設計中,把程序按功能分模塊的話能提高編程效率,把問題一一解決,同時畫流程圖能幫助理清思路,使問題簡單化。定義變量時,盡量定義局部變量,在字符型變量能達到要求的情況下就不用定義成整形變量了,以節省內存空間。同時局部變量應避免與全局變量取同名,否則全局變量將被屏蔽或與局部變量相沖突而達不到設計的效果。另一方面,取變量

溫馨提示

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

評論

0/150

提交評論