數(shù)字溫度計設計畢業(yè)設計_第1頁
已閱讀1頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  畢 業(yè) 設 計 (論文) 任 務 書</p><p>  專業(yè) 應用電子技術(shù)專業(yè) </p><p>  任 務 下 達 日 期 2013 年 3 月 4 日</p><p>  設計(論文)開始日期 2013 年 3 月 11

2、 日</p><p>  設計(論文)完成日期 2013 年 5 月 17 日</p><p>  設計(論文)題目: 數(shù)字溫度計 </p><p>  A·編制設計

3、 </p><p>  B·設計專題(畢業(yè)論文) </p><p><b>  摘 要</b></p><p>  隨著時代的進步和發(fā)展,單片機技術(shù)已經(jīng)普及到我們生活、工作、科研、各個領域,已經(jīng)成為一種比較成熟的

4、技術(shù), 本文主要介紹了一個基于 89C51 單片機的測溫系統(tǒng),詳細描述了利用數(shù)字溫度傳感器 DS18B20 開發(fā)測溫系統(tǒng)的過程,重點對傳感器在單片機下的硬件連接,軟件編程以及各模塊系統(tǒng)流程進行了詳盡分析,特別是數(shù)字溫度傳感器 DS18B20 的數(shù)據(jù)采集過程。對各部分的電路也一一進行了介紹,該系統(tǒng)可以方便的實現(xiàn)實現(xiàn)溫度采集和顯示,并可根據(jù)需要任意設定上下限報警溫度,它使用起來相當方便,具有精度高、量程寬、靈敏度高、體積小、功耗低等優(yōu)點,

5、適合于我們?nèi)粘I詈凸?、農(nóng)業(yè)生產(chǎn)中的溫度測量,也可以當作溫度處理模塊嵌入其它系統(tǒng)中,作為其他主系統(tǒng)的輔助擴展。DS18B20 與 AT89C51 結(jié)合實現(xiàn)最簡溫度檢測系統(tǒng),該系統(tǒng)結(jié)構(gòu)簡單,抗干擾能力強,適合于惡劣環(huán)境下進行現(xiàn)場溫度測量,有廣泛的應用前景。</p><p>  關(guān)鍵詞: 單片機 DS18B20溫度傳感器 數(shù)字溫度計 AT89S52</p><p><b>

6、  目 錄</b></p><p><b>  摘 要5</b></p><p><b>  目 錄6</b></p><p><b>  緒 論7</b></p><p><b>  1概 述8</b></p><

7、p>  1.2 課程設計的意義8</p><p>  1.3 設計的任務和要求8</p><p>  2 開發(fā)工具Proteus與Keil9</p><p>  2.1 Proteus軟件9</p><p>  2.1.1 Proteus簡介9</p><p>  2.1.2 4大功能模塊10&l

8、t;/p><p>  2.1.3 ISIS智能原理圖輸入系統(tǒng)11</p><p>  2.1.4 Proteus簡單應用11</p><p>  2.2 Keil軟件12</p><p>  2.2.1 Keil軟件簡介12</p><p>  2.2.2 Keil軟件調(diào)試功能12</p><

9、p>  3 系統(tǒng)硬件設計及總體方案13</p><p>  3.1 數(shù)字溫度計設計方案論證13</p><p>  3.1.1 方案一13</p><p>  3.1.2 方案二14</p><p>  3.2 系統(tǒng)總體設計14</p><p>  3.3 系統(tǒng)模塊14</p><

10、p>  3.3.1 主控制器15</p><p>  3.3.2 顯示電路16</p><p>  3.3.3 溫度傳感器17</p><p>  3.3.4 報警溫度調(diào)整按鍵21</p><p>  4 系統(tǒng)軟件算法分析21</p><p>  4.1 主程序流程圖21</p><

11、;p>  4.2 讀出溫度子程序22</p><p>  4.3 溫度轉(zhuǎn)換命令子程序22</p><p>  4.4 計算溫度子程序23</p><p>  4.5 顯示數(shù)據(jù)刷新子程序24</p><p>  4.6 按鍵掃描處理子程序24</p><p><b>  5 實驗仿真25&

12、lt;/b></p><p>  6 總結(jié)與體會28</p><p><b>  7致 謝28</b></p><p><b>  參考文獻28</b></p><p>  附 1 源程序代碼29</p><p><b>  緒 論</b>

13、;</p><p>  隨著人們生活水平的不斷提高,單片機控制無疑是人們追求的目標之一,它所給人帶來的方便也是不可否定的,其中數(shù)字溫度計就是一個典型的例子,但人們對它的要求越來越高,要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設施就需要從數(shù)單片機技術(shù)入手,一切向著數(shù)字化控制,智能化控制方向發(fā)展。隨著時代的進步和發(fā)展,單片機技術(shù)已經(jīng)普及到我們生活,工作、科研,各個領域,已經(jīng)成為一種比較成熟的技術(shù),單片機已經(jīng)在測控

14、領域中獲得了廣泛的應用</p><p>  本設計所介紹的數(shù)字溫度計與傳統(tǒng)的溫度計相比,具有讀數(shù)方便,測溫范圍廣,測溫準確,其輸出溫度采用數(shù)字顯示,該設計控制器使用單片機AT89S52,測溫傳感器使用DS18B20,用LCD數(shù)碼管以串口傳送數(shù)據(jù),實現(xiàn)溫度顯示,能準確達到以上要求。</p><p><b>  1概 述</b></p><p> 

