DS18B20溫度測量設計實驗報告2--精選文檔_第1頁
DS18B20溫度測量設計實驗報告2--精選文檔_第2頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 成績 信息工程學院課程設計說明書(論文)題 目: 溫度測量 課 程 名 稱: 單片機課程設計 專 業(yè): 電子信息工程 班 級: 電信0901 學 生 姓 名: 學 號: 31 16 10 設 計 地 點: 3#北603 指 導 教 師: 設計起止時間:2012年5月2日至2012年5月22日目 錄一、設計功能要求:3二、 系統(tǒng)總體設計方案:51、基本設計思想:52、實施方案論述:6三、 系統(tǒng)分析與設計:61、程序流程圖及說明62、溫度計的的電路設計9四、 源碼清單:12五、 改進意見與收獲體會:18六、 主要參考資料:19一、設計功能要求: 本次的設計主要是利用了數(shù)字溫度傳感器DS18B20

2、測量溫度信號,計算后可以在LCD數(shù)碼管上顯示相應的溫度值。其溫度測量范圍為-55125,精確到0.5。 本溫度計屬于多功能溫度計,可以設置上下報警溫度,當溫度不在設置范圍內(nèi)時,可以報警。數(shù)字溫度計所測量的溫度采用數(shù)字顯示,控制器使用單片機89C51,測溫傳感器使用DS18B20,用LCD1602實現(xiàn)溫度顯示。從溫度傳感器DS18B20可以很容易直接讀取被測溫度值,進行轉(zhuǎn)換即滿足設計要求。本次使用的單片機89C51和MCS-51是完全兼容的,是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROMFalsh Programmable and Erasable Read Only Memory)的

3、低電壓、高性能CMOS8位微處理器。其主要特點如下: 8位CPU。 工作頻率最高為24M。 128B數(shù)據(jù)存儲器。 4KB程序存儲器。 程序存儲器的尋址空間為64KB。 片外數(shù)據(jù)存儲器的尋址空間為64KB。 128個用戶位尋址空間。 21個字節(jié)特殊功能寄存器。 4個8位的并行I/O接口:P0、P1、P2、P3。 兩個16位定時/計數(shù)器。 兩個優(yōu)先級別的5個中斷源。 1個全雙工的串行I/O接口,可多機通信。 111條指令,喊乘法指令和除法指令。 較強的位處理能力 。 采用單一+5V電源。 對于89C52而言,不同之處在于:有256B的數(shù)據(jù)存儲器、8K的程序存儲器、全雙工串行I/O接口、6個中斷源、

4、3個16位定時/計數(shù)器,工作頻率可升直33Mhz。比51擁有更高的性能。 單片機要對DS18B20進行讀寫,主要通過如下子程序進行驅(qū)動。(1)復位:在使用DS18B20時,首先需要對單片機進行復位。復位時,單片機給DS18B20的單總線至少480us的低電平信號。當DS18B20檢測到此復位信號后會在15-60us內(nèi)給出一個一個存在脈沖。該存在脈沖是是一個60-240us的低電平信號。為了能夠接收到此低電平,需要單片機在復位電平結(jié)束之后將總線拉高。(2)ROM指令:包括讀ROM指令,指定匹配芯片、跳躍ROM、芯片搜索、報警芯片搜索。ROM指令為8位長度,功能是對片內(nèi)的64位光刻ROM進行操作。

5、其主要目的是為了分辨總線上的多個器件。不過,在本系統(tǒng)中由于只有一個DS18B20,所以不需要進行ID辨識,所以可以采用一條特殊的跳過指令。具體指令可以參看其datasheet。(3)發(fā)送存儲器操作指令:在ROM指令發(fā)送給DS18B20后,緊接著需要向它發(fā)送存儲器操作指令,操作指令同樣為8位,共六條,分別是寫RAM數(shù)據(jù)、讀RAM數(shù)據(jù)、將RAM數(shù)據(jù)復制到EEPROM、溫度轉(zhuǎn)換、將EEPROM中的報警值復制到RAM、工作方式切換。(4)執(zhí)行和讀寫操作:一個存儲器操作指令結(jié)束后則將進行指令執(zhí)行或數(shù)據(jù)讀寫。如果是進行溫度轉(zhuǎn)換,需要等待DS18B20執(zhí)行其指令,轉(zhuǎn)換時間一般為500us。DS18B20溫度

