課程設計論文基于51單片機與DS18B20的數(shù)字溫度計設計_第1頁
課程設計論文基于51單片機與DS18B20的數(shù)字溫度計設計_第2頁
課程設計論文基于51單片機與DS18B20的數(shù)字溫度計設計_第3頁
課程設計論文基于51單片機與DS18B20的數(shù)字溫度計設計_第4頁
課程設計論文基于51單片機與DS18B20的數(shù)字溫度計設計_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、四川師范大學課程設計報告基于單片機的ds18b20數(shù)字溫度計設計學生姓名院系名稱物理與電子工程學院專業(yè)名稱電子信息工程班 級學 號指導教師完成時間基于單片機的ds18b20數(shù)字溫度計設計學生姓名: 指導老師: 內(nèi)容摘要:隨著現(xiàn)代信息化技術(shù)的飛速發(fā)展和傳統(tǒng)工業(yè)改造的逐步實現(xiàn),能獨立工作的溫度檢測系統(tǒng)已廣泛應用于各種不同的領域。本文介紹了一個基于stc89c52單片機和數(shù)字溫度傳感器ds18b20的測溫系統(tǒng),并用led數(shù)碼管顯示溫度值,易于讀數(shù)。系統(tǒng)電路簡單、操作簡便,能任意設定報警溫度并可查詢最近的10個溫度值,系統(tǒng)具有可靠性高、成本低、功耗小等優(yōu)點。關(guān)鍵詞:單片機 數(shù)字溫度傳感器 溫度計目 錄

2、1 引言42 設計要求42.1 基本要求42.2 擴展功能43 總體方案設計43.1 方案論證43.1.1 方案一43.1.2 方案二53.2 總體設計框圖54 硬件設計54.1 單片機系統(tǒng)54.2 數(shù)字溫度傳感器模塊64.2.1 ds18b20性能64.2.2 ds18b20外形及引腳說明74.2.3 ds18b20接線原理圖74.2.4 ds18b20時序圖74.2.5 數(shù)據(jù)處理94.3 顯示電路104.4 聲光報警電路104.5 鍵盤輸入電路115 軟件設計115.1 主程序模塊115.2 讀溫度值模塊125.3 中斷模塊145.4 溫度查詢模塊155.5 溫度設定、報警模塊165.6

3、數(shù)碼管驅(qū)動模塊186 源程序197 總結(jié)26參考文獻:281 引言隨著人們生活水平的不斷提高,單片機控制無疑是人們追求的目標之一,它所給人帶來的方便是不可否定的,各種數(shù)字系統(tǒng)的應用也使人們的生活更加舒適。數(shù)字化控制、智能控制為現(xiàn)代人的工作、生活、科研等方面帶來方便。其中數(shù)字溫度計就是一個典型的例子。數(shù)字溫度計與傳統(tǒng)的溫度計相比,具有讀數(shù)方便、測溫范圍廣、測溫精確、功能多樣話等優(yōu)點。其主要用于對測溫要求準確度比較高的場所,或科研實驗室使用,該設計使用stc89c52單片機作控制器,數(shù)字溫度傳感器ds18b20測量溫度,單片機接受傳感器輸出,經(jīng)處理用led數(shù)碼管實現(xiàn)溫度值顯示。2 設計要求2.1

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

5、積小、構(gòu)成的系統(tǒng)結(jié)構(gòu)簡單,它可直接將溫度轉(zhuǎn)化成串行數(shù)字信號給單片機處理,即可實現(xiàn)溫度顯示。另外ds18b20具有3引腳的小體積封裝,測溫范圍為-55+125攝氏度,測溫分辨率可達0.0625攝氏度,其測量范圍與精度都能符合設計要求。以上兩種方案相比較,第二種方案的電路、軟件設計更簡單,此方案設計的系統(tǒng)在功耗、測量精度、范圍等方面都能很好地達到要求,故本設計采用方案二。3.2 總體設計框圖本方案設計的系統(tǒng)由單片機系統(tǒng)、數(shù)字溫度傳感器、led顯示模塊、按鍵控制模塊、溫度報警模塊組成,其總體架構(gòu)如下圖1。單片機報警電路顯示電路驅(qū)動電路測溫電路按鍵輸入電路時鐘、復位電路圖1 系統(tǒng)總體方框圖4 硬件設計

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