15、 1.2 課程設計的意義</p><p>  本次課程設計是在我們學過單片機后的一次實習,可增加我們的動手能力。特別是對單片機的系統(tǒng)設計有很大幫助,也讓我在這次設計中認識到了我的很多不足,從而是我的綜合能力得到提高。</p><p>  1.3 設計的任務和要求</p><p>  1、基本范圍-55℃-128℃</p><p>  2、

16、精度誤差小于0.5℃</p><p>  3、LED 數(shù)碼直讀顯示</p><p>  4、可以任意設定溫度的上下限報警功能</p><p>  2 開發(fā)工具Proteus與Keil </p><p>  2.1 Proteus軟件</p><p>  2.1.1 Proteus簡介</p><p&

17、gt;  Proteus軟件是英國Labcenter electronics公司出版的EDA工具軟件(該軟件中國總代理為廣州風標電子技術(shù)有限公司)。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機及外圍器件。它是目前最好的仿真單片機及外圍器件的工具。雖然目前國內(nèi)推廣剛起步,但已受到單片機愛好者、從事單片機教學的教師、致力于單片機開發(fā)應用的科技工作者的青睞。Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到

18、單片機與外圍電路協(xié)同仿真,一鍵切換到PCB設計,真正實現(xiàn)了從概念到產(chǎn)品的完整設計。是目前世界上唯一將電路仿真軟件、PCB設計軟件和虛擬模型仿真軟件三合一的設計平臺,其處理器模型支持8051、HC11、PIC10/12/16/18/24/30/DSPIC33、AVR、ARM、8086和MSP430等,2010年即將增加Cortex和DSP系列處理器,并持續(xù)增加其他系列處理器模型。在編譯方面,它也支持IAR、Keil和MPLAB等多種編譯器

19、。</p><p><b>  該軟件的特點是:</b></p><p>  1. 實現(xiàn)了單片機仿真和SPICE電路仿真相結(jié)合,具有模擬電路仿真、數(shù)字電路仿真、各種單片機(51系列、AVR、PIG等常用的MCU)及其外圍電路(如LCD、RAM、ROM、鍵盤、LED、A/D、D/A……)組成的系統(tǒng)仿真。</p><p>  2. 提供了多種虛擬儀

20、器。如示波器、邏輯分析儀、信號發(fā)生器等,調(diào)試非常方便。</p><p>  3. 提供軟件調(diào)試功能,同時支持第三方的軟件編譯和調(diào)試環(huán)境,如Keil等軟件。</p><p>  4. 具有強大的原理圖繪制功能。Proteus與其它單片機仿真軟件不同的是,它不僅能仿真單片機CPU的工作情況,也能仿真單片機外圍電路或沒有單片機參與的其它電路的工作情況。因此在仿真和程序調(diào)試時,關(guān)心的不再是某些語句

21、執(zhí)行時單片機寄存器和存儲器內(nèi)容的改變,而是從工程的角度直接看程序運行和電路工作的過程和結(jié)果。對于這樣的仿真實驗.從某種意義上講,是彌補了.實驗和工程應用閹脫節(jié)的矛盾和現(xiàn)象。同時,當硬件調(diào)試成功后,利用Proteus ARES軟件,很容易獲得其PCB圖,為今后的制造提供了方便。</p><p>  2.1.2 4大功能模塊</p><p>  1. 智能原理圖設計(ISIS)</p&g

22、t;<p>  豐富的器件庫:超過27000種元器件,可方便地創(chuàng)建新元件。</p><p>  智能的器件搜索:通過模糊搜索可以快速定位所需要的器件。</p><p>  智能化的連線功能:自動連線功能使連接導線簡單快捷,大大縮短繪圖時間。</p><p>  支持總線結(jié)構(gòu):使用總線器件和總線布線使電路設計簡明清晰。</p><p&

23、gt;  可輸出高質(zhì)量圖紙:通過個性化設置,可以生成印刷質(zhì)量的BMP圖紙,可以方便地供WORD、POWERPOINT等多種文檔使用。 </p><p>  2. 完善的電路仿真功能(Prospice)</p><p>  ProSPICE混合仿真:基于工業(yè)標準SPICE3F5,實現(xiàn)數(shù)字/模擬電路的混合仿真。</p><p>  超過27000個仿真器件:可以通過內(nèi)部

24、原型或使用廠家的SPICE文件自行設計仿真器件,Labcenter也在不斷地發(fā)布新的仿真器件,還可導入第三方發(fā)布的仿真器件。</p><p>  多樣的激勵源:包括直流、正弦、脈沖、分段線性脈沖、音頻(使用wav文件)、指數(shù)信號、單頻FM、數(shù)字時鐘和碼流,還支持文件形式的信號輸入。</p><p>  豐富的虛擬儀器:13種虛擬儀器,面板操作逼真,如示波器、邏輯分析儀、信號發(fā)生器、直流電壓

25、/電流表、交流電壓/電流表、數(shù)字圖案發(fā)生器、頻率計/計數(shù)器、邏輯探頭、虛擬終端、SPI調(diào)試器、I2C調(diào)試器等。</p><p>  生動的仿真顯示:用色點顯示引腳的數(shù)字電平,導線以不同顏色表示其對地電壓大小,結(jié)合動態(tài)器件(如電機、顯示器件、按鈕)的使用可以使仿真更加直觀、生動。</p><p>  高級圖形仿真功能(ASF):基于圖標的分析可以精確分析電路的多項指標,包括工作點、瞬態(tài)特性、