6、值格式默認的12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個8比特的RAM中,二進制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實際溫度。 如圖:DS18B20常用ROM指令:二、系統(tǒng)總體設計方案1、基本設計思想 基本設計方案:根據(jù)DS18B20的通訊協(xié)議,單片機控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:每一次讀寫之前都要對DS18B20進行復位操作,復位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對DS18B20進行預定的操作。復位要求

7、主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,當DS18B20收到信號后等待1660微秒左右,后發(fā)出60240微秒的存在低脈沖,主CPU收到此信號表示復位成功。 于是,給DS18B20不同的時序,可以讀取溫度傳感器的值,根據(jù)溫度算法算出當時的溫度值,在給顯示部分,通過LCD顯示出來。2、實施方案論述這個課題主要實現(xiàn)溫度的檢測以及通過數(shù)碼管顯示這兩個大功能,以及讀取這個相對較為容易的功能。因此在溫度檢測這一模塊上,利用DS18B20這一目前比較先進的溫度傳感器,可以很精確地感測實時溫度,對于DS18B20的通訊協(xié)議的控制,讀取測量的溫度值,經(jīng)過一定的算法,可以把溫度轉(zhuǎn)化為十進制,分別為高位和低位,先

8、暫存起來。經(jīng)顯示模塊調(diào)用,最終在LCD上顯示。時鐘電路C51主控電路DS18B20復位電路 顯示電路 電路方框圖2、 系統(tǒng)分析與設計1、程序流程圖及說明主函數(shù)完成對DS18B20的初始化,讀取溫度的轉(zhuǎn)換值,調(diào)用數(shù)據(jù)處理的子程序然后再生成顯示代碼,再將溫度顯示出來,然后根據(jù)溫度顯示的代碼判斷溫度值可以判斷它的值是否超出了預設的范圍。然后返回到主函數(shù)開始的位置,無論溫度值是否超出預設值,程序都會返回開始的位置,重復循環(huán)。開始始初始化、設置常量調(diào)用DS18B20初始化子程序讀溫度轉(zhuǎn)換值調(diào)用數(shù)據(jù)處理子程序生成顯示碼顯示溫度值主函數(shù)流程圖DQ置1DS18B20復位FLAG=?1發(fā)送OCCH 命令,跳過R

9、OM匹配發(fā)送溫度轉(zhuǎn)換命令44H延時750us以上DS18B20初始化跳過ROM匹配發(fā)送溫度命令OBEH調(diào)用讀數(shù)據(jù)子程序返回DS18B20復位子程序DQ置1DQ置0延時至少573msDQ置1短延時等待DS18B20回應DQ=?0FLAG置1FLAG置0延時DQ置1 溫度值子程序2、溫度計的的電路設計溫度計采用AT89C51單片機作為微處理器,溫度計系統(tǒng)的外圍接口電路由晶振、LCD顯示電路、復位電路、溫度檢測電路、LCD驅(qū)動電路。溫度計系統(tǒng)的的硬件電路圖如下圖所示。溫度計的工作過程是:初始化其接收需要檢測的溫度,并一直處于檢測狀態(tài),并將檢測到的溫度值讀取,并轉(zhuǎn)化為十進制數(shù)值,通過LCD顯示出來,再

