基于DS18B20溫度傳感器的溫度計設(shè)計_第1頁
基于DS18B20溫度傳感器的溫度計設(shè)計_第2頁
基于DS18B20溫度傳感器的溫度計設(shè)計_第3頁
基于DS18B20溫度傳感器的溫度計設(shè)計_第4頁
基于DS18B20溫度傳感器的溫度計設(shè)計_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、基于DS18B20溫度傳感器的溫度計設(shè)計摘要:以DS18B20溫度傳感器,4位7段數(shù)碼管和AT89C52RC微控制器為主要部分實現(xiàn)數(shù)字溫度計的設(shè)計,利用DS18B20本身具有的模數(shù)轉(zhuǎn)換功能和暫時存儲功能將模擬量氣溫轉(zhuǎn)換為微控制器可處理的數(shù)字量,并使用AT89C52RC的輸入輸出及定時器中斷功能通過DS18B20的單線連接結(jié)構(gòu)與DS18B20進(jìn)行信息傳輸,讀取溫度值并用數(shù)碼管顯示出來。1. 設(shè)計選題的目的、意義通過數(shù)字溫度計的設(shè)計進(jìn)一步熟悉單片機(jī)微控制器及相關(guān)數(shù)字/模擬電路的原理和功能,熟悉單片機(jī)的程序設(shè)計,學(xué)會傳感器的使用和相關(guān)文獻(xiàn)的查找及學(xué)習(xí)。2. 硬件電路設(shè)計硬件部分主要包括微控制器、溫度

2、傳感器模塊和數(shù)碼管顯示模塊三部分。2.1 微控制器主要功能電路如下圖,包括電源,接地,復(fù)位電路,時鐘脈沖電路(11.0592MHz)。2.2 溫度傳感器模塊如下圖,使用外部電源,可以減少程序復(fù)雜程度。DS18B20特性:l 獨特的單線接口僅需一個端口進(jìn)行通訊l 簡單的多點分布應(yīng)用l 無需外部器件l 可通過數(shù)據(jù)線供電l 零待機(jī)功耗l 測溫范圍-55+125l 溫度以12位數(shù)字量讀出l 溫度數(shù)字量轉(zhuǎn)換時間750ms(12位)l 用戶可定義的非易失性溫度警報設(shè)置l 報警搜索命令識別并超過程序限定溫度(溫度報警條件)的器件l 應(yīng)用包括溫度控制、工業(yè)系統(tǒng)、消費品、溫度計或任何熱感測系統(tǒng)2.3 數(shù)碼管顯示

3、模塊如上圖,由兩片SN74HC573N八路透明鎖存器分別控制共陽極數(shù)碼管位和段的鎖存,實現(xiàn)只用MCU的一組I/O口分別控制數(shù)碼管位和段的選通。3. 軟件電路設(shè)計軟件同樣包括三個部分:傳感器控制,顯示控制,主程序。3.1 溫度傳感器控制ADS18B20內(nèi)部存儲讀寫與控制原理右圖是DS18B20內(nèi)部9字節(jié)的暫存器的結(jié)構(gòu),向其傳送讀取命令后,暫存器會依次將9個字節(jié)的數(shù)據(jù)通過單線送出,每個字節(jié)都是低位在先。在本課題,只需0字節(jié)和1字節(jié),也就是溫度LSB(低8位)和溫度MSB(高8位)中的數(shù)據(jù)。這兩個字節(jié)中各位數(shù)據(jù)的意義如下表所示。MSB的高5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)

4、值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625才能得到實際溫度。MSBSSSSS262524LSB232221202-12-22-32-4DS18B20有5條ROM操作命令和6條存儲器操作命令,本實例中用到1條ROM操作命令和2條存儲器操作命令,見下表。性質(zhì)指令約定代碼操作說明ROM操作跳過ROMCCH允許總線控制器不提供64位ROM編碼就使用存儲器操作命令存儲器操作溫度轉(zhuǎn)換44H啟動DS18B20進(jìn)行溫度轉(zhuǎn)換存儲器操作讀暫存器BEH讀暫存器9個字節(jié)內(nèi)容對DS18B20操作之前必須初始化(復(fù)位),而且,操作必須遵守一定的時序規(guī)則,具體見

5、附件程序部分。B溫度傳感器控制流程開始CCH命令(跳過ROM)44H命令(溫度轉(zhuǎn)換)初始化延時等待轉(zhuǎn)換初始化CCH命令(跳過ROM)44H命令(讀暫存器)從DS18B20接收數(shù)據(jù)溫度傳感器控制程序見附件“DS18B20.h”。3.2 數(shù)碼管顯示控制顯示小數(shù)點后一位,即顯示范圍:-99.9999.9,需要四位數(shù)碼管同時顯示,短時內(nèi)連續(xù)掃描4位數(shù)碼管,視覺效果即為同時顯示。流程圖如下。數(shù)碼管顯示程序見附件“numled.h”。開始百位選通信號十位顯示信號百位顯示信號十位選通信號個位選通信號0.1位顯示信號0.1位選通信號個位顯示信號3.3 主程序不斷顯示溫度值,同時利用定時器中斷控制溫度傳感器,每