26、頻率特性、傳輸特性、噪聲、失真、傅立葉頻譜分析等。</p><p>  3. 獨特的單片機協(xié)同仿真功能(VSM)</p><p>  支持主流的CPU類型:如ARM7、8051/52、AVR、PIC10/12、PIC16、PIC18、PIC24、dsPIC33、HC11、BasicStamp、8086、MSP430等,CPU類型隨著版本升級還在繼續(xù)增加,如即將支持CORTEX、DSP處理器

27、。</p><p>  支持通用外設模型:如字符LCD模塊、圖形LCD模塊、LED點陣、LED七段顯示模塊、鍵盤/按鍵、直流/步進/伺服電機、RS232虛擬終端、電子溫度計等等,其COMPIM(COM口物理接口模型)還可以使仿真電路通過PC機串口和外部電路實現(xiàn)雙向異步串行通信。</p><p>  實時仿真:支持UART/USART/EUSARTs仿真、中斷仿真、SPI/I2C仿真、MSS

28、P仿真、PSP仿真、RTC仿真、ADC仿真、CCP/ECCP仿真。</p><p>  編譯及調(diào)試:支持單片機匯編語言的編輯/編譯/源碼級仿真,內(nèi)帶8051、AVR、PIC的匯編編譯器,也可以與第三方集成編譯環(huán)境(如IAR、Keil和Hitech)結(jié)合,進行高級語言的源碼級仿真和調(diào)試。</p><p>  4. 實用的PCB設計平臺</p><p>  原理圖到PC

29、B的快速通道:原理圖設計完成后,一鍵便可進入ARES的PCB設計環(huán)境,實現(xiàn)從概念到產(chǎn)品的完整設計。</p><p>  先進的自動布局/布線功能:支持器件的自動/人工布局;支持無網(wǎng)格自動布線或人工布線;支持引腳交換/門交換功能使PCB設計更為合理。</p><p>  完整的PCB設計功能:最多可設計16個銅箔層,2個絲印層,4個機械層(含板邊),靈活的布線策略供用戶設置,自動設計規(guī)則檢查

30、,3D 可視化預覽。</p><p>  多種輸出格式的支持:可以輸出多種格式文件,包括Gerber文件的導入或?qū)С?,便利與其它PCB設計工具的互轉(zhuǎn)(如protel)和PCB板的設計和加工。</p><p>  2.1.3 ISIS智能原理圖輸入系統(tǒng)</p><p>  ISIS是PROTEUS系統(tǒng)的中心,它遠不僅是一個圖表庫。它是具有控制原理圖畫圖的外觀的超強的設

31、計環(huán)境。無論用戶的要求是快速實現(xiàn)復雜設計的仿真以及PCB設計,還是設計精美的原理圖以供出版,ISIS都可以很好的完成。</p><p>  ISIS提供給用戶圖形外觀包括線寬、填充類型、字符等的全部控制,使用戶能夠生成如雜志上看到一樣精美的原理圖,遠勝過CAD軟件繪制出的稀薄的線條。畫完圖可以以圖形文件輸出,或者拷貝到剪切板以便其他文件使用。這就使得ISIS成為制作技術(shù)文件,學術(shù)論文,項目報告的理想工具,也是PC

32、B設計的一個出色的前端。畫圖的外形由風格模板定義。此外,此方案允許用戶定制元件庫提供的庫部件的外觀。</p><p>  2.1.4 Proteus簡單應用</p><p>  圖2-1 proteus界面圖</p><p>  1. 繪制原理圖:繪制原理圖要在原理圖編輯窗口中的藍色方框內(nèi)完成。原理圖編輯窗口的操作是不同于常用的WINDOWS應用程序的,正確的操作是

33、:用左鍵放置元件;右鍵選擇元件;雙擊右鍵刪除元件;右鍵拖選多個元件;先右鍵后左鍵編輯元件屬性;先右鍵后左鍵拖動元件;連線用左鍵,刪除用右鍵;改連接線:先右擊連線,再左鍵拖動;中鍵放縮原理圖。</p><p>  2. 定制自己的元件:有三個個實現(xiàn)途徑,一是用PROTEUS VSM SDK開發(fā)仿真模型,并制作元件;另一個是在已有的元件基礎上進行改造,比如把元件改為bus接口的;還有一個是利用已制作好(別人的)的元件

34、,我們可以到網(wǎng)上下載一些新元件并把它們添加到自己的元件庫里面。</p><p>  3. Sub-Circuits應用:用一個子電路可以把部分電路封裝起來,這樣可以節(jié)省原理圖窗口的空間。</p><p>  2.2 Keil軟件</p><p>  2.2.1 Keil軟件簡介</p><p>  Keil C51是美國Keil Softwa

35、re公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。Keil C51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil C51生成的目標代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言

36、的優(yōu)勢。Keil C51軟件是一個基于32位Windows環(huán)境的應用程序,支持C語言和匯編語言編程,其6.0以上的版本將編譯和仿真軟件統(tǒng)一為μVision(通常稱為μV2)。Keil提供包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,由以下幾部分組成:μVision IDE集成開發(fā)環(huán)境C51編譯器、A51匯編器、LIB51庫管理器、BL51連接/定位器、OH51目標文件生成器以及 Monitor-51

37、、RTX51實時操作系統(tǒng)。</p><p>  2.2.2 Keil軟件調(diào)試功能</p><p>  應用Keil進行軟件仿真開發(fā)的主要步驟為:編寫源程序并保存—建立工程并添加源文件—設置工程—編譯/匯編、連接,產(chǎn)生目標文件—程序調(diào)試。Keil使用“工程”(Project)的概念,對工程(而不能對單一的源程序)進行編譯/匯編、連接等操作。工程的建立、設置、編譯/匯編及連接產(chǎn)生目標文件的方法

