基于單片機(jī)的溫度警報系統(tǒng)課程設(shè)計論文_第1頁
已閱讀1頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  編號: </p><p><b>  課程設(shè)計說明書</b></p><p><b> ?。ɑA(chǔ)工程設(shè)計)</b></p><p>  題 目:基于單片機(jī)的溫度警報系統(tǒng) </p><p>  學(xué) 院: 信息與通信學(xué)院

2、</p><p>  專 業(yè): 通信工程 </p><p>  學(xué)生姓名: </p><p>  學(xué) 號: </p><p>  指導(dǎo)教師: </p&g

3、t;<p>  職 稱: </p><p>  題目類型: 理論研究 實驗研究 工程設(shè)計 工程技術(shù)研究 軟件開發(fā)</p><p>  2016 年 12 月 20 日</p><p><b>  摘  要</b></p><p>

4、  在我國的現(xiàn)代化進(jìn)程中,對很多的外界溫度的測量不再憑人為感官,而是更多的依靠數(shù)字的直接體現(xiàn)。溫度直觀的數(shù)字體現(xiàn)對于工業(yè)生產(chǎn)、疾病診斷、用電安全等方面有著很重要的作用。對于一定區(qū)域內(nèi)的溫度失控及時的發(fā)出警報,讓損失降到最低,不讓災(zāi)難的范圍擴(kuò)大。</p><p>  本文介紹了基于STC89C52單片機(jī)、DS18B20溫度傳感器的溫度警報器的設(shè)計。使用LCD液晶顯示屏實時顯示當(dāng)前溫度。還擁有可調(diào)節(jié)上下限溫度按鍵,當(dāng)

5、溫度失控時(即超出監(jiān)控的溫度區(qū)間)及時發(fā)出警報。</p><p>  關(guān)鍵詞:STC89C52單片機(jī);DS18B20溫度傳感器;溫度警報</p><p><b>  目  錄</b></p><p><b>  引言1</b></p><p>  1 課程設(shè)計的要求1</p>&

6、lt;p><b>  2 設(shè)計方案1</b></p><p>  2.1 可控門限溫度警報器的設(shè)計分析1</p><p>  2.2 各模塊方案選擇與論證1</p><p>  3 硬件及其關(guān)鍵技術(shù)介紹3</p><p>  3.1 電路設(shè)計3</p><p>  3.2單片機(jī)

7、最小系統(tǒng)的設(shè)計4</p><p><b>  4 軟件設(shè)計9</b></p><p>  4.1 主程序流程圖9</p><p>  4.2 電路仿真圖10</p><p>  5 性能測試10</p><p>  5.1 測試用例10</p><p>  

8、5.2 測試結(jié)果分析11</p><p>  5.3 測試過程錯誤分析11</p><p>  6 設(shè)計總結(jié)11</p><p><b>  謝 辭13</b></p><p><b>  參考文獻(xiàn)14</b></p><p><b>  附 錄1

9、5</b></p><p><b>  引言</b></p><p>  在眾多場合需要用到溫度報警器。例如變壓器超溫報警、冰箱溫度異常、環(huán)境溫度監(jiān)測、配電柜溫度監(jiān)測、蔬菜大棚等地方都可應(yīng)用。本次設(shè)計基于溫度傳感器和單片機(jī)實現(xiàn)了在一個溫度區(qū)間內(nèi)的監(jiān)控,提供了警報和顯示功能。其研究具有一定的學(xué)術(shù)價值和廣泛的市場前景。</p><p>

10、  1 課程設(shè)計的要求</p><p>  本設(shè)計采用STC89C52單片機(jī)為核心,結(jié)合液晶顯示屏1602和溫度傳感器18B20等外圍電路,通過程序組成一個溫度報警器,使其具有如下功能。</p><p><b>  具體要求有:</b></p><p>  能夠?qū)崟r顯示當(dāng)前溫度</p><p>  能夠用按鍵調(diào)節(jié)上下限

11、溫度</p><p>  超出所監(jiān)控的溫度區(qū)間發(fā)出警報</p><p><b>  2 設(shè)計方案</b></p><p>  2.1 可控門限溫度警報器的設(shè)計分析</p><p>  本文介紹的是采用數(shù)字溫度傳感器作為敏感元件的溫度警報器,當(dāng)溫度超出或低于所給的溫度區(qū)間時,會發(fā)出警報聲以及相應(yīng)的燈會亮,溫度過高時蜂鳴器

12、發(fā)出混濁的聲響及紅燈亮,溫度過低時蜂鳴器發(fā)出尖銳的聲響及綠燈亮。此次設(shè)計的溫度區(qū)間可通過按鍵調(diào)節(jié)。</p><p>  2.2 各模塊方案選擇與論證</p><p>  2.2.1 單片機(jī)的選擇</p><p>  方案一:采用STC89C52單片機(jī)。STC89C52單片機(jī)是STC公司生產(chǎn)的低功耗,高可靠的單片機(jī),是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈

13、活性高且價廉的方案。它具有8K字節(jié)可編程FLASH存儲器(次數(shù):100,000次以上),512位內(nèi)部RAM,兩個16B定時/計數(shù)器,低功耗的閑置和掉電模式且支持在線仿真。用STC提供的STC-ISP.exe工具可將原有的代碼下載進(jìn)STC相關(guān)的單片機(jī),或用通用編程器編程。STC89C52芯片功能強(qiáng)大,內(nèi)部超級加密,,利用ISP技術(shù)寫入程序,無讀出命令,無法解密,可靈活應(yīng)用于各種控制領(lǐng)域且價格便宜。</p><p>

14、  方案二:采用陵陽61單片機(jī)(SPCE061A)。該單片機(jī)有32位通用可編程輸入/輸出端口,2個10位DAC(數(shù)-模轉(zhuǎn)換)輸出通道,7通道10位電壓模-數(shù)轉(zhuǎn)換器(ADC)和單通道語音模-數(shù)轉(zhuǎn)換器。具有RAM、ROM空間大、指令周期短、運(yùn)算速度快、低功耗、低電壓等特點(diǎn),其中聲音模-數(shù)轉(zhuǎn)換器輸入通道內(nèi)置麥克風(fēng)放大器自動增益控制(AGC)功能:可編程音頻處理,使用凌陽音頻編碼SACM_S240方式(2.4K位/秒),能容納210秒的語音數(shù)據(jù)

15、,但價格昂貴。</p><p>  綜上所述,由于方案一價格低廉,本系統(tǒng)程序小,儲存器容量小,能實現(xiàn)系統(tǒng)功能,故采用方案一。</p><p>  2.2.2按鍵的選擇</p><p>  按鍵控制采用獨(dú)立式按鍵,直接在單片機(jī)的I/O口上接上按鍵。如圖所示:</p><p><b>  圖2-1 獨(dú)立按鍵</b></

16、p><p>  key0實現(xiàn)溫度減一操作;key1具有兩個功能:1.切換當(dāng)前操作上/下限溫度狀態(tài),2.實現(xiàn)溫度加一操作。</p><p>  2.2.3顯示方案的選擇</p><p>  方案一:采用傳統(tǒng)的數(shù)碼管顯示。數(shù)碼管具有低壓低耗能、壽命長、對外界環(huán)境要求低等特點(diǎn),而且其精度比較高。采用BCD編碼方式顯示數(shù)字,程序編譯簡單,但占用I/O接口較多。</p>

17、;<p>  方案二:采用MZLH01-12864顯示。MZLH01-12864為一塊128×64點(diǎn)陣的LCD顯示模組,模組自帶兩種字號的二級漢字庫,并且自帶基本繪圖GUI功能,包括畫點(diǎn)、畫直線、矩形、圓形等;此外還自帶有兩種字號的ASCII碼西文字庫。模組上為串行SPI接口,電源和背光之外通信僅需要連接一根從機(jī)選擇線(SS)、一根時鐘線(SCK)、一根數(shù)據(jù)線(SDA)以及一根BUSY線即可;但價格昂貴,有很多功

18、能沒有用到,很浪費(fèi)。</p><p>  方案三:采用LCD1602顯示,LCD1602是一種用5×7點(diǎn)陣圖形或5×10圖形來顯示字符的液晶顯示器。LCD1602有明顯的優(yōu)點(diǎn):微功耗、尺寸小、超薄輕巧、顯示信息量大、字跡清晰、顯示穩(wěn)寫美觀。但LCD1602不能顯示中文字符,但并不影響本市計的要求。</p><p>  權(quán)衡利弊,采用第三種方案來實現(xiàn)本溫度警報器的顯示功能

19、。</p><p>  2.2.4溫度傳感器的選擇</p><p>  方案一:采用pt100溫度傳感器。pt100溫度傳感器是一種將溫度變量轉(zhuǎn)換為可傳送的標(biāo)準(zhǔn)化輸出信號的儀表。主要用于工業(yè)過程溫度參數(shù)的測量和控制。帶傳感器的變送器通常由兩部分組成:傳感器和信號轉(zhuǎn)換器。傳感器主要是熱電偶或熱電阻;信號轉(zhuǎn)換器主要由測量單元、信號處理和轉(zhuǎn)換單元組成(由于工業(yè)用熱電阻和熱電偶分度表是標(biāo)準(zhǔn)化的,因

20、此信號轉(zhuǎn)換器作為獨(dú)立產(chǎn)品時也稱為變送器),有些變送器增加了顯示單元,有些還具有現(xiàn)場總線功能。</p><p>  方案二:采用DS18B20數(shù)字溫度傳感器。DS18B20數(shù)字溫度傳感器接線方便,封裝成后可應(yīng)用于多種場合,如管道式,螺紋式,磁鐵吸附式,不銹鋼封裝式,型號多種多樣,有LTM8877,LTM8874等等。主要根據(jù)應(yīng)用場合的不同而改變其外觀。封裝后的DS18B20可用于電纜溝測溫,高爐水循環(huán)測溫,鍋爐測溫