7、數(shù)字量轉(zhuǎn)換時間200ms,12位分辨率時最多在750ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字l 應用包括溫度控制、工業(yè)系統(tǒng)、消費品、溫度計和任何熱感測系統(tǒng)l 負壓特性:電源極性接反時,傳感器不會因發(fā)熱而燒毀,但不能正常工作4.2.2 ds18b20外形及引腳說明圖3 ds18b20外形及引腳l gnd:地l dq:單線運用的數(shù)據(jù)輸入/輸出引腳l vd:可選的電源引腳4.2.3 ds18b20接線原理圖單總線通常要求接一個約4.7k左右的上拉電阻,這樣,當總線空閑時,其狀態(tài)為高電平。圖4 ds18b20接線原理圖4.2.4 ds18b20時序圖主機使用時間隙來讀寫ds18b20的數(shù)據(jù)位和寫命令字的位。1. 初始化

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

9、得到實際 溫度。 例如+125的數(shù)字輸出為07d0h,實際溫度=07d0h*0.0625=2000*0.0625=125。例如-55的數(shù)字輸出為fc90h,則應先將11位數(shù)據(jù)位取反加1得370h(符號位不變,也不作運算),實際溫度=370h*0.0625=880*0.0625=55??梢娖渲械退奈粸樾?shù)位。圖8 ds18b20溫度數(shù)據(jù)表4.3 顯示電路led數(shù)碼管顯示采用動態(tài)掃描方式,能簡化電路布線,節(jié)約單片機i/o端口。段碼和位碼由單片機p0送出,分別用74hc673n鎖存。圖9 數(shù)碼管驅(qū)動顯示電路4.4 聲光報警電路當溫度超過設定溫度值時,實現(xiàn)聲光報警,蜂鳴器鳴叫、8個發(fā)光二極管點亮。蜂鳴

10、器由單片機p23口控制,用三極管驅(qū)動,發(fā)光二極管接單片機p1口,由74hc673n鎖存。圖10 聲光報警電路4.5 鍵盤輸入電路四個鍵分別連接單片機p34、p35、p36、p37構(gòu)成獨立式鍵盤,分別實現(xiàn)加、減、報警溫度設定功能鍵和溫度查詢功能鍵。圖11 鍵盤輸入電路5 軟件設計5.1 主程序模塊主程序需要調(diào)用3個子程序,分別為:l 實時溫度顯示子程序:驅(qū)動數(shù)碼管把實時溫度值送出在led數(shù)碼管顯示l 查詢記錄溫度值子程序:查詢過去存儲的溫度值,最多可查詢10個值l 溫度設定、報警子程序:設定報警溫度值,當溫度超過該值時產(chǎn)生報警,即驅(qū)動蜂鳴器鳴叫、8個發(fā)光二極管發(fā)光主程序流程圖:開始定時器初始化、

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

12、延時1560msdq拉高電平延時>480msdq復位0稍延時dq置高電平n返回y圖14 ds18b20初始化子程序流程圖3. ds18b20寫字節(jié)和讀字節(jié)子程序流程圖: 圖15 ds18b20寫字節(jié)子程序流程圖圖16 ds18b20讀字節(jié)子程序流程圖5.3 中斷模塊中斷采用t0方式1,初始值定時為50ms。中斷模塊需調(diào)用兩個子程序:l 讀溫度值子程序:定時讀取溫度值,實時更新溫度值l 記錄溫度值子程序:定時記錄溫度值,供查詢使用把這兩個子程序放在中斷的原因是,不會因為調(diào)整報警溫度或查詢歷史溫度值而停止更新溫度值和記錄溫度值。中斷模塊流程圖:1秒?計數(shù)值加1定時器重置初值中斷入口讀溫度值y

13、中斷返回記錄溫度值 n圖17中斷模塊流程圖5.4 溫度查詢模塊溫度查詢模塊需要接受按鍵輸入,進入查詢界面后,按加減鍵分別查詢上一個和下一個歷史溫度值,并驅(qū)動數(shù)碼管顯示需要查詢的溫度值。溫度查詢模塊流程圖如下:入口功能鍵按下? n確認按下?延時消抖 yn顯示溫度值與位次 y加鍵按下?n確認按下?延時消抖 y查詢下一個值y減鍵按下? nn查詢上一個值確認按下?延時消抖 yy退出功能鍵按下? nn返回 y圖18 溫度查詢模塊流程圖5.5 溫度設定、報警模塊此模塊跟溫度查詢模塊類似,需要接受按鍵輸入,進入模塊界面后,按加減鍵分別上調(diào)和下調(diào)設定報警溫度值,當實時溫度值超過設定值時驅(qū)動蜂鳴器發(fā)聲,并點亮8