38、非常易于掌握。首先選擇菜單File-New…,在源程序編輯器中輸入?yún)R編語言或C語言源程序(或選擇File-Open…,直接打開已用其它編輯器編輯好的源程序文檔)并保存,注意保存時必須在文件名后加上擴展名.asm(.a51)或.c;然后選擇菜單Project-New Project…,建立新工程并保存(保存時無需加擴展名,也可加上擴展名.uv2);工程保存后會立即彈出一個設備選擇對話框,選擇CPU后點確定返回主界面。這時工程管理窗口的文件

39、頁(Files)會出現(xiàn)“Target1”,將其前面+號展開,接著選擇Source Group1,右擊鼠標彈出快捷菜單,選擇“Add File to Group ‘Source Group1’”,出現(xiàn)一個對話框,要求尋找并加入源文件(在加入一個源文件后,該對話框不會消失,</p><p>  成功編譯/匯編、連接后,選擇菜單Debug-Start/Stop Debug Session(或按Ctrl+F5鍵)進入程序

40、調(diào)試狀態(tài),Keil提供對程序的模擬調(diào)試功能,內(nèi)建一個功能強大的仿真CPU以模擬執(zhí)行程序。Keil能以單步執(zhí)行(按F11或選擇Debug-Step)、過程單步執(zhí)行(按F10或選擇Debug-Step Over)、全速執(zhí)行等多種運行方式進行程序調(diào)試。如果發(fā)現(xiàn)程序有錯,可采用在線匯編功能對程序進行在線修改(Debug-Inline Assambly…),不必執(zhí)行先退出調(diào)試環(huán)境、修改源程序、對工程重新進行編譯/匯編和連接、然后再次進入調(diào)試狀態(tài)的

41、步驟。對于一些必須滿足一定條件(如按鍵被按下等)才能被執(zhí)行的、難以用單步執(zhí)行方式進行調(diào)試的程序行,可采用斷點設置的方法處理(Debug-Insert/Remove Breakpoint或Debug-Breakpoints…等)。在模擬調(diào)試程序后,還須通過編程器將.hex目標文件燒寫入單片機中才能觀察目標樣機真實的運行狀況。</p><p>  3 系統(tǒng)硬件設計及總體方案</p><p> 

42、 3.1 數(shù)字溫度計設計方案論證</p><p>  3.1.1 方案一 </p><p>  由于本設計是測溫電路,可以使用熱敏電阻之類的器件利用其感溫效應,在將隨被測溫度變化的電壓或電流采集過來,進行 A/D 轉(zhuǎn)換后,就可以用單片機進行數(shù)據(jù)的處理,在顯示電路上,就可以將被測溫度顯示出來,這種設計需要用到 A/D 轉(zhuǎn)換電路,其中還涉及到電阻與溫度的對應值的計算,感溫電路比較麻煩。而且在對

43、采集的信號進行放大時容易受溫度的影響出現(xiàn)較大的偏差。</p><p>  3.1.2 方案二 </p><p>  進而考慮到用溫度傳感器,在單片機電路設計中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器 DS18B20,此傳感器,可以很容易直接讀取被測溫度值,進行轉(zhuǎn)換,電路簡單,精度高,軟硬件都以實現(xiàn),而且使用單片機的接口便于系統(tǒng) 的再擴展,滿足設計要求。<

44、;/p><p>  從以上兩種方案,很容易看出,采用方案二,電路比較簡單,費用較低,可靠性高,軟件設計也比較簡單,故采用了方案二。</p><p>  3.2 系統(tǒng)總體設計</p><p>  溫度計電路設計總體設計方框圖如圖 3.2-1 所示,控制器采用單片機 AT89S51,溫度傳感器 采用 DS18B20,用 3 位 LED 數(shù)碼管以串口傳送數(shù)據(jù)實現(xiàn)溫度顯示。&l

45、t;/p><p>  圖 3.2-1 總體設計方框圖</p><p><b>  3.3 系統(tǒng)模塊</b></p><p>  系統(tǒng)由單片機最小系統(tǒng)、顯示電路、按鍵、溫度傳感器等組成如圖3.2-2。</p><p>  圖 3.2-2 系統(tǒng)仿真圖</p><p>  3.3.1 主控制器</

46、p><p>  單片機 AT89S51 具有低電壓供電和體積小等特點,四個端口只需要兩個口就能滿足電 路系統(tǒng)的設計需要,很適合便攜手持式產(chǎn)品的設計使用系統(tǒng)可用二節(jié)電池供電。</p><p>  晶振采用 12MHZ。復位電路采用上電加按鈕復位。</p><p>  圖 3.3.1-1 晶振電路</p><p>  圖 3.3.1-2 復位電路&l

47、t;/p><p>  3.3.2 顯示電路</p><p>  顯示電路采用 4 位共陽極 LED 數(shù)碼管,P0 口由上拉電阻提高驅(qū)動能力,作為段碼輸出 并作為數(shù)碼管的驅(qū)動。P2 口的低四位作為數(shù)碼管的位選端。采用動態(tài)掃描的方式顯示如圖3.3.2:</p><p>  圖 3.3.2 數(shù)碼管顯示電路</p><p>  3.3.3 溫度傳感器&

48、lt;/p><p>  DS18B20 溫度傳感器是美國 DALLAS 半導體公司最新推出的一種改進型智能溫度傳感 器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要求通過 簡單的編程實現(xiàn)9~12位的數(shù)字值讀數(shù)方式。</p><p>  DS18B20 的性能特點如下:</p><p>  1、全數(shù)字溫度轉(zhuǎn)換及輸出;</p><

49、;p>  2、最高12位分辨率,精度可達土0.5攝氏度;</p><p>  3、12位分辨率時的最大工作周期為 750 毫秒;</p><p>  4、可選擇寄生工作方式;</p><p>  5、檢測溫度范圍為–55°C~+125°C (–67°F ~+257°F);</p><p>  6、

50、內(nèi)置 EEPROM,限溫報警功能。用戶可定義報警設置 ;</p><p>  7、64 位光刻 ROM,內(nèi)置產(chǎn)品序列號,方便多機掛接;</p><p>  8、多樣封裝形式,適應不同硬件系統(tǒng);</p><p>  9、獨特的單線接口僅需要一個端口引腳進行通信;</p><p>  10、多個DS18B20 可以并聯(lián)在惟一的三線上,實現(xiàn)多點組網(wǎng)

51、功能;</p><p>  11、無須外部器件;</p><p>  12、可通過數(shù)據(jù)線供電,電壓范圍為3.0~5.5V;</p><p><b>  13、零待機功耗;</b></p><p>  14、溫度以9 或12 位數(shù)字;</p><p>  15、報警搜索命令識別并標志超過程序限定溫度

52、(溫度報警條件)的器件;</p><p>  16、負電壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作;</p><p>  DS18B20它有64 位ROM 的結(jié)構(gòu)開始8 位是產(chǎn)品類型的編號,接著是每個器件的惟一的序號,共有48 位,最后8 位是前面56位的CRC 檢驗碼,這也是多個DS18B20 可以采用一線進行通信的原因。溫度報警觸發(fā)器TH 和TL,可通過軟件寫入戶報

53、警上下限[6]。</p><p>  另外,由于DS18B20 單線通信功能是分時完成的,它有嚴格的時隙概念,因此讀寫時序很重要。系統(tǒng)對DS18B20 的各種操作按協(xié)議進行。操作協(xié)議為:初始化DS18B20(發(fā)復位脈沖)→發(fā)ROM 功能命令→發(fā)存儲器操作命令→處理數(shù)據(jù)。</p><p>  DS18B20芯片封裝結(jié)構(gòu)如圖3.33-1:</p><p>  圖 3.3

54、3-1 DS18B20芯片封裝結(jié)構(gòu) </p><p>  DS18B20采用3腳PR-35封裝或8腳SOIC封裝,其內(nèi)部結(jié)構(gòu)框圖如圖3.33-2所示。</p><p>  圖 3.33-2 DS18B20內(nèi)部結(jié)構(gòu)框</p><p>  DS18B20 工作原理 </p><p>  DS18B20 的溫度檢測與數(shù)字數(shù)據(jù)輸出全集成于一個芯片

55、之上,從而抗干擾力更強。其一個工作周期可分為兩個部分,即溫度檢測和數(shù)據(jù)處理。在講解其工作流程之前我們有必要了解18B20的內(nèi)部存儲器資源。DS18B20 共有三種形態(tài)的存儲器資源,它們分別是:ROM只讀存儲器,用于存放 DS18B20ID 編碼,其前8位是單線系列編碼(DS18B20 的編碼是19H),后面48位是芯片唯一的序列號,最后8位是以上56的位的 CRC碼(冗余校驗)。數(shù)據(jù)在出產(chǎn)時設置不由用戶更改。DS18B20 共64位 R

56、OM。 </p><p>  RAM 數(shù)據(jù)暫存器,用于內(nèi)部計算和數(shù)據(jù)存取,數(shù)據(jù)在掉電后丟失,DS18B20 共9個字節(jié) RAM,每個字節(jié)為8位。第1、2 個字節(jié)是溫度轉(zhuǎn)換后的數(shù)據(jù)值信息,第3、4個字節(jié)是用戶 EEPROM(常用于溫度報警值儲存)的鏡像。在上電復位時其值將被刷新。第5個字節(jié)則是用戶第3個 EEPROM的鏡像。第6、7、8個字節(jié)為計數(shù)寄存器,是為了讓用戶得到更高的溫度分辨率而設計的,同樣也是內(nèi)部溫度

57、轉(zhuǎn)換、計算的暫存單元。第9個字節(jié)為前8個字節(jié)的 CRC碼。</p><p>  EEPROM 非易失性記憶體,用于存放長期需要保存的數(shù)據(jù),上下限溫度報警值和校驗數(shù)據(jù),DS18B20共3位EEPROM,并在 RAM 都存在鏡像,以方便用戶操作[7]。</p><p>  DS18B20工作時寄存器中的分辨率轉(zhuǎn)換為相應精度的溫度數(shù)值。該字節(jié)各位的定義如表3.33-3所示。低5位一直為1,TM

58、是工作模式位,用于設置DS18B20在工作模式還是在測試模式,DS18B20出廠時該位被設置為0,用戶要去改動,R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),來設置分辨率。</p><p>  表3.33-3 DS18B20字節(jié)定義</p><p>  DS18B20 可以采用兩種方式供電,一種是采用電源供電方式,此時 DS18B20 的 1腳接地,2腳作為信號線,3腳接電源??偩€,為保證在有效的

