單片機DS18B20課程設(shè)計_第1頁
單片機DS18B20課程設(shè)計_第2頁
單片機DS18B20課程設(shè)計_第3頁
單片機DS18B20課程設(shè)計_第4頁
單片機DS18B20課程設(shè)計_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

word文檔可自由復(fù)制編輯無線單片機及應(yīng)用課程設(shè)計報告設(shè)計題目:溫度計專業(yè):物聯(lián)網(wǎng)工程組別:溫度計個人組學生姓名:周根弟學號:1121316123起止日期:2014年6月16日~2014年6月20日指導教師:邵鶴帥胡榮林目錄1內(nèi)容摘要 32溫度計的概述及設(shè)計要求 42.1溫度計的概述 42.2設(shè)計任務(wù)及要求 42.2.1基本任務(wù) 42.2.2設(shè)計要求 43硬件設(shè)計 53.1單片機系統(tǒng) 52.1.1功能控制 53.1.2單片機系統(tǒng)電路原理圖 53.2數(shù)字溫度傳感器模塊 63.2.1DS18B20性能 63.2.2DS18B20外形及引腳說明 63.2.3DS18B20接線原理圖 73.3顯示電路 73.4聲光報警電路 83.5數(shù)據(jù)處理 84軟件設(shè)計 94.1主程序模塊 94.2讀溫度值模塊 94.2.1讀值模塊 104.2.2DS18B20初始化子程序流程圖 114.2.3DS18B20寫字節(jié)和讀字節(jié)子程序 124.3中斷模塊 124.4溫度設(shè)定、報警模塊 134.5數(shù)碼管驅(qū)動模塊 135源程序 156總結(jié)體會 207參考文獻 201內(nèi)容摘要目前,單片機已經(jīng)在測控領(lǐng)域中獲得了廣泛的應(yīng)用,它除了可以測量電信以外,還可以用于溫度、濕度等非電信號的測量,能獨立工作的單片機溫度檢測、溫度控制系統(tǒng)已經(jīng)廣泛應(yīng)用很多領(lǐng)域。單片機是一種特殊的計算機,它是在一塊半導體的芯片上集成了CPU,存儲器,RAM,ROM,及輸入與輸出接口電路,這種芯片稱為:單片機。由于單片機的集成度高,功能強,通用性好,特別是它具有體積小,重量輕,能耗低,價格便宜,可靠性高,抗干擾能力強和使用方便的優(yōu)點,使它迅速的得到了推廣應(yīng)用,目前已成為測量控制系統(tǒng)中的優(yōu)選機種和新電子產(chǎn)品中的關(guān)鍵部件。單片機已不僅僅局限于小系統(tǒng)的概念,現(xiàn)已廣泛應(yīng)用于家用電器,機電產(chǎn)品,辦公自動化用品,機器人,兒童玩具,航天器等領(lǐng)域。本次課程設(shè)計,就是用單片機實現(xiàn)溫度控制,傳統(tǒng)的溫度檢測大多以熱敏電阻為溫度傳感器,但熱敏電阻的可靠性差,測量溫度準確率低,而且必須經(jīng)過專門的接口電路轉(zhuǎn)換成數(shù)字信號才能由單片機進行處理。本次采用DS18B20數(shù)字溫度傳感器來實現(xiàn)基于51單片機的數(shù)字溫度計的設(shè)計。傳統(tǒng)的溫度計有反應(yīng)速度慢、讀數(shù)麻煩、測量精度不高、誤差大等缺點而下面利用集成溫度傳感器AD590設(shè)計并制作了一款基于AT89C51的4位數(shù)碼管顯示的數(shù)字溫度計,其電路簡單,軟硬件結(jié)構(gòu)模塊化,易于實現(xiàn)。