21、,機(jī)房測溫,農(nóng)業(yè)大棚測溫,潔凈室測溫,彈藥庫測溫等各種非極限溫度場合。耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測溫和控制領(lǐng)域。</p><p>  考慮到成本及易使用性,選擇方案二DS18B20作為本次設(shè)計的溫度傳感器。</p><p>  3 硬件及其關(guān)鍵技術(shù)介紹</p><p><b>  3.1 電路設(shè)計</b&g

22、t;</p><p>  溫度警報器的基本框圖如下:</p><p>  圖3-1 溫度警報基本框圖</p><p>  單片機(jī)將溫度傳感器中的溫度數(shù)據(jù)讀取出來,并在LCD上實時顯示。通過按鍵來調(diào)節(jié)所要監(jiān)控的溫度區(qū)間,當(dāng)溫度發(fā)生失控時警報電路作出相應(yīng)的反應(yīng)。</p><p>  3.2單片機(jī)最小系統(tǒng)的設(shè)計</p><p&g

23、t;  單片機(jī)最小系統(tǒng)電路原理圖如圖:</p><p>  圖3-2 單片機(jī)最小系統(tǒng)電路原理圖</p><p>  該單片機(jī)最小系統(tǒng)有復(fù)位電路和晶振電路等。為了給單片機(jī)供電和方便程序下載到單片機(jī)中,設(shè)計了STC下載電路。</p><p>  3.2.1 STC89C51單片機(jī)</p><p>  STC89C52片內(nèi)含有Flash程序存儲器、

24、SRAM、UART、SPI、A\D、PWM等模塊。該器件的基本功能與普通的51單片機(jī)完全兼容。</p><p><b>  主要特性:</b></p><p>  1.內(nèi)置標(biāo)準(zhǔn)51內(nèi)核,機(jī)器周期:增強(qiáng)型為6時鐘,普通型為12時鐘; </p><p>  2.工作頻率范圍:0~40MHZ,相當(dāng)于普通8051的0~80MHZ; </p>

25、<p>  3.STC89C5xRC對應(yīng)Flash空間:4KB\8KB\15KB; </p><p>  4.內(nèi)部存儲器(RAM):512B; </p><p>  5.定時器\計數(shù)器:3個16位; </p><p>  6.通用異步通信口(UART)1個; </p><p>  7.中斷源:8個; </p>&l

26、t;p>  8.有ISP(在系統(tǒng)可編程)\IAP(在應(yīng)用可編程),無需專用編程器\仿真器; </p><p>  9.通用I\O口:32\36個; </p><p>  10.工作電壓:3.8~5.5V; </p><p>  11.XTAL2(18腳)、XTAL1(19腳):使用內(nèi)部振蕩器時,用來外接石英晶體和電容。晶振電路的電路原理圖如下:</p&g

27、t;<p>  圖3-3 晶振電路原理圖</p><p>  12.RST(9腳):復(fù)位輸入端。使RST=1時,單片機(jī)內(nèi)部復(fù)位為初始狀態(tài)。復(fù)位電路的電路圖如下:</p><p>  圖3-4 復(fù)位電路原理圖</p><p>  52系列單片機(jī)為許多控制提供了高度靈活和低成本的解決方法。充分利用它的片仙資源,即可在較少外圍電路的情況下構(gòu)成功能完善的溫度警

28、報器。</p><p>  3.2.2 DS18B20 溫度傳感器</p><p>  DS18B20的特性:</p><p>  獨(dú)特的單線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通訊。</p><p>  測溫范圍 -55℃~+125℃,固有測溫誤差(注意,不是分辨率,這里之前是錯誤的

29、)1℃。</p><p>  ③支持多點(diǎn)組網(wǎng)功能,多個DS18B20可以并聯(lián)在唯一的三線上,最多只能并聯(lián)8個,實現(xiàn)多點(diǎn)測溫,如果數(shù)量過多,會使供電電源電壓過低,從而造成信號傳輸?shù)牟环€(wěn)定。</p><p>  工作電源: 3.0~5.5V/DC (可以數(shù)據(jù)線寄生電源)</p><p>  在使用中不需要任何外圍元件</p><p>  測量結(jié)

30、果以9~12位數(shù)字量方式串行傳送</p><p>  不銹鋼保護(hù)管直徑 Φ6</p><p>  適用于DN15~25, DN40~DN250各種介質(zhì)工業(yè)管道和狹小空間設(shè)備測溫</p><p>  標(biāo)準(zhǔn)安裝螺紋 M10X1, M12X1.5, G1/2”任選</p><p> ?、?PVC電纜直接出</p><p>

31、  DS18B20溫度傳感器時序圖:</p><p>  此處的主控器為單片機(jī)</p><p>  圖3-5 復(fù)位時序圖</p><p><b>  圖3-6 寫時序圖</b></p><p><b>  圖3-7 讀時序圖</b></p><p>  3.2.3 LCD液晶