59、DS18B20 時鐘周期內(nèi)提供足夠的電流,可用一個 MOSFET 管來完成對 總線的上拉。</p><p>  當 DS18B20 處于寫存儲器操作和溫度 A/D 轉(zhuǎn)換操作時,總線上必須有強的上拉,上拉開啟時間最大為10us。采用寄生電源供電方式時 VDD 端接地。由于單線制只有一根線,因此 發(fā)送接口必須是三態(tài)的。</p><p>  圖 3.3.3-4 溫度傳感器與單片機的連接<

60、/p><p>  3.3.4 報警溫度調(diào)整按鍵</p><p>  本系統(tǒng)設計三個按鍵,采用查詢方式,一個用于選擇切換設置報警溫度和當前溫度,另 外兩個分別用于設置報警溫度的加和減。均采用軟件消抖。</p><p>  圖 3.3.4 按鍵電路</p><p>  4 系統(tǒng)軟件算法分析</p><p>  系統(tǒng)程序主要包

61、括主程序,讀出溫度子程序,溫度轉(zhuǎn)換命令子程序,計算溫度子程序, 顯示數(shù)據(jù)刷新子程序,按鍵掃描處理子程序等。</p><p>  4.1 主程序流程圖</p><p>  主程序的主要功能是負責溫度的實時顯示、讀出并處理 DS18B20 的測量的當前溫度值, 溫度測量每 1s 進行一次。這樣可以在一秒之內(nèi)測量一次被測溫度,其程序流程見圖 4.1 所 示。</p><p&g