該數(shù)字溫度計利用AD590集成溫度傳感器及其接口電路完成溫度的測量并轉(zhuǎn)換成模擬電壓信號,經(jīng)由模數(shù)轉(zhuǎn)換器ADC0804轉(zhuǎn)換成單片機能夠處理的數(shù)字信號,然后送到單片機AT89C51中進行處理變換,最后將溫度值顯示在D2、D1共2位七段碼LED顯示器上。系統(tǒng)以AT89C51單片機為控制核心,2位溫度數(shù)據(jù)顯示電路以及外圍電源、時鐘電路等組成。本次設(shè)計完成一個最小系統(tǒng)的設(shè)計,系統(tǒng)電路簡單、操作簡便,系統(tǒng)具有可靠性高、成本低、功耗小等優(yōu)點。2溫度計的概述及設(shè)計要求2.1溫度計的概述數(shù)字溫度計與傳統(tǒng)的溫度計相比,具有讀數(shù)方便、測溫范圍廣、測溫精確、功能多樣話等優(yōu)點。其主要用于對測溫要求準確度比較高的場所,或科研實驗室使用,該設(shè)計使用STC89C51單片機作控制器,數(shù)字溫度傳感器DS18B20測量溫度,單片機接受傳感器輸出,經(jīng)處理用LED數(shù)碼管實現(xiàn)溫度值顯示。利用集成溫度傳感器DS18B20設(shè)計并制作了一款基于AT89C51的2位數(shù)碼管顯示的數(shù)字溫度計,其電路簡單,軟硬件結(jié)構(gòu)模塊化,易于實現(xiàn)。2.2設(shè)計任務(wù)及要求2.2.1基本任務(wù)1.數(shù)字溫度計利用DS18B20集成溫度傳感器及其接口電路完成溫度的測量并轉(zhuǎn)換成模擬電壓信號,經(jīng)由模數(shù)AD轉(zhuǎn)換器轉(zhuǎn)換成單片機能夠處理的數(shù)字信號。2.模擬電壓信號送到單片機AT89C51中進行處理變換,最后將溫度值顯示在D2、D1共2位七段碼LED顯示器上。3.系統(tǒng)以AT89C51單片機為控制核心,加上AT89C51測溫電路、ADC模數(shù)轉(zhuǎn)換電路、2位溫度數(shù)據(jù)顯示電路以及外圍電源、時鐘電路等組成。2.2.2設(shè)計要求5V供電;溫度采集采用DS18B20;4位LED顯示;2個按鍵;設(shè)計溫度控制器原理圖,學習用PROTEL畫出該原理圖,并用proteus進行仿真;設(shè)計和繪制軟件流程圖,用C語言進行程序編寫;焊接硬件電路,進行調(diào)試。3硬件設(shè)計3.1單片機系統(tǒng)2.1.1功能控制DS18B20數(shù)字溫度傳感器的初始化和讀取溫度值LED數(shù)碼管顯示驅(qū)動與控制按鍵識別和響應(yīng)控制溫度設(shè)置和報警溫度值的存儲和讀取3.1.2單片機系統(tǒng)電路原理圖圖2單片機系統(tǒng)原理圖3.2數(shù)字溫度傳感器模塊3.2.1DS18B20性能獨特的單線接口僅需一個端口引腳進行通信簡單的多點分布應(yīng)用無需外部器件可通過數(shù)據(jù)線供電零待機功耗測溫范圍-55~+125℃,以0.5℃遞增負壓特性:電源極性接反時,傳感器不會因發(fā)熱而燒毀,但不能正常工作3.2.2DS18B20外形及引腳說明圖3DS18B20外形及引腳GND:地DQ:單線運用的數(shù)據(jù)輸入/輸出引腳VD:可選的電源引腳3.2.3DS18B20接線原理圖單總線通常要求接一個約4.7K左右的上拉電阻,這樣,當總線空閑時,其狀態(tài)為高電平。圖4DS18B20接線原理圖3.3顯示電路 LED數(shù)碼管顯示采用動態(tài)掃描方式,能簡化電路布線,節(jié)約單片機I/O端口。段碼和位碼由單片機P0送出,分別用74HC673N鎖存。圖9數(shù)碼管驅(qū)動顯示電路

