基于AT89C51單片機的測溫系統(tǒng)_第1頁
基于AT89C51單片機的測溫系統(tǒng)_第2頁
基于AT89C51單片機的測溫系統(tǒng)_第3頁
基于AT89C51單片機的測溫系統(tǒng)_第4頁
基于AT89C51單片機的測溫系統(tǒng)_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、引言本文主要介紹了一個基于AT89C51單片機的測溫系統(tǒng),詳細描述了利用數(shù)字溫度傳感器DS18B20開發(fā)測溫系統(tǒng)的過程,重點對傳感器在單片機下的硬件連接,軟件編程以及各模塊系統(tǒng)流程進行了詳盡分析,特別是數(shù)字溫度傳感器DS18B20的數(shù)據(jù)采集過程,并介紹了利用C語言編程對DS18B20的訪問,該系統(tǒng)可以方便的實現(xiàn)實現(xiàn)溫度采集和顯示,使用起來相當方便,具有精度高、量程寬、靈敏度高、體積小、功耗低等優(yōu)點。DS18B20與AT89C51結(jié)合實現(xiàn)最簡溫度檢測系統(tǒng),該系統(tǒng)結(jié)構(gòu)簡單,抗干擾能力強,適合于惡劣環(huán)境下進行現(xiàn)場溫度測量。數(shù)字溫度計與傳統(tǒng)的溫度計相比,具有讀數(shù)方便、測溫范圍廣、測溫精確、功能多樣話等

2、優(yōu)點。其主要用于對測溫要求準確度比較高的場所,或科研實驗室使用,該設(shè)計使用STC89C52單片機作控制器,數(shù)字溫度傳感器DS18B20測量溫度,單片機接受傳感器輸出,經(jīng)處理用LED數(shù)碼管實現(xiàn)溫度值顯示。 一、設(shè)計要求通過基于MCS-51系列單片機AT89C51和DS18B20溫度傳感器檢測溫度,熟悉芯片的使用,溫度傳感器的功能,數(shù)碼顯示管的使用,C語言的設(shè)計;并且把我們這一年所學的數(shù)字和模擬電子技術(shù)、檢測技術(shù)、單片機應(yīng)用等知識,通過理論聯(lián)系實際,從題目分析、電路設(shè)計調(diào)試、程序編制調(diào)試到傳感器的選定等這一完整的實驗過程,培養(yǎng)了學生正確的設(shè)計思想,使學生充分發(fā)揮主觀能動性,去獨立解決實際問題,以達

3、到提升學生的綜合能力、動手能力、文獻資料查閱能力的作用,為畢業(yè)設(shè)計和以后工作打下一個良好的基礎(chǔ)。以MCS-51系列單片機為核心器件,組成一個數(shù)字溫度計,采用數(shù)字溫度傳感器DS18B20為檢測器件,進行單點溫度檢測,檢測精度為±0.5攝氏度。溫度顯示采用3位LED數(shù)碼管顯示,兩位整數(shù),一位小數(shù)。具有鍵盤輸入上下限功能,超過上下限溫度時,進行聲音報警。二、基本原理 原理簡述:數(shù)字溫度傳感器DS1820把溫度信息轉(zhuǎn)換為數(shù)字格式;通過“1線協(xié)議”,單片機獲取指定傳感器的數(shù)字溫度信息,并顯示到顯示設(shè)備上。通過鍵盤,單片機可根據(jù)程序指令實現(xiàn)更靈活的功能,如單點檢測、輪轉(zhuǎn)檢測、越限檢測等。基于DS

4、1820數(shù)字溫度傳感器的溫度檢測及顯示的系統(tǒng)原理圖如圖圖 2.1 基于DS1820的溫度檢測系統(tǒng)框圖三:主要器件介紹(時序圖及各命令序列,溫度如何計算等)系統(tǒng)總體設(shè)計框圖 由于DS18B20數(shù)字溫度傳感器具有單總線的獨特優(yōu)點,可以使用戶輕松地組建起傳感器網(wǎng)絡(luò),并可使多點溫度測量電路變得簡單、可靠,所以在該設(shè)計中采用DS18B20數(shù)字溫度傳感器測量溫度。 測溫電路設(shè)計總體設(shè)計框圖如圖所示,控制器采用單片機AT89S52,溫度傳感器采用DS18B20,顯示采用4位LED數(shù)碼管,報警采用蜂鳴器、LED燈實現(xiàn),鍵盤用來設(shè)定報警上下限溫度。圖3.1測溫電路設(shè)計總體設(shè)計框圖1.控制模塊 AT89S52單片