62、t;  圖 4.1 主程序流程圖</p><p>  4.2 讀出溫度子程序</p><p>  讀出溫度子程序的主要功能是讀出 RAM 中的9字節(jié),在讀出時需進行 CRC 校驗,校驗 有錯時不進行溫度數(shù)據(jù)的改寫。其程序流程圖如圖 4.2 示</p><p>  4.3 溫度轉(zhuǎn)換命令子程序</p><p>  溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度

63、轉(zhuǎn)換開始命令,當采用12位分辨率時轉(zhuǎn)換時間約為750ms,在本程序設計中采用1s顯示程序延時法等待轉(zhuǎn)換的完成。溫度轉(zhuǎn)換命令子程序流程 圖如上圖,圖 4.3 所示</p><p>  圖4.3 溫度轉(zhuǎn)換流程圖</p><p>  圖4.2 讀溫度流程圖</p><p>  4.4 計算溫度子程序</p><p>  計算溫度子程序?qū)?RAM

64、中讀取值進行 BCD 碼的轉(zhuǎn)換運算,并進行溫度值正負的判定,其程序流程圖如圖 4.4 所示。</p><p>  4.5 顯示數(shù)據(jù)刷新子程序</p><p>  顯示數(shù)據(jù)刷新子程序主要是對分離后的溫度顯示數(shù)據(jù)進行刷新操作,當標志位位為 1時將符號顯示位移入第一位。程序流程圖如圖 4.5</p><p>  圖 4.4 計算溫度流程圖

65、 圖 4.5 顯示數(shù)據(jù)刷新流程圖</p><p>  4.6 按鍵掃描處理子程序</p><p>  按鍵采用掃描查詢方式,設置標志位,當標志位為1時,顯示設置溫度,否則顯示當前溫度。如下圖 4.6 示。</p><p>  圖 4.6 按鍵掃描處理子程序</p><p><b>  5 實驗仿真

66、</b></p><p><b>  5.1軟件仿真</b></p><p>  進入 protuse 后,連接好電路,并將程序下載進去。將 DS18B20 的改為1.0,數(shù)碼管顯 示溫度與傳感器的溫度相同。</p><p>  圖 5-1 溫度顯示仿真</p><p>  當按下 SET 鍵一次時,進入溫度

67、報警上線調(diào)節(jié),此時顯示軟件設置的溫度報警上線,按 ADD或 DEC 分別對報警溫度進行加一或減一。</p><p>  當再次按下 SET 鍵時,進入溫度報警下線調(diào)節(jié),此時顯示軟件設置的溫度報警下線,按 ADD或 DEC 分別對報警溫度進行加一或減一</p><p>  圖 5-2 溫度調(diào)試仿真</p><p>  當?shù)谌伟聪?SET 鍵時,退出溫度報警線設置。顯

68、示當前溫度。</p><p><b>  6 總結(jié)與體會</b></p><p>  通過這次對數(shù)字溫度計的設計與制作,讓我了解了設計電路的程序,也讓我了解了關(guān)于數(shù)字溫度計的原理與設計理念,要設計一個電路總要先用仿真仿真成功之后才實際接線的。但是最后的成品卻不一定與仿真時完全一樣,因為,再實際接線中有著各種各樣的條件制約著。而且,在仿真中無法成功的電路接法,在實際中因

69、為芯片本身的特性而能夠成功。所以,在設計時應考慮兩者的差異,從中找出最適合的設計方法。</p><p>  通過這次學習,讓我對各種電路都有了大概的了解,所以說,坐而言不如立而行,對于這些電路還是應該自己動手實際操作才會有深刻理解。</p><p>  從這次的課程設計中,我真真正正的意識到,在以后的學習中,要理論聯(lián)系實際,把我們所學的理論知識用到實際當中,學習單機片機更是如此,程序只有在

70、經(jīng)常的寫與讀的過程中才能提高,這就是我在這次課程設計中的最大收獲。</p><p><b>  7致 謝</b></p><p>  非常感謝xx老師在我大學的最后學習階段——畢業(yè)設計階段給自己的指導,從最初的選題,到資料收集,到寫作、修改,到論文定稿,他給了我耐心的指導和無私的幫助,在此我向他表示我誠摯的謝意。同時,感謝所有任課老師和所有同學在這三年來給自己的幫助