6、當(dāng)中斷到達(dá)且判斷條件(轉(zhuǎn)換時間完畢)符合時從DS18B20接收并轉(zhuǎn)換數(shù)據(jù)并使其復(fù)位和再一次轉(zhuǎn)換溫度數(shù)值,中斷結(jié)束等待下一次中斷流程圖如下,程序見附件“溫度計.c”。開始設(shè)置定時器及中斷初始狀態(tài)數(shù)碼管顯示溫度值初始化DS18B20S開始溫度轉(zhuǎn)換定時器開啟中斷開始定時器復(fù)位溫度轉(zhuǎn)換時間完畢?從DS18B20接收數(shù)據(jù)轉(zhuǎn)換并儲存數(shù)據(jù)中斷結(jié)束,返回是否總結(jié)該項目的重點,同時也是耗時最長的難點在于搞清楚DS18B20的工作原理及工作方式,其難在涉及到比較多的基礎(chǔ)硬件控制,而這是C語言學(xué)習(xí)者相對匯編語言學(xué)習(xí)者來說比較吃力的地方,其次還有DS18B20讀寫時序控制規(guī)則也是比較耗時的地方,我們通過不斷地修改測試

7、和借鑒網(wǎng)絡(luò)已有實例解決。附件目錄:<溫度計.c><userlib.h><DS18B20.h><numled.h>File: <溫度計.c>#include<reg52.h>#include "userlib.h"#include "numled.h"#include "DS18B20.h"unsigned int intcount=0; /中斷次數(shù)unsigned char tempH=0; /保存LSB,MSBunsigned char tempL=0;unsi

8、gned int temperature=0; /溫度值保存在temperature里/-主程序-void main()IE=0x82;TMOD=0x01;TH0=(65535-1000)/256;TL0=(65535-1000)%256;while(Init_DS18B20();/初始化WriteOneChar(0xcc);/跳過讀序列號的操作WriteOneChar(0x44); /啟動溫度轉(zhuǎn)換TR0=1;while(1)temperature=(0x00ff&tempL)|(0x00ff&tempH)<<8);if(tempH>8)temperature

9、=temperature+1;Show(4,16,0);elseShow(4,temperature/1600%10,0);Show(3,temperature/160%10,0);Show(2,temperature/16%10,1);Show(1,temperature/8%10,0);/-定時器中斷-void timer0(void) interrupt 1TH0=(65535-1000)/256; /定時器初值TL0=(65535-1000)%256;intcount+;if(intcount=1000) /1000*1000大約1090msintcount=0; Init_DS18B

10、20();/初始化WriteOneChar(0xcc);/跳過讀序列號的操作WriteOneChar(0xbe); /讀溫度寄存器(頭兩個值分別為溫度的低位和高位)tempL=ReadOneChar(); /讀出16bit溫度tempH=ReadOneChar();while(Init_DS18B20();/初始化WriteOneChar(0xcc);/跳過讀序列號的操作WriteOneChar(0x44); /啟動溫度轉(zhuǎn)換File:<userlib.h>#define LED P0 /LED+數(shù)碼管使用端口sbit seclock=P16;/數(shù)碼管段鎖存sbit bbitlock

11、=P17;/數(shù)碼管位鎖存 sbit DQ=P22; /DS18B20void Delayms(unsigned int x)/延時函數(shù),單位msunsigned int i,j;for(i=0;i<x;i+)for(j=0;j<110;j+);void Delay(unsigned int x) /延時函數(shù)for(;x>0;x-);File: <DS18B20.h>/-初始化-unsigned Init_DS18B20(void)unsigned char x=0;DQ=1;/DQ先置高Delay(5);/稍延時DQ=0; /發(fā)送復(fù)位脈沖Delay(70); /延

12、時(480us<x<960us)DQ=1;/拉高數(shù)據(jù)線Delay(5);/等待(1560us)x=DQ;/用X的值來判斷初始化有沒有成功,18B20存在的話X=0,否則X=1Delay(60);return(x);/-讀一個字節(jié)-unsigned char ReadOneChar(void)/主機(jī)數(shù)據(jù)線先從高拉至低電平1us以上,再使數(shù)據(jù)線升為高電平,從而產(chǎn)生讀信號unsigned char i=0; /每個讀周期最短的持續(xù)時間為60us,各個讀周期之間必須有1us以上的高電平恢復(fù)期unsigned char dat=0;for(i=8;i>0;i-)/一個字節(jié)有8位DQ=1

13、;Delay(1);DQ=0;dat>>=1; DQ=1;if(DQ) dat|=0x80;else dat&=0x7f; Delay(4);return(dat);/-寫一個字節(jié)-void WriteOneChar(unsigned char dat)unsigned char i=0; /數(shù)據(jù)線從高電平拉至低電平,產(chǎn)生寫起始信號。15us之內(nèi)將所需寫的位送到數(shù)據(jù)線上for(i=8;i>0;i-)/在1560us之間對數(shù)據(jù)線進(jìn)行采樣,如果是高電平就寫1,低寫0發(fā)生DQ=0;/在開始另一個寫周期前必須有1us以上的高電平恢復(fù)期。DQ=dat&0x01;Dela

14、y(5);DQ=1;dat>>=1;Delay(4);File: <numled.h>unsigned char bbitcode5=0,0x01,0x02,0x04,0x08; /位選代碼unsigned char numcode17=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xa0,0x83,0xa7,0xa1,0x84,0x8e,0xbf; /顯示數(shù)字代碼0f和負(fù)號unsigned char dotcode2=0xff,0x7f;/是否顯示dpvoid Cls()/清屏消影LED=0xff;seclock=1;bbitlock=1;bbit

溫馨提示

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

最新文檔

評論

0/150

提交評論