32、屏</p><p>  1602字符型LCD通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線</p><p>  VCC(15腳)和地線GND(16腳),其控制原理與14腳的LCD完全一樣,其中:</p><p>  圖 3-8 液晶屏引腳圖</p><p>  表3-1 引腳功能說明表</p><p&

33、gt;  表3-2 寄存器選擇控制表</p><p>  注:關(guān)于E=H脈沖——開始時初始化E為0,然后置E為1,再清0.</p><p>  busy flag(DB7):在此位為1時,LCD忙,將無法再處理其他的指令要求。</p><p><b>  讀寫時序圖:</b></p><p>  圖3-9 LCD讀時序圖

34、</p><p>  3.2.4 可調(diào)溫度上下限的精簡按鍵設(shè)計</p><p>  本次設(shè)計共用四個按鍵開關(guān),一個用于總電源,一個用于復(fù)位單片機(jī)。除此之外的兩個按鍵才具有操作性。將這兩個按鍵稱為A和B。A按鍵具有兩個功能:1.用于切換上限溫度和下限溫度的操作。2.溫度計數(shù)加一。B按鍵僅具有一個溫度計數(shù)減一功能。關(guān)于這兩個按鍵的實現(xiàn),A按鍵的實現(xiàn)需要用到外部中斷及定時器,外部中斷觸發(fā)則開始定

35、時器的計數(shù),計數(shù)值大則為切換功能,計數(shù)值小則為溫度計數(shù)加一功能。表現(xiàn)為長按則為切換,短按則為計數(shù)加一。B按鍵采用掃描方式。</p><p><b>  4 軟件設(shè)計</b></p><p>  4.1 主程序流程圖</p><p>  圖4-1 主程序流程圖</p><p>  在程序的開始進(jìn)行一系列的初始化后進(jìn)入循環(huán)

36、,在循環(huán)中進(jìn)行實時讀取并刷新當(dāng)時溫度再顯示到LCD1602上,并且掃描獨(dú)立按鍵。此外還有一個觸發(fā)中斷按鍵,此按鍵具有雙功能(切換當(dāng)前控制上/下限溫度狀態(tài)、溫度加一)。</p><p><b>  4.2 電路仿真圖</b></p><p>  圖4-2 電路仿真圖</p><p>  通過仿真軟件,能驗證程序是否正確,在仿真的過程中遇到過因?qū)慙

37、CD1602時序不對而發(fā)生的LCD顯示不正常問題,在后來的調(diào)試的過程中解決了這一問題。</p><p><b>  5 性能測試</b></p><p>  僅僅完成設(shè)計過程,是無法驗證設(shè)計出來的作品是否能真正實現(xiàn)功能的,所以系統(tǒng)的性能測試也是一個重要的環(huán)節(jié)。我們需要對溫度警報系統(tǒng)的各項功能逐一測試。</p><p><b>  5

38、.1 測試用例</b></p><p>  (1)用手抓住DS18B20使其升溫,觀察實時顯示溫度的變化情況</p><p> ?。?)測試A按鍵的兩個功能(切換和計數(shù)加一)是否正常,B按鍵的計數(shù)減一是否正常</p><p> ?。?)將上限溫度調(diào)到接近當(dāng)前顯示溫度,再用手抓住使DS18B20升溫使其超過上限溫觀察是否發(fā)出警報并發(fā)出相應(yīng)聲響。再將下限溫度

39、調(diào)到接近當(dāng)前顯示溫度,使DS18B20降溫,使其低于溫度下限,觀察是否發(fā)出警報并發(fā)出相應(yīng)聲響。</p><p>  5.2 測試結(jié)果分析</p><p>  測試用例(1)結(jié)果正常,顯示當(dāng)前溫度實時發(fā)生變化并符合當(dāng)前室內(nèi)溫度</p><p>  測試用例(2)結(jié)果有時A按鍵不按照意愿工作,有時發(fā)生計數(shù)過快的情況,隨后加上中斷按鍵的消抖語句后結(jié)果正常。B按鍵工作正常。

40、</p><p>  測試用例(3)工作正常。</p><p>  5.3 測試過程錯誤分析</p><p>  在最開始,將板子焊接完成時,板子并沒有工作。一上電,指示電源狀態(tài)的發(fā)光二極管就燒了,隨后想起與這個發(fā)光二極管的所串聯(lián)的電阻為330歐,這樣一來所通過二極管的電流就變成了15毫安左右,然后就燒壞的二極管和電阻換掉后發(fā)光正常,不過又發(fā)生了異常的地方,就是這個

41、電源指示燈會在接通是后亮幾秒就熄滅,還有就是LCD顯示屏也沒有正常顯示,只是顯示幾個黑點(diǎn)。</p><p>  首先解決的是電源指示燈在接通電后亮幾秒就熄滅的問題,這個問題是由于DS18B20插反的結(jié)果,DS18B20的左右兩個引腳分別Vcc和GND,若是接反則整個電路直接短路,無法正常供電,而在靠近Vcc和GND處有一個10uf的電容,這個電容本來是給單片機(jī)復(fù)位用的,而在這種情況下,它儲存的電會通過這個電源指示