71、和關(guān)愛,是他們教會了我專業(yè)知識,教會了我如何學習,教會了我如何做人。通過這一階段的努力,畢業(yè)論文終于完成了,這意味著大學生活即將結(jié)束。在大學階段,我在學習上和思想上都受益匪淺,這除了自身的努力外,與各位老師、同學和朋友的關(guān)系、支持和鼓勵是分不開的。最后,感謝各位導師的指導批評。</p><p><b>  參考文獻</b></p><p>  [1]樓然苗,胡佳文,李

72、光飛,劉玉良,俞紅杰,李良兒.單片機實驗與課程設計[M].杭州:浙江大學出版社,2010:127-148</p><p>  [2]劉雨剛,洪炳林,郝文慧.基于DS18B20的高精度礦用溫度計傳感器設計[J].國外電子元器件,2006(12):35-37.</p><p>  [3]黃亞,張益維.溫度傳感器DS75LX與單片機的接口技術(shù)[J].國外電子元器件,2007(10):47-49.

73、</p><p>  [4]胡雪海.單片機原理及應用系統(tǒng)設計[M].北京:電子工業(yè)出版社,2004:59-75.</p><p>  [5]談根林,李慧文,汪慶寶,李禮賢.微型計算機及其在測量中的應用[M].北京:計量出版社,1983:89-105.</p><p>  [6] 樓然苗,李光飛.單片機課程設計指導[M].北京:北京航空航天大學出版社,2007:46-

74、55.</p><p>  [7]胡翔駿.電路分析(第2版)[M].北京:高等教育出版社,2007:68-80.</p><p><b>  附 1 源程序代碼</b></p><p>  //DS18B20 的讀寫程序,數(shù)據(jù)腳 P2.7 //</p><p>  //溫度傳感器 18B20 匯編程序,采用器件默認的 1

75、2 位轉(zhuǎn)化//</p><p>  //最大轉(zhuǎn)化時間 750 微秒,顯示溫度-55 到+125 度,顯示精度//</p><p>  //為 0.1 度,顯示采用 4 位 LED 共陽顯示測溫值//</p><p>  //P0 口為段碼輸入,P34~P37 為位選//</p><p>  /*************************

76、**************************/</p><p>  #include<reg52.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  sbit d1=P2^2;</p>&

77、lt;p>  sbit d2=P2^1;</p><p>  sbit d3=P2^0;</p><p>  sbit d4=P2^3;</p><p>  sbit key1=P3^0;</p><p>  sbit key2=P3^1;</p><p>  sbit key3=P3^2;</p>

78、<p>  sbit beep=P3^3;</p><p>  sbit DS=P1^2;</p><p>  sbit ACC_7=ACC^7;</p><p>  uint count=1000,alarm=300;</p><p>  uchar shu;</p><p>  uchar shi,fe

79、n,ri,yue,nian,xq,miao,ss; </p><p>  uint temp; // 溫度變量</p><p>  uchar flag;</p><p>  uchar code tab[]=</p><p>  {0xc0,0xf9,0xa4,0xb0,</p><p

80、>  0x99,0x92,0x82,0xf8,</p><p><b>  0x80,0x90</b></p><p><b>  };</b></p><p>  uchar code tab1[]=//小數(shù)點點亮</p><p>  {0x40,0x79,0x24,0x30,</p&

81、gt;<p>  0x19,0x12,0x02,0x78,0x00,0x10</p><p><b>  };</b></p><p>  void delay(uint z)</p><p><b>  {</b></p><p><b>  uint x,y;</b

82、></p><p>  for(x=z;x>0;x--)</p><p>  for(y=120;y>0;y--);</p><p><b>  }</b></p><p>  void dsreset()//發(fā)復位</p><p><b>  { </

83、b></p><p><b>  uint i;</b></p><p><b>  DS=0;</b></p><p><b>  i=103;</b></p><p>  while(i>0)i--;</p><p><b> 

84、 DS=1;</b></p><p><b>  i=4;</b></p><p>  while(i>0)i--;</p><p><b>  }</b></p><p>  uchar tmpread() //讀取一字節(jié)</p><p><b&

85、gt;  {</b></p><p>  uchar j,k,dat;</p><p><b>  uint i;</b></p><p>  for(j=1;j<=8;j++)</p><p><b>  {</b></p><p>  DS=0;i++;

86、 //延時</p><p>  DS=1;i++;i++;</p><p><b>  k=DS;</b></p><p>  i=8;while(i>0)i--;</p><p>  dat=(k<<7)|(dat>>1);//讀出的數(shù)據(jù)最低位在最前面存一個字節(jié)在DAT里

87、 </p><p><b>  } </b></p><p>  return(dat);</p><p><b>  }</b></p><p>  void tmpwritebyte(uchar dat) //寫一個字節(jié)</p><p><b>  {&l

88、t;/b></p><p><b>  uint i;</b></p><p><b>  uchar j;</b></p><p>  bit testb;</p><p>  for(j=1;j<=8;j++)</p><p><b>  {<

89、/b></p><p>  testb=dat&0x01;</p><p>  dat=dat>>1;</p><p>  if(testb) //寫 1</p><p><b>  {</b></p><p><b>  DS=0;</b>

90、</p><p><b>  i++;i++;</b></p><p><b>  DS=1;</b></p><p>  i=8;while(i>0)i--;</p><p><b>  }</b></p><p><b>  else