5、機是美國ATMEL公司生產(chǎn)的低功耗,高性能CMOS 8位單片機,片內(nèi)含有8kb的可系統(tǒng)編程的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標準8051指令系統(tǒng)及引腳。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程的Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。 AT89S52具有以下標準功能:8k字節(jié)Flash,256字節(jié)RAM,32 位I/O 口線,看門狗定時器,2 個數(shù)據(jù)指針,三個16 位定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時鐘電路。另外,AT89S52 可降至0Hz 靜態(tài)邏輯操作,

6、支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復位為止。2.顯示模塊 顯示電路采用4位共陰LED數(shù)碼管,從P0口輸出段碼,P2口的高四位為位選端。用動態(tài)掃描的方式進行顯示,這樣能有效節(jié)省I/O口。3.溫度傳感器 DS18B20溫度傳感器是美國DALLAS半導體公司最新推出的一種改進型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)912位的數(shù)字值讀數(shù)方式。DS18B20 的性能特點如下:1.獨

7、特的單線接口方式僅需要一個端口引腳進行通信2.多個DS18B20可以并聯(lián)在唯一的三線上,實現(xiàn)多點組網(wǎng)功能3.無需外部器件4.可通過數(shù)據(jù)線供電,電壓范圍:3.05.5V5.測溫范圍55125,在-10+85時精度為±0.56.零待機功耗7.溫度以9或12位數(shù)字量讀出8.報警搜索命令識別并標志超過程序限定溫度(溫度報警條件)的器件9.負電壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作四:硬件電路原理框圖由于本次實驗是在學習板上做的,所以沒有硬件接線圖,原理主要講解DS18B20的工作原理。1·硬件設(shè)計1. 單片機系統(tǒng)電路原理圖圖4.1 系統(tǒng)電路原理圖2.DS18

8、B20溫度傳感器電路設(shè)計電源供電方式如圖,此時DS18B20的1腳接地,2腳作為信號線,3腳接電源。圖4.2 DS18B20溫度傳感器電路3.報警電路設(shè)計 報警電路是在測量溫度大于上限或小于下限時提供報警功能的電路。該電路是由一個蜂鳴器組成,具體的電路如圖所示圖4.3 報警電路4.顯示電路設(shè)計 顯示電路是由四位一體的共陰數(shù)碼管進行顯示的2·軟件設(shè)計(1)DS18B20內(nèi)部結(jié)構(gòu) 如圖所示主要由4部分組成:64 位ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。ROM中的64位序列號是出廠前被光刻好的,它可以看作 是該DS18B20的地址序列碼,每個DS18B20的64

9、位序列號均不相同。64位ROM的排的循環(huán)冗余校驗碼(CRC=X8X5X41)。 ROM的作用是使每一個DS18B20都各不相同,這樣就可以實現(xiàn)一根總線上掛接多個DS18B20的目的。 DS18B20中的溫度傳感器完成對溫度的測量,用16位二進制形式提供,形式表達,其中S為符號位。 DS18B20溫度傳感器主要用于對溫度進行測量,數(shù)據(jù)可用16位符號擴展的二進制補碼讀數(shù)形式提供,并以0.0625LSB形式表示。表2是部分溫度值對應(yīng)的二進制溫度表示數(shù)據(jù)。(2)DS18B20的工作時序 DS18B20的一線工作協(xié)議流程是:初始化ROM操作指令存儲器操作指令數(shù)據(jù)傳輸初始化時序 主機首先發(fā)出一個48096