42、燈放掉,就出現(xiàn)了這個燈亮幾秒后熄滅的問題。</p><p>  LCD顯示屏只顯示幾個黑點(diǎn)的問題是由于單片機(jī)的問題,我把單片機(jī)拆出來后的顯示結(jié)果和插上單片機(jī)的結(jié)果相同。問題就指向了單片機(jī)出現(xiàn)了什么樣的問題。最開始的測試方法是直接住板子里燒程序,結(jié)果程序燒不進(jìn)去,一直停在等待界面。第二個方法是用萬用表測量每一個管腳的電壓,部分電壓接近5V,少數(shù)幾個管腳的電壓不正常。更加說明了并非電路線路的問題而是單片機(jī)問題。最后測

43、量晶振輸出波形,沒有輸出11.0592M的信號,說明單片機(jī)一開始就沒有工作。而為什么沒有工作,最后發(fā)現(xiàn)是因為晶振沒有振蕩,反復(fù)檢查電路后,原來是因為單片機(jī)振蕩源處兩腳的電容接錯了,改正后為了能夠測試是否振蕩,用示波器觀察,正確輸出了11.0592M的頻率波形,再給單片機(jī)燒入程序,正常燒入。</p><p>  經(jīng)過上述一系列的錯誤與調(diào)試錯誤后,板子最終能夠正常工作。</p><p><

44、;b>  6 設(shè)計總結(jié)</b></p><p>  本次設(shè)計,我認(rèn)為最大的亮點(diǎn)不在于溫度警報功能的實現(xiàn),這個只是基本功能。最大的亮點(diǎn)在于,將兩個功能集成在了一個按鍵上,使得操作上更為簡潔與更適合人們的習(xí)慣。</p><p>  本次的課程設(shè)計中的確出現(xiàn)的問題不少,這也反映出了從仿真到實物,這個過程中會有很多意想不到的錯誤發(fā)生,甚于是非常簡單的電容都會接錯,而這不同于仿真

45、,在實物板子上,每一個極小的細(xì)節(jié)都可能會引起板子的不正常工作。而在排查出這個問題則需要檢查到每一條線,每一個元件的接法以及供電問題。</p><p>  總體來說,本次的課程設(shè)計還算是比較成功,還總結(jié)出一個結(jié)論:仿真成功并不等同于做實物板子的過程也會順利,此次訓(xùn)練收獲不小。</p><p>  但是此次課程設(shè)計也暴露出自己專業(yè)基礎(chǔ)的很多不足之處。比如缺乏綜合應(yīng)用專業(yè)知識的能力,對很多芯片的

46、用法不熟悉等,需要在做的過程中不斷的翻閱相關(guān)的資料和書籍,這降低了自己的速度和設(shè)計的進(jìn)程,但這個過程對我來說是對自己知識不足處的一個很好的補(bǔ)充和對已學(xué)過知識的一個鞏固。這個過程雖然是有一定的難度但還是通過自己的慢慢的摸索從熟悉到上手,經(jīng)過這次努力對自己的信心有很好的提高。通過這樣的一個自己從開始到結(jié)束全程自己參與的設(shè)計來說對知識的了解和掌握是純理論學(xué)習(xí)遠(yuǎn)遠(yuǎn)達(dá)不到的效果。這次課設(shè)是對自己所學(xué)知識的一次檢閱,使我明白自己知識還是很淺薄,自己

47、的求學(xué)之路還很長。</p><p>  課程設(shè)計是培訓(xùn)學(xué)生運(yùn)用本專業(yè)所學(xué)的理論知識和專業(yè)知識來分析解決實際問題的重要教學(xué)環(huán)節(jié),同樣也促進(jìn)了同學(xué)們的相互探討,相互學(xué)習(xí)。因此,我們必須認(rèn)真、謹(jǐn)慎、踏實、一步一步的完成設(shè)計。我相信無論是誰,看到自己做出的成果時心里一定會很興奮。此次設(shè)計使我明白了一個很深刻的道理:團(tuán)隊精神固然很重要,但人往往還是要靠自己的努力,自己親身去經(jīng)歷,這樣自己的心里才會踏實,學(xué)到的東西才會更多。

48、</p><p><b>  謝 辭</b></p><p>  在本次的課程設(shè)計中,同學(xué)們給予了我很大的幫助,有些工具我是沒有的,這時就要找同學(xué)借,同學(xué)們都慷慨的借出了手中的工具,關(guān)于這點(diǎn)我非常的感謝!在調(diào)試的過程中,同學(xué)的某一句話都有可能給我極大的啟發(fā),這一點(diǎn)也同樣非常感謝!</p><p>  在這次的做實物板子的過程中,從發(fā)現(xiàn)第一個問