91、</b></p><p><b>  {</b></p><p>  DS=0; //寫 0</p><p>  i=8;while(i>0)i--;</p><p><b>  DS=1;</b></p><p><b>  i++;

92、i++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void tmpchange() //DS18B20溫度變換</p><p>&l

93、t;b>  {</b></p><p>  dsreset();</p><p><b>  delay(1);</b></p><p>  tmpwritebyte(0xcc); //跳過讀取內(nèi)存rom</p><p>  tmpwritebyte(0x44); //開始轉(zhuǎn)換</p>

94、<p><b>  }</b></p><p>  uint tmp() //讀取溫度</p><p><b>  {</b></p><p><b>  float tt;</b></p><p>  uchar a,b;</p&

95、gt;<p>  dsreset();</p><p><b>  delay(1);</b></p><p>  tmpwritebyte(0xcc);</p><p>  tmpwritebyte(0xbe);</p><p>  a=tmpread(); //a為低字節(jié)8位</p>&l

96、t;p>  b=tmpread(); //b為高字節(jié)8位</p><p>  temp=b; //temp為溫度值UINT 16bit</p><p>  temp<<=8; //兩個字節(jié)組合到一起</p><p>  temp=temp|a; </p><p><b>  i

97、f(b>127)</b></p><p><b>  {</b></p><p><b>  flag=1;</b></p><p><b>  ss=flag;</b></p><p>  temp=~temp+1;</p><p>

98、<b>  }</b></p><p>  tt=temp*0.0625; // temp/16 則是溫度的真實值tt.7位整數(shù),4位小數(shù)</p><p>  temp=tt*10+0.5; // 擴大十倍取出了第一位小數(shù)</p><p>  return(temp);</p><p><b>  }</

99、b></p><p>  void displayTemp(uint temp) //顯示溫度程序</p><p><b>  {</b></p><p>  uchar ge,shi,bai,qian,ser;</p><p><b>  d1=0;</b></p><

100、;p><b>  d1=0;</b></p><p><b>  d3=0;</b></p><p><b>  d4=0;</b></p><p>  dsreset();</p><p>  ser=temp/10; //分離出三位要顯示的數(shù)字 </p&

101、gt;<p><b>  SBUF=ser;</b></p><p>  qian=temp/1000;</p><p>  bai=temp/100%10; // 百位數(shù)字</p><p>  shi=temp/10%10; // 十位數(shù)字</p><p>  ge=temp%10; // 個位數(shù)

102、字</p><p>  if(flag==1)</p><p><b>  {</b></p><p><b>  flag=0;</b></p><p><b>  P0=0xbf;</b></p><p><b>  d1=1;</b

103、></p><p><b>  delay(2);</b></p><p><b>  d1=0;</b></p><p><b>  }</b></p><p>  if(qian!=0)</p><p><b>  {</b&g

104、t;</p><p>  P0=tab[qian];</p><p><b>  d1=1;</b></p><p><b>  delay(2);</b></p><p><b>  d1=0;</b></p><p><b>  }<

105、;/b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  P0=0xff;</b></p><p><b>  d1=1;</b></p><p><b&

106、gt;  delay(2);</b></p><p><b>  d1=0;</b></p><p><b>  }</b></p><p>  if(temp>99)</p><p><b>  {</b></p><p>  P0

107、=tab[bai];</p><p><b>  d2=1;</b></p><p><b>  delay(2);</b></p><p><b>  d2=0;</b></p><p><b>  }</b></p><p> 

108、 P0=tab1[shi];</p><p><b>  d3=1;</b></p><p><b>  delay(2);</b></p><p><b>  d3=0;</b></p><p>  P0=tab[ge];</p><p><b&

109、gt;  d4=1;</b></p><p><b>  delay(2);</b></p><p><b>  d4=0;</b></p><p><b>  }</b></p><p>  uint keyscan()</p><p>&

110、lt;b>  {</b></p><p>  if(key1==0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(key1==0)</p><p><b>  {<

111、/b></p><p>  while(!key1);</p><p><b>  shu++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key2==0)</p>

112、<p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(key2==0)</p><p><b>  {</b></p><p>  while(!key2);</p><p>  

113、count=count+10;</p><p>  if(shu==2)</p><p><b>  {</b></p><p>  alarm+=10;</p><p><b>  }</b></p><p><b>  }</b></p>

114、<p><b>  }</b></p><p>  if(key3==0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(key3==0)</p><p><

115、b>  {</b></p><p>  while(!key3);</p><p>  count=count-10;</p><p>  if(shu==2)</p><p><b>  {</b></p><p>  alarm-=10;</p><p&g

116、t;<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  return(count);</p><p><b>  }</b></p><p>  void ma

117、in()</p><p><b>  { </b></p><p><b>  beep=0;</b></p><p>  delay(10);</p><p>  while( 1 )</p><p><b>  {</b></p>&l

118、t;p>  tmpchange();</p><p>  if(shu==0)</p><p><b>  {</b></p><p>  displayTemp(tmp( ));</p><p><b>  }</b></p><p>  keyscan();<

119、/p><p>  if(shu==1)</p><p><b>  {</b></p><p>  displayTemp(count);</p><p><b>  }</b></p><p>  if(shu==2)</p><p><b>

120、  {</b></p><p>  displayTemp(alarm);</p><p><b>  }</b></p><p>  if(shu==3)</p><p><b>  {</b></p><p><b>  shu=0;</b&

121、gt;</p><p><b>  }</b></p><p>  if(temp>count||(temp<alarm))</p><p><b>  {</b></p><p><b>  beep=0;</b></p><p><

122、b>  }</b></p><p><b>  else</b></p><p><b>  beep=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>

溫馨提示

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

評論

0/150

提交評論