10、顯示溫度,方便用戶來讀數(shù)使用記錄數(shù)據(jù)。具體實現(xiàn)方法是:單片機將從P2.2管腳讀進來的數(shù)據(jù)進行處理,P0.1到P0.7為數(shù)碼管的段選端口,通過RP1的驅(qū)動對LCD進行驅(qū)動。硬件電路原理圖時鐘電路復位電路顯示電路溫度檢測電路3、 源碼清單#include #include #define uint unsigned int#define uchar unsigned char#define delayNOP() _nop_();_nop_();_nop_();_nop_();sbit DQ = P33;sbit LCD_RS = P20;sbit LCD_RW = P21;sbit LCD_EN

11、= P22;uchar code Temp_Disp_Title=Current Temp : ;uchar Current_Temp_Display_Buffer= TEMP: ;uchar code Temperature_Char8 = 0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00;uchar code df_Table= 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9;uchar CurrentT = 0;uchar Temp_Value=0x00,0x00;uchar Display_Digit=0,0,0,0;bit DS18B20

12、_IS_OK = 1;void DelayXus(uint x) uchar i;while(x-) for(i=0;i200;i+);bit LCD_Busy_Check() bit result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;delayNOP();result = (bit)(P0&0x80);LCD_EN=0;return result;void Write_LCD_Command(uchar cmd)while(LCD_Busy_Check();LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_();P0 =

13、 cmd;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;void Write_LCD_Data(uchar dat)while(LCD_Busy_Check();LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;void LCD_Initialise() Write_LCD_Command(0x01);DelayXus(5);Write_LCD_Command(0x38);DelayXus(5);Write_LCD_Command(

14、0x0c);DelayXus(5);Write_LCD_Command(0x06);DelayXus(5);void Set_LCD_POS(uchar pos) Write_LCD_Command(pos|0x80);void Delay(uint x) while(-x);uchar Init_DS18B20() uchar status;DQ = 1;Delay(8);DQ = 0;Delay(90);DQ = 1;Delay(8);DQ = 1;return status;uchar ReadOneByte() uchar i,dat=0;DQ = 1;_nop_();for(i=0;

15、i= 1;DQ = 1;_nop_();_nop_();if(DQ)dat |= 0X80;Delay(30);DQ = 1;return dat;void WriteOneByte(uchar dat) uchar i;for(i=0;i= 1;void Read_Temperature() if(Init_DS18B20()=1)DS18B20_IS_OK=0;elseWriteOneByte(0xcc);WriteOneByte(0x44);Init_DS18B20();WriteOneByte(0xcc);WriteOneByte(0xbe);Temp_Value0 = ReadOne

16、Byte(); Temp_Value1 = ReadOneByte();DS18B20_IS_OK=1;void Display_Temperature() uchar i;uchar t = 150, ng = 0;if(Temp_Value1&0xf8)=0xf8) Temp_Value1 = Temp_Value1;Temp_Value0 = Temp_Value0+1;if(Temp_Value0=0x00)Temp_Value1+;ng = 1;Display_Digit0 = df_TableTemp_Value0&0x0f;CurrentT = (Temp_Value0&0xf0

17、)4) | (Temp_Value1&0x07)4);Display_Digit3 = CurrentT/100;Display_Digit2 = CurrentT%100/10;Display_Digit1 = CurrentT%10;Current_Temp_Display_Buffer11 = Display_Digit0 + 0;Current_Temp_Display_Buffer10 = .;Current_Temp_Display_Buffer9 = Display_Digit1 + 0;Current_Temp_Display_Buffer8 = Display_Digit2

18、+ 0;Current_Temp_Display_Buffer7 = Display_Digit3 + 0;if(Display_Digit3 = 0)Current_Temp_Display_Buffer7 = ;if(Display_Digit2 = 0&Display_Digit3=0)Current_Temp_Display_Buffer8 = ;if(ng) if(Current_Temp_Display_Buffer8 = )Current_Temp_Display_Buffer8 = -;else if(Current_Temp_Display_Buffer7 = )Current_Temp_Display_Buffer7 = -;else C

溫馨提示

  • 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

提交評論