14、位發(fā)光二極管,實現(xiàn)聲光報警。溫度設定、報警模塊流程圖如下:入口延時消抖減鍵按下?確認按下?延時消抖加鍵按下?顯示設定溫度值確認按下?延時消抖功能鍵按下?n yn yn y上調(diào)設定值y nn y下調(diào)設定值確認按下?y n聲光報警溫度超出設定值?y n取消報警判斷退出界面?n y返回圖19 溫度設定、報警模塊流程圖5.6 數(shù)碼管驅(qū)動模塊本設計數(shù)碼管通過鎖存器接單片機p0口,采用動態(tài)掃描驅(qū)動7段led數(shù)碼管進行顯示,需調(diào)用延時子程序以穩(wěn)定顯示。模塊流程圖如下:p0清零關(guān)位選送位碼開位選p0置高關(guān)段選入口開段選延時關(guān)段選送段碼返回圖20 數(shù)碼管驅(qū)動模塊流程圖6 源程序#include<reg52

15、.h>#define uchar unsigned char#define uint unsigned int/*變量定義*/sbit dq=p22;/ds18b20 端口sbit beep=p23;/蜂鳴器使能端sbit dula=p26;/數(shù)碼管段選使能sbit wela=p27;/數(shù)碼管位選使能sbit add=p35;/加鍵sbit sub=p34;/減鍵sbit alarm=p36;/設定報警功能鍵sbit record=p37;/查詢溫度記錄功能鍵uchar code tabled=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0

16、x6f, /09的七段數(shù)碼管段碼0x40,0x63,0x39;/- c 的段碼uchar code tablew=0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f;/18個數(shù)碼管的位選碼uchar recordtable10;/存儲過去的十個溫度值uchar temperature;/溫度值uchar countsec,recordnum,count;/計數(shù)變量uint countmin;/計數(shù)變量uchar alanum=30;/報警溫度值,初始值為30攝氏度uchar z=65;/消抖延時函數(shù)入口參數(shù)/*函數(shù)聲明*/void delay1(uchar ms)

17、;/動態(tài)掃描延時子程序void delay(uchar i);/ds18b20工作延時子程序 void init_ds18b20();/ds18b20初始化子程序void writeonechar(unsigned char dat);/向ds18b20寫一字節(jié)數(shù)據(jù)uchar readonechar(void);/向ds18b20讀一字節(jié)數(shù)據(jù)void gettemperature();/由ds18b20產(chǎn)生溫度值void display(uchar wei,uchar duan);/數(shù)碼管驅(qū)動子程序void alarm();/溫度報警void showtemperature(uchar tt)

18、;/溫度顯示void keeprecord();/記錄溫度值void showrecord();/顯示記錄的溫度值/*主函數(shù)*/void main()tmod=0x01;/定時器初始化,定時器0方式1th0=(65536-50000)/256;/50mstl0=(65536-50000)%256;ea=1;/開中斷et0=1;tr0=1;/啟動定時器while(1)showtemperature(temperature);/顯示實時溫度alarm();/溫度設定、報警showrecord();/查詢溫度記錄值/*動態(tài)掃描延時函數(shù)*/void delay1(uchar ms)int i,j;fo

19、r(i=80;i>0;i-)for(j=ms;j>0;j-);/*ds18b20工作延時函數(shù)*/void delay(uchar i) while(i-);/*ds18b20初始化函數(shù)*/void init_ds18b20(void)unsigned char x=0;dq = 1; /dq復位delay(8); /稍做延時dq = 0; /單片機將dq拉低delay(80); /精確延時 大于 480usdq = 1; /拉高總線delay(10);x=dq; /稍做延時后 如果x=0則初始化成功 x=1則初始化失敗delay(5);while(!x)x=dq;/*讀一個字節(jié)*/

20、uchar 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; delay(5); return(dat);/*寫一個字節(jié)*/void writeonechar(unsigned char dat) unsigned char i=0; for (i=8; i>0; i-) dq = 0; dq = dat&0x01; delay(5); dq = 1