10、0微秒的低電平脈沖,然后釋放總線變?yōu)楦唠娖?,并在隨后的480微秒時間內(nèi)對總線進行檢測,如果有低電平出現(xiàn)說明總線上有器件已做出應(yīng)答。若無低電平出現(xiàn)一直都是高電平說明總線上無器件應(yīng)答。做為從器件的DS18B20在一上電后就一直在檢測總線上是否有480960微秒的低電平出現(xiàn),如果有,在總線轉(zhuǎn)為高電平后等待1560微秒后將總線電平拉低60240微秒做出響應(yīng)存在脈沖,告訴主機本器件已做好準備。若沒有檢測到就一直在檢測等待。 接下來就是主機發(fā)出各種操作命令,但各種操作命令都是向DS18B20寫0和寫1組成的命令字節(jié),接收數(shù)據(jù)時也是從DS18B20讀取0或1的過程。因此首先要搞清主機是如何進行寫0、寫1、讀

11、0和讀1的。 寫周期最少為60微秒,最長不超過120微秒。寫周期一開始做為主機先把總線拉低1微秒表示寫周期開始。隨后若主機想寫0,則繼續(xù)拉低電平最少60微秒直至寫周期結(jié)束,然后釋放總線為高電平。若主機想寫1,在一開始拉低總線電平1微秒后就釋放總線為高電平,一直到寫周期結(jié)束。而做為從機的DS18B20則在檢測到總線被拉底后等待15微秒然后從15us到45us開始對總線采樣,在采樣期內(nèi)總線為高電平則為1,若采樣期內(nèi)總線為低電平則為0。 對于讀數(shù)據(jù)操作時序也分為讀0時序和讀1時序兩個過程。讀時隙是從主機把單總線拉低之后,在1微秒之后就得釋放單總線為高電平,以讓DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩€上。DS

12、18B20在檢測到總線被拉低1微秒后,便開始送出數(shù)據(jù),若是要送出0就把總線拉為低電平直到讀周期結(jié)束。若要送出1則釋放總線為高電平。主機在一開始拉低總線1微秒后釋放總線,然后在包括前面的拉低總線電平1微秒在內(nèi)的15微秒時間內(nèi)完成對總線進行采樣檢測,采樣期內(nèi)總線為低電平則確認為0。采樣期內(nèi)總線為高電平則確認為1。完成一個讀時序過程,至少需要60us才能完成讓DS18B20進行一次溫度的轉(zhuǎn)換,那具體的操作就是:(1).主機先作個復位操作,(2).主機再寫跳過ROM的操作(CCH)命令,(3).然后主機接著寫個轉(zhuǎn)換溫度的操作命令,后面釋放總線至少一秒,讓DS18B20完成轉(zhuǎn)換的操作。在這里要注意的是每

13、個命令字節(jié)在寫的時候都是低字節(jié)先寫,例如CCH的二進制為11001100,在寫到總線上時要從低位開始寫,寫的順序是“零、零、壹、壹、零、零、壹、壹”。整個操作的總線狀態(tài)如下圖。(3)初始化時序程序bit Init_DS18B20(void) bit flag; /儲存DS18B20是否存在的標志,flag=0,存在;flag=1,不存在 DQ = 1; /先將數(shù)據(jù)線拉高 for(time=0;time<2;time+) ; /略微延時約6微秒/再將數(shù)據(jù)線從高拉低,要求保持480960us DQ = 0; for(time=0;time<200;time+) ; /略微延時約600微

14、秒/以向DS18B20發(fā)出一持續(xù)480960us的低電平復位脈沖 DQ = 1; /釋放數(shù)據(jù)線(將數(shù)據(jù)線拉高) for(time=0;time<10;time+) ; /延時約30us(釋放總線后需等待1560us讓DS18B20輸出存在脈沖) flag=DQ; /讓單片機檢測是否輸出了存在脈沖(DQ=0表示存在) for(time=0;time<200;time+) ; /延時足夠長時間,等待存在脈沖輸出完畢 return (flag); /返回檢測成功標志unsigned char ReadOneChar(void) unsigned char i=0; unsigned ch