3.4聲光報警電路 當溫度超過設(shè)定溫度值時,實現(xiàn)聲光報警,蜂鳴器鳴叫、8個發(fā)光二極管點亮。蜂鳴器由單片機P2^3口控制,用三極管驅(qū)動,發(fā)光二極管接單片機P1口,由74HC673N鎖存。圖10聲光報警電路3.5數(shù)據(jù)處理高速暫存存儲器由9個字節(jié)組成,其分配如表5所示。當溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補碼形式存放在高速暫存存儲器的第0和第1個字節(jié)。單片機可通過單線接口讀到該數(shù)據(jù),讀取時低位在前,高位在后。圖7字節(jié)分配4軟件設(shè)計4.1主程序模塊主程序需要調(diào)用3個子程序,分別為:實時溫度顯示子程序:驅(qū)動數(shù)碼管把實時溫度值送出在LED數(shù)碼管顯示溫度設(shè)定、報警子程序:設(shè)定報警溫度值,當溫度超過該值時產(chǎn)生報警,即驅(qū)動蜂鳴器鳴叫、8個發(fā)光二極管發(fā)光主程序流程圖:開始開始定時器初始化、啟動定時器初始化、啟動顯示實時溫度顯示實時溫度溫度設(shè)定、報警溫度設(shè)定、報警完成溫度的復(fù)位完成溫度的復(fù)位圖12主程序流程圖4.2讀溫度值模塊讀溫度值模塊需要調(diào)用4個子程序,分別為:DS18B20初始化子程序:讓單片機知道DS18B20在總線上且已準備好操作DS18B20寫字節(jié)子程序:對DS18B20發(fā)出命令DS18B20讀字節(jié)子程序:讀取DS18B20存儲器的數(shù)據(jù)延時子程序:對DS18B20操作時的時序控制4.2.1讀值模塊入口入口數(shù)據(jù)轉(zhuǎn)換處理讀取溫度值高低位跳過讀序列號DS18B20初始化延時啟動溫度轉(zhuǎn)換跳過讀序列號DS18B20初始化數(shù)據(jù)轉(zhuǎn)換處理讀取溫度值高低位跳過讀序列號DS18B20初始化延時啟動溫度轉(zhuǎn)換跳過讀序列號DS18B20初始化返回 返回 圖13讀溫度值子程序流程圖4.2.2DS18B20初始化子程序流程圖入口入口DQ為低電平?延時15~60msDQ拉高電平延時>480msDQ復(fù)位0稍延時DQ置高電平DQ為低電平?延時15~60msDQ拉高電平延時>480msDQ復(fù)位0稍延時DQ置高電平 N返回Y返回 圖14DS18B20初始化子程序流程圖4.2.3DS18B20寫字節(jié)和讀字節(jié)子程序 圖15DS18B20寫字節(jié)子程序流程圖 圖16DS18B20讀字節(jié)子程序流程圖4.3中斷模塊中斷采用T0方式1,初始值定時為50ms。中斷模塊需調(diào)用兩個子程序:讀溫度值子程序:定時讀取溫度值,實時更新溫度值記錄溫度值子程序:定時記錄溫度值,供查詢使用把這兩個子程序放在中斷的原因是,不會因為調(diào)整報警溫度或查詢歷史溫度值而停止更新溫度值和記錄溫度值。中斷模塊流程圖:1秒?計數(shù)值加1定時器重置初值中斷入口1秒?計數(shù)值加1定時器重置初值中斷入口讀溫度值 Y讀溫度值中斷返回記錄溫度值N中斷返回記錄溫度值 圖17中斷模塊流程圖4.4溫度設(shè)定、報警模塊此模塊跟溫度查詢模塊類似,需要接受按鍵輸入,進入模塊界面后,按加減鍵分別上調(diào)和下調(diào)設(shè)定報警溫度值,當實時溫度值超過設(shè)定值時驅(qū)動蜂鳴器發(fā)聲,并點亮8位發(fā)光二極管,實現(xiàn)聲光報警。4.5數(shù)碼管驅(qū)動模塊本設(shè)計數(shù)碼管通過鎖存器接單片機P0口,采用動態(tài)掃描驅(qū)動7段LED數(shù)碼管進行顯示,需調(diào)用延時子程序以穩(wěn)定顯示。模塊流程圖如下:P0清零關(guān)位選送位碼開位選P0置高關(guān)段選入口P0清零關(guān)位選送位碼開位選P0置高關(guān)段選入口 開段選開段選 延時關(guān)段選送段碼延時關(guān)段選送段碼 返回返回圖20數(shù)碼管驅(qū)動模塊流程圖5源程序#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint/*************************變量定義************************************/sbitDQ=P2^2;//ds18b20端口sbitbeep=P2^3;//蜂鳴器使能端sbitdula=P2^6;//數(shù)碼管段選使能sbitwela=P2^7;//數(shù)碼管位選使能sbitalarm=P3^6;//設(shè)定報警功能鍵ucharcodetabled[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,//0~9的七段數(shù)碼管段碼0x40,0x63,0x39};//-c的段碼ucharcodetablew[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//1~8個數(shù)碼管的位選碼uintcountmin;//計數(shù)變量ucharalanum=30;//報警溫度值,初始值為30攝氏度/**********************函數(shù)聲明***************************************/voiddelay1(ucharMS);//動態(tài)掃描延時子程序voiddelay(uchari);//DS18B20工作延時子程序 voidInit_DS18B20();//DS18B20初始化子程序voidWriteOneChar(unsignedchardat);//向DS18B20寫一字節(jié)數(shù)據(jù)ucharReadOneChar(void);//向DS18B20讀一字節(jié)數(shù)據(jù)voidGetTemperature();//由DS18B20產(chǎn)生溫度值voidDisplay(ucharwei,ucharduan);//數(shù)碼管驅(qū)動子程序voidAlarm();//溫度報警voidShowtemperature(uchartt);//溫度顯示/*********************主函數(shù)*******************************************/voidmain(){ TMOD=0x01;//定時器初始化,定時器0方式1 TH0=(65536-50000)/256;//50ms TL0=(65536-50000)%256; EA=1;//開中斷 ET0=1; TR0=1;//啟動定時器 while(1) { Showtemperature(temperature);//顯示實時溫度 Alarm();//溫度設(shè)定、報警 }}/************************動態(tài)掃描延時函數(shù)********************************/voiddelay1(ucharMS){ inti,j; for(i=80;i>0;i--) for(j=MS;j>0;j--);}/************************DS18B20工作延時函數(shù)*****************************/voiddelay(uchari){while(i--);}/*************************DS18B20初始化函數(shù)******************************/voidInit_DS18B20(void){ unsignedcharx=0; DQ=1;//DQ復(fù)位 delay(8);//稍做延時 DQ=0;//單片機將DQ拉低 delay(80);//精確延時大于480us DQ=1;//拉高總線 delay(10); x=DQ;//稍做延時后如果x=0則初始化成功x=1則初始化失敗 delay(5); while(!x) { x=DQ; }}/*************************讀一個字節(jié)**************************************/ucharReadOneChar(void){unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--){DQ=0;//給脈沖信號dat>>=1;DQ=1;//給脈沖信號if(DQ)dat|=0x80;delay(5);}return(dat);}/**************************寫一個字節(jié)*************************************/voidWriteOneChar(unsignedchardat){unsignedchari=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;delay(5);DQ=1;dat>>=1;}delay(5);}/*************************產(chǎn)生溫度值***************************************/voidGetTemperature(){ uchartempL,tempH;//分別為數(shù)據(jù)低位和高位 uinttemp; Init_DS18B20(); WriteOneChar(0xCC);//跳過讀序列號的操作 WriteOneChar(0x44);//啟動溫度轉(zhuǎn)換 delay(200); Init_DS18B20(); WriteOneChar(0xCC);//跳過讀序號列號的操作 WriteOneChar(0xBE);//讀取溫度寄存器等(共可讀9個寄存器)前兩個就是溫度 tempL=ReadOneChar();//讀出溫度低位LSB tempH=ReadOneChar();//讀出溫度高位MSB temp=tempH*16+tempL/16;//tempL右移四位去掉小數(shù)位 temperature=temp&0xff;//測量0~50度,只取temp低八位}/**********************數(shù)碼管驅(qū)動函數(shù)*************************************/voidDisplay(ucharwei,ucharduan){ dula=0; P0=0xff; wela=1; P0=tablew[wei]; wela=0; P0=0; dula=1; P0=tabled[duan]; dula=0; delay1(1);}/**********************溫度顯示函數(shù)**************************************/voidShowtemperature(uchartt){ Display(2,tt/10);//顯示溫度數(shù)值 Display(3,tt%10); Display(4,11);//顯示攝氏度單位 Display(5,12); }/***************************報警函數(shù)************************************/voidAlarm(){ bitflag; if(alarm==0) { delay1(80); //延時消抖 if(alarm==0) { flag=1; } } while(flag) { if(add==0) { delay1(z);//延時消抖 if(add==0) { alanum++;//add鍵按下,上調(diào)設(shè)定值 if(alanum==51) { alanum=0;//最大值為50攝氏度,顯示 } } } } Showtemperature(alanum); Display(0,10);//選中數(shù)碼管的其他空閑位 Display(1,10);//區(qū)別于實時溫度顯示“----” Display(6,10); Display(7,10); if(temperature>alanum)//此處設(shè)置報警可以保證調(diào)整設(shè)定值時即可及時報警 { beep=0;//溫度大于設(shè)定值,聲光報警 P1=0; } else { beep=1;//溫度不大于設(shè)定值即不報警 P1=0xff; } } if(temperature>alanum)//此處設(shè)置報警即保證即使沒有進入設(shè)置界面任然可以報警 { beep=0;//溫度大于設(shè)定值,聲報警 P1=0; } else { beep=1;//溫度不大于設(shè)定值即不報警 P

溫馨提示

  • 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

提交評論