21、; dat>>=1; delay(5);/*產(chǎn)生溫度值*/void gettemperature()uchar templ,temph;/分別為數(shù)據(jù)低位和高位uint temp;init_ds18b20();writeonechar(0xcc); / 跳過讀序列號的操作writeonechar(0x44); / 啟動溫度轉(zhuǎn)換delay(200);init_ds18b20();writeonechar(0xcc); /跳過讀序號列號的操作 writeonechar(0xbe); /讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度templ=readonechar();/讀出溫度低

22、位lsbtemph=readonechar();/讀出溫度高位msbtemp=temph*16+templ/16;/templ右移四位去掉小數(shù)位temperature=temp&0xff;/測量050度,只取temp低八位/*數(shù)碼管驅(qū)動函數(shù)*/void display(uchar wei,uchar duan)dula=0;p0=0xff;wela=1;p0=tablewwei;wela=0;p0=0;dula=1;p0=tabledduan;dula=0;delay1(1);/*溫度顯示函數(shù)*/void showtemperature(uchar tt)display(2,tt/10

23、);/顯示溫度數(shù)值display(3,tt%10);display(4,11);/顯示攝氏度單位display(5,12);/*溫度值設定、報警函數(shù)*/void alarm()bit flag;if(alarm=0) delay1(80);/延時消抖if(alarm=0)flag=1;/第一次按鍵進入設置while(flag)if(add=0)delay1(z);/延時消抖if(add=0)alanum+;/add鍵按下,上調(diào)設定值if(alanum=51)alanum=0;/最大值為50攝氏度,循環(huán)顯示if(sub=0)delay1(z);/延時消抖if(sub=0)alanum-;/sub

24、鍵按下,下調(diào)設定值if(alanum=255)alanum=50;/最小值為0攝氏度,循環(huán)顯示showtemperature(alanum);display(0,10);/選中數(shù)碼管的其他空閑位display(1,10);/區(qū)別于實時溫度顯示“-”display(6,10);display(7,10);if(alarm=0) delay1(80);/延時消抖if(alarm=0)flag=0;/第二次按鍵退出設置if(temperature>alanum)/此處設置報警可以保證調(diào)整設定值時即可及時報警beep=0;/溫度大于設定值,聲光報警p1=0;elsebeep=1;/溫度不大于設定

25、值即不報警p1=0xff;if(temperature>alanum)/此處設置報警即保證即使沒有進入設置界面任然可以報警beep=0;/溫度大于設定值,聲光報警p1=0;elsebeep=1;/溫度不大于設定值即不報警p1=0xff;/*溫度記錄函數(shù)*/void keeprecord()uchar i=9;if(countmin=1200)/1分鐘 countmin=0;count+;if(count=10)/10分鐘count=0;recordnum+;/記錄一次加一,最大記錄10個值if(recordnum=10)recordnum=10;dorecordtablei=record

26、tablei-1;while(-i);recordtable0=temperature;/最新值填入第一個位置/*查詢記錄的溫度值*/void showrecord()bit flag;uchar a;if(record=0) delay1(80);/延時消抖if(record=0)flag=1;/record第一次按鍵置位進入標志while(flag)/進入查詢display(0,recordtablea/10);/顯示溫度數(shù)值display(1,recordtablea%10);display(2,11);/顯示攝氏度單位display(3,12);display(4,10);/數(shù)碼管第6

27、、7位選中,溫度值與記錄數(shù)之間用-間隔display(5,10);display(6,(a+1)/10);/顯示第幾個記錄值display(7,(a+1)%10);if(add=0)delay1(z);/延時消抖if(add=0)/add按下,查看下一個值if(recordnum=0)a=0;elsea+;if(a=recordnum)/循環(huán)顯示a=0;if(sub=0)/sub按下,查看上一個值delay1(z);if(sub=0)if(recordnum=0)a=0;elsea-;if(a=255)/循環(huán)顯示a=recordnum-1;if(record=0)delay1(80);if(record=0)/record第二次按下,退出查看flag=0;/*定時器中斷0,用于溫度檢測時間間隔和記錄數(shù)據(jù)時間間隔*/void timer0() interrupt 1 th0=(65536-50000)/256;tl0=(65536-50000)%256;/50mscountsec+;countmin+;if(countsec=20)/1scountsec=0;gettemperature();/一秒鐘更新一次溫度值keeprecord();/定時記錄溫度值7 總結(jié)此次課程設計中,難點在于ds18b20的使用,即對它的時序控制、初始化以及字節(jié)讀

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論