49、題開始到最后使板子正常工作都有同學(xué)在給我以幫助,對于我的問題都盡其所能,非常感謝他們。同時,我還要感謝我的寢室同學(xué)和身邊的朋友,正是在這樣一個團(tuán)結(jié)友愛,相互促進(jìn)的環(huán)境中,在和他們的相互幫助和啟發(fā)中,才有我今天的小小收獲。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1]胡天明,齊建家.基于DS18B20的數(shù)字溫度計設(shè)計及其應(yīng)用[J].黑龍江工程

50、學(xué)院學(xué)報,2008,02:59-62</p><p>  [2]黃慶華,張永格.單片機(jī)開發(fā)技術(shù)與實訓(xùn).電子工業(yè)出版社,2007.1</p><p>  [3]汪紅,張烈平,管秀群.電子技術(shù).電子工業(yè)出版社,2007</p><p>  [4]何立民.單片機(jī)應(yīng)用技術(shù)選編.北京航空大學(xué)出版社,2006</p><p>  [5]徐俊毅,單片微型計

51、算機(jī)原理與應(yīng)用.上海科學(xué)技術(shù)出版社,1998</p><p><b>  附 錄</b></p><p><b>  1原理圖:</b></p><p>  1.1 整體硬件原理圖</p><p>  1.2.溫度采集及外圍電路的設(shè)計</p><p><b>  

52、1.3液晶顯示設(shè)計</b></p><p><b>  1.4最小系統(tǒng)設(shè)計</b></p><p><b>  2.成品實物圖:</b></p><p><b>  3.程序源代碼</b></p><p>  #include <reg52.h><

53、/p><p>  #include <intrins.h></p><p>  bit Start18B20();</p><p>  sbit RS=P2^5;</p><p>  sbit RW=P2^6;</p><p>  sbit EN=P2^7;</p><p>  sbit

54、 IO_18B20=P3^2;</p><p>  sbit ledH=P2^2;//紅燈</p><p>  sbit ledL=P2^3;//綠燈</p><p>  sbit key0=P2^0;//B按鍵,單功能按鍵</p><p>  sbit key1=P2^1;//A按鍵,雙功能按鍵</p><p>  

55、sbit buzzer=P2^4;</p><p>  unsigned char count=0;</p><p>  unsigned char upper=30,lower=20;</p><p>  bit kflag=1;//按鍵標(biāo)識,若為1則是調(diào)節(jié)上限,若為0則是調(diào)節(jié)下限</p><p>  unsigned char T0RH=

56、0;//定時器0高位初值</p><p>  unsigned char T0RL=0;//定時器0低位初值</p><p>  unsigned int temp;</p><p>  unsigned int i=0;</p><p>  unsigned char code table[]="Tem: /C"

57、;;//當(dāng)前溫度顯示標(biāo)識</p><p>  unsigned char code high[]="U:";//上限溫度顯示標(biāo)識</p><p>  unsigned char code low[]="L:";//下限溫度顯示標(biāo)識</p><p>  void DelayX10us(unsigned char t)//較為嚴(yán)格

58、的指令延時,10個指令周期</p><p><b>  {</b></p><p><b>  do</b></p><p><b>  {</b></p><p><b>  _nop_();</b></p><p><b&

59、gt;  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b&

60、gt;</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  }</b></p><p>  while(--t);</p><p><b>  }</b&

61、gt;</p><p>  bit Get18B20Ack()//獲取DS18B20響應(yīng)</p><p><b>  {</b></p><p><b>  bit ack;</b></p><p><b>  EA=0;</b></p><p>  I

62、O_18B20=0;</p><p>  DelayX10us(50);</p><p>  IO_18B20=1; </p><p>  DelayX10us(6);</p><p>  ack=IO_18B20;</p><p>  while(!IO_18B20);</p><p><

63、;b>  EA=1;</b></p><p>  return ack;</p><p><b>  }</b></p><p>  void Write18B20(unsigned char dat)//對DS18B20進(jìn)行寫入操作</p><p><b>  {</b><

64、/p><p>  unsigned char mask;</p><p><b>  EA=0;</b></p><p>  for(mask=0x01;mask!=0;mask<<=1)</p><p><b>  {</b></p><p>  IO_18B20=

65、0;</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  if((mask&dat)==0)</p><p>  IO_18B20=0;</p><p><b>  else<

66、/b></p><p>  IO_18B20=1;</p><p>  DelayX10us(6);</p><p>  IO_18B20=1;</p><p><b>  }</b></p><p><b>  EA=1;</b></p><p&g

67、t;<b>  }</b></p><p>  unsigned char Read18B20()//對DS18B20進(jìn)行讀操作</p><p><b>  {</b></p><p>  unsigned char dat;</p><p>  unsigned char mask;</p&

68、gt;<p><b>  EA=0;</b></p><p>  for(mask=0x01;mask!=0;mask<<=1)</p><p><b>  {</b></p><p>  IO_18B20=0;</p><p><b>  _nop_();<

69、;/b></p><p><b>  _nop_();</b></p><p>  IO_18B20=1;</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  if(!IO

70、_18B20)</p><p>  dat&=~mask;</p><p><b>  else</b></p><p>  dat|=mask;</p><p>  DelayX10us(6);</p><p><b>  }</b></p><