15、ar dat; /儲存讀出的一個字節(jié)數(shù)據(jù) for (i=0;i<8;i+) DQ =1; / 先將數(shù)據(jù)線拉高 _nop_(); /等待一個機器周期 DQ = 0; /單片機從DS18B20讀書據(jù)時,將數(shù)據(jù)線從高拉低即啟動讀時序 _nop_(); /等待一個機器周期 DQ = 1; /將數(shù)據(jù)線"人為"拉高,為單片機檢測DS18B20的輸出電平作準備 for(time=0;time<2;time+) ; /延時約6us,使主機在15us內(nèi)采樣 dat>>=1; if(DQ=1) dat|=0x80; /如果讀到的數(shù)據(jù)是1,則將1存入dat else da

16、t|=0x00; /如果讀到的數(shù)據(jù)是0,則將0存入dat for(time=0;time<8;time+); /延時3us,兩個讀時序之間必須有大于1us的恢復期 return(dat); /返回讀出的十六進制數(shù)據(jù)WriteOneChar(unsigned char dat) unsigned char i=0; for (i=0; i<8; i+) DQ =1; / 先將數(shù)據(jù)線拉高 _nop_(); /等待一個機器周期 DQ=0; /將數(shù)據(jù)線從高拉低時即啟動寫時序 DQ=dat&0x01; /利用與運算取出要寫的某位二進制數(shù)據(jù), for(time=0;time<10

17、;time+) ; /延時約30us,DS18B20在拉低后的約1560us期間從數(shù)據(jù)線上采樣 DQ=1; /釋放數(shù)據(jù)線 for(time=0;time<1;time+) ; /延時3us,兩個寫時序間至少需要1us的恢復期 dat>>=1; /將dat中的各二進制位數(shù)據(jù)右移1位 for(time=0;time<4;time+) ; /稍作延時,給硬件一點反應(yīng)時間五、程序流程圖(主程序,各子程序)1.主程序?qū)崟r溫度顯示子程序:驅(qū)動數(shù)碼管把實時溫度值送出在LED數(shù)碼管顯示主程序流程圖:開始定時器初始化、啟動顯示實時溫度 溫度設(shè)定超過溫度報警圖5.1主程序流程圖2.讀溫度值

18、模塊讀溫度值模塊需要調(diào)用4個子程序,分別為: 1.DS18B20初始化子程序:讓單片機知道DS18B20在總線上且已準備好操作 2.DS18B20寫字節(jié)子程序:對DS18B20發(fā)出命令 3.DS18B20讀字節(jié)子程序:讀取DS18B20存儲器的數(shù)據(jù) 4.延時子程序:對DS18B20操作時的時序控制讀溫度值模塊流程圖:入口數(shù)據(jù)轉(zhuǎn)換處理讀取溫度值高低位跳過讀序列號DS18B20初始化延時啟動溫度轉(zhuǎn)換跳過讀序列號DS18B20初始化返回圖5.2讀溫度值子程序流程圖 DS18B20初始化子程序流程圖:入口DQ復位0稍延時DQ置高電平延時>480usDQ拉高電平延時1560usDQ為低電平?NY返

19、回圖5.3 DS18B20初始化子程序流程圖DS18B20寫字節(jié)和讀字節(jié)子程序流程圖: 圖5.4 DS18B20寫字節(jié)子程序流程圖圖5.5 DS18B20讀字節(jié)子程序流程圖六:調(diào)試(步驟,心得,結(jié)論) 優(yōu)點: 1線性好,精度適中,體積小,實用方便。 2實時顯示當前溫度。 缺點:溫度傳感器會有一定的時間延時,從而間接地影響了整個報警系統(tǒng)的靈敏性和準確性。 (2)心得體會: 在本次設(shè)計的過程中,我們發(fā)現(xiàn)了很多的問題,雖然以前也做過類似的課程設(shè)計,但是這次確實讓我們學到了很多。我們不僅要選好元件,還要把這些元件合理地組織起來,所以我們要學會如何尋找和

20、搜索自己需要的資料。這一次,我們用了老師給的參考電路圖,然后修改了一些地方,比如去掉了一個LED,再加入了幾個電阻。雖然有些困難,但是經(jīng)過努力,我們還是完成了電路的設(shè)計。經(jīng)過本次的設(shè)計,我們學到了很多的知識,了解到了傳感器能夠把自然界的各種非電量轉(zhuǎn)換為電信號的能量物理理念。     從本次的實習設(shè)計中,我們意識到,在以后的學習中,要理論聯(lián)系實際,把我們所學的理論知識運用到實際當中,實踐是檢驗真理的唯一標準。培養(yǎng)了一定的獨立思考能力、解決問題的能力。同時也學到了和他人愉快合作的技巧。每當我們遇到問題時,我們學會了理性的分析,最終解決問題。同時在討

21、論問題時認真聆聽別人的思想和意見也很重要,在聆聽的同時也會學到很多東西。所以這次實習讓我們學到了很多的東西。 七:附錄(電路圖,程序)#include "reg51.h"#include "intrins.h" /_nop_();延時函數(shù)用#define Disdata P0 /段碼輸出口#define discan P2 /掃描口#define uchar unsigned char#define uint unsigned intsbit DQ=P33; /溫度輸入口sbit DIN=P07; /LED小數(shù)點控制sbit buzzer=P36;uch

22、ar temp_buzzer;uchar up_alarm=20;uint h;uint i;uchar flag;/*溫度小數(shù)部分用查表法*/uchar code ditab16=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09;/uchar code dis_712=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf;/共陽LED段碼表 "0" "1" "2&quo

23、t; "3" "4" "5" "6" "7" "8" "9" "不亮" "-" uchar code scan_con=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe; /列掃描控制字uchar data temp_data2=0x00,0x00; /讀出溫度暫放uchar data display8; /顯示單元數(shù)據(jù),共4個數(shù)據(jù)和一個運算暫用/*11微秒延時函數(shù)*/void ser_

24、init() TMOD=0X20; SCON=0X50; TH1=0XFD; TL1=0XFD; TR1=1;void delay(uint t)for(;t>0;t-);/*顯示掃描函數(shù)*/scan()char k; for(k=0;k<7;k+) /四位LED掃描控制 / Disdata=0xff; Disdata=dis_7displayk; if(k=4)DIN=0; discan=scan_conk;delay(200); discan=0xff; void delayms(unsigned int xms) /延時函數(shù) ,延時xms unsigned int i , j

25、; for(i = 0; i < xms; i+) for(j = 0; j < 110; j+); void fengming(double templ) uchar i; if(templ >= 34) /溫度報警限設(shè)置 for(i=0;i<20;i+) buzzer=0; delayms(1);buzzer=1; delayms(1); /*18B20復位函數(shù)*/ow_reset(void)char presence=1;while(presence)while(presence)DQ=1;_nop_();_nop_();DQ=0; /delay(50); / 5

26、50usDQ=1; /delay(6); / 66uspresence=DQ; / presence=0繼續(xù)下一步 delay(45); /延時500uspresence = DQ;DQ=1;/*18B20寫命令函數(shù)*/向 1-WIRE 總線上寫一個字節(jié)void write_byte(uchar val)uchar i;for (i=8; i>0; i-) /DQ=1;_nop_();_nop_();DQ = 0;_nop_();_nop_();_nop_();_nop_();_nop_();/5usDQ = val&0x01; /最低位移出delay(6); /66usval=

27、val/2; /右移一位DQ = 1;delay(1);/*18B20讀1個字節(jié)函數(shù)*/從總線上讀取一個字節(jié)uchar read_byte(void)uchar i;uchar value = 0;for (i=8;i>0;i-)DQ=1;_nop_();_nop_();value>>=1;DQ = 0; /_nop_();_nop_();_nop_();_nop_(); /4usDQ = 1;_nop_();_nop_();_nop_();_nop_(); /4usif(DQ)value|=0x80;delay(6); /66usDQ=1;return(value);/*讀

28、出溫度函數(shù)*/read_temp()ow_reset(); /總線復位write_byte(0xCC); / 發(fā)Skip ROM命令write_byte(0xBE); / 發(fā)讀命令temp_data0=read_byte(); /溫度低8位temp_data1=read_byte(); /溫度高8位ow_reset();write_byte(0xCC); / Skip ROMwrite_byte(0x44); / 發(fā)轉(zhuǎn)換命令/*溫度數(shù)據(jù)處理函數(shù)*/void work_temp()uchar n=0,th=0,tl=0;int temp=0;uchar flag3=1,flag2=1; /數(shù)字顯示修正標記if(temp

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論