71、p><b>  EA=1;</b></p><p>  return dat;</p><p><b>  }</b></p><p>  bit Start18B20()//啟動DS18B20進(jìn)行溫度轉(zhuǎn)換</p><p><b>  {</b></p>&

72、lt;p><b>  bit ack;</b></p><p>  ack=Get18B20Ack();</p><p>  if(ack==0)</p><p><b>  {</b></p><p>  Write18B20(0xcc);</p><p>  Wri

73、te18B20(0x44);//啟動溫度轉(zhuǎn)換指令</p><p><b>  }</b></p><p>  return ~ack;</p><p><b>  }</b></p><p>  void delay(unsigned int t)//給LCD1602的粗延時</p>

74、<p><b>  {</b></p><p>  unsigned int x,y;</p><p>  for(x=t;x>0;x--)</p><p>  for(y=110;y>0;y--);</p><p><b>  }</b></p><p&g

75、t;  bit Get18B20Temp(int *temp)//獲取DS18B20的溫度轉(zhuǎn)換結(jié)果</p><p><b>  {</b></p><p><b>  bit ack;</b></p><p>  unsigned char LSB,MSB;</p><p>  ack = Get1

76、8B20Ack();</p><p>  if(ack==0)</p><p><b>  {</b></p><p>  Write18B20(0xcc);</p><p>  Write18B20(0xbe);</p><p>  LSB=Read18B20();</p><

77、;p>  MSB=Read18B20();</p><p>  *temp =((int)MSB<<8)+LSB;</p><p><b>  }</b></p><p>  return ~ack;</p><p><b>  }</b></p><p>

78、  void BusyCheck()//LCD1602的忙檢測</p><p><b>  {</b></p><p>  unsigned char dat;</p><p><b>  P0=0xff;</b></p><p><b>  RS=0;</b></p&g

79、t;<p><b>  RW=1;</b></p><p><b>  do</b></p><p><b>  {</b></p><p><b>  EN=1;</b></p><p><b>  dat=P0;</b&g

80、t;</p><p><b>  EN=0;</b></p><p>  }while(dat&0x80);</p><p><b>  }</b></p><p>  void Writedata1602(unsigned char dat)//對LCD1602寫入數(shù)據(jù)</p>

81、<p><b>  {</b></p><p>  BusyCheck();</p><p><b>  RS=1;</b></p><p><b>  RW=0;</b></p><p><b>  P0=dat;</b></p>

82、;<p><b>  EN=1;</b></p><p><b>  EN=0;</b></p><p><b>  }</b></p><p>  void Writecom1602(unsigned char com)//對LCD1602寫入指令</p><p&g

83、t;<b>  {</b></p><p>  BusyCheck();</p><p><b>  RS=0;</b></p><p><b>  RW=0;</b></p><p><b>  P0=com;</b></p><p&

84、gt;<b>  EN=1;</b></p><p><b>  EN=0;</b></p><p><b>  }</b></p><p>  void Init1602()//對1602進(jìn)行初始化</p><p><b>  {</b></p&g

85、t;<p><b>  EN=0;</b></p><p>  Writecom1602(0x38);</p><p>  Writecom1602(0x0c);</p><p>  Writecom1602(0x06);</p><p>  Writecom1602(0x01);</p>&

86、lt;p><b>  }</b></p><p>  void interruptofEX1() interrupt 2 using 0 //按鍵觸發(fā)外部中斷0</p><p><b>  {</b></p><p>  EX1=0;//中斷的按鍵消抖</p><p>  TR0=1;//開啟

87、定時器0</p><p><b>  do</b></p><p><b>  {</b></p><p>  if(TF0==1)//定時器溢出標(biāo)識位,</p><p><b>  {</b></p><p><b>  TF0=0;<

88、/b></p><p>  TH0=0x4c;//重裝初值</p><p><b>  TL0=0x00;</b></p><p>  count++;//定時器每溢出一次,count加一</p><p><b>  }</b></p><p>  }while(key

89、1==0);//檢測按鍵是否松開</p><p>  TR0=0;//¹按鍵松開后,關(guān)定時器</p><p>  if(count>10)//判斷按壓時間長短,若為長按則將kflag取反,切換功能</p><p>  kflag=~kflag;</p><p>  else //短按的執(zhí)行函數(shù)</p><p

90、><b>  {</b></p><p><b>  if(kflag)</b></p><p><b>  {</b></p><p><b>  upper++;</b></p><p>  if(upper>30)//È

91、4;´óÓÚ30Ôò±äΪ25</p><p><b>  upper=25;</b></p><p><b>  }</b></p><p><b>  else</b></p>&l

92、t;p><b>  {</b></p><p><b>  lower++;</b></p><p>  if(lower>30)//Èô´óÓÚ30Ôò±äΪ25</p><p><

93、b>  lower=25;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  Writecom1602(0x80+0x0f);//給LCD1602寫顯示地址(上限/下限 標(biāo)識位)</p><p><b>  if(

94、kflag)</b></p><p><b>  {</b></p><p>  Writedata1602('U');// 上限顯示”U”</p><p><b>  }</b></p><p><b>  else</b></p>

95、<p>  Writedata1602('L');//下限顯示”L”</p><p>  count=0;//給count 清零</p><p><b>  kflagw=0;</b></p><p>  IE1=0;//中斷按鍵消抖</p><p><b>  EX1=1;</

96、b></p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  bit ack,res;</p><p>  int a,b,ac,ad,bc,bd;</p><p

97、><b>  int test;</b></p><p>  int intT,decT;</p><p>  unsigned char len;</p><p>  buzzer=1;//開機(jī)時不讓蜂鳴器發(fā)出聲響</p><p>  IO_18B20=1;//釋放DS18B20總線</p><

98、;p><b>  EA=1;</b></p><p>  EX1=1;//開啟外部中斷</p><p>  IT1=1;//interrupt trigger 設(shè)置觸發(fā)方式為跳變沿觸發(fā)</p><p>  TMOD|=0x01;//定時器以方式1工作</p><p>  TH0=0x4c;//初值</p>

99、;<p><b>  TL0=0x00;</b></p><p>  Start18B20();</p><p>  Init1602();</p><p>  Writecom1602(0x80);</p><p>  for(i=0;i<sizeof(table)-1;i++)</p>

100、<p><b>  {</b></p><p>  Writedata1602(table[i]);</p><p><b>  }</b></p><p>  Writecom1602(0x80+0x0f);//ÏÔʾ±ê¼Ç

101、²âÊÔλ</p><p><b>  if(kflag)</b></p><p><b>  {</b></p><p>  Writedata1602('U');</p><p><b>  }</b&

102、gt;</p><p><b>  else</b></p><p>  Writedata1602('L');</p><p>  Writecom1602(0x80+0x40);//U ×ÖÑù</p><p>  for(i=0;i<sizeof(hig

103、h)-1;i++)</p><p>  Writedata1602(high[i]);</p><p>  Writecom1602(0x80+0x49);//L ×ÖÑù</p><p>  for(i=0;i<sizeof(low)-1;i++)</p><p>  Writedata1602

104、(low[i]);</p><p>  while(1) //循環(huán)掃描,更新變化</p><p><b>  {</b></p><p>  Writecom1602(0x85);</p><p>  ack=Start18B20();</p><p><b>  if(ack)<

105、/b></p><p><b>  {</b></p><p>  res=Get18B20Temp(&temp);</p><p><b>  if(res)</b></p><p><b>  {</b></p><p>  a=tem

106、p>>4;//СÊý²¿·Ö</p><p><b>  ac=a/10;</b></p><p><b>  ad=a%10;</b></p><p>  b=temp&0xf;//ÕûÊ&

107、#253;²¿·Ö</p><p><b>  bc=b/10;</b></p><p><b>  bd=b%10;</b></p><p>  Writedata1602(ac+'0');</p><p>  Writedata1602(a

108、d+'0');</p><p>  Writedata1602('.');</p><p>  Writedata1602(bc+'0');</p><p>  Writedata1602(bd+'0');</p><p>  test=ac*10+ad;</p>

109、<p>  if(ac*10+ad>=upper)</p><p><b>  {</b></p><p><b>  ledH=0;</b></p><p>  buzzer=0;//ÉùÒô±È½Ï»ì&

110、#215;Ç</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  ledH=1;</b></p><p><b&g

111、t;  buzzer=1;</b></p><p><b>  }</b></p><p>  if(ac*10+ad<lower)</p><p><b>  {</b></p><p><b>  ledL=0;</b></p><p&

112、gt;  buzzer=0;//ÉùÒô±È½Ï¼âÈñ</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b>

113、</p><p><b>  ledL=1;</b></p><p><b>  buzzer=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }&

114、lt;/b></p><p>  Writecom1602(0x80+0x43);</p><p>  ac=upper/10;</p><p>  ad=upper%10;</p><p>  Writedata1602(ac+'0');</p><p>  Writedata1602(ad+&

115、#39;0');</p><p>  Writecom1602(0x80+0x4c);</p><p>  ac=lower/10;</p><p>  ad=lower%10;</p><p>  Writedata1602(ac+'0');</p><p>  Writedata1602(a

116、d+'0');</p><p>  if(key0==0)</p><p><b>  {</b></p><p>  delay(30);</p><p>  if(key0==0)</p><p><b>  {</b></p><p&

117、gt;<b>  if(kflag)</b></p><p><b>  {upper--;</b></p><p>  if(upper<10)</p><p><b>  upper=10;</b></p><p><b>  }</b><

118、/p><p><b>  else</b></p><p><b>  {</b></p><p><b>  lower--;</b></p><p>  if(lower<10)</p><p><b>  lower=10;</b

119、></p><p><b>  }</b></p><p>  while(!key0);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p&g

溫馨提示

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

最新文檔

評論

0/150

提交評論