基于DS18B20的溫度報(bào)警器設(shè)計(jì)(共28頁(yè))_第1頁(yè)
基于DS18B20的溫度報(bào)警器設(shè)計(jì)(共28頁(yè))_第2頁(yè)
基于DS18B20的溫度報(bào)警器設(shè)計(jì)(共28頁(yè))_第3頁(yè)
基于DS18B20的溫度報(bào)警器設(shè)計(jì)(共28頁(yè))_第4頁(yè)
基于DS18B20的溫度報(bào)警器設(shè)計(jì)(共28頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上畢業(yè)設(shè)計(jì)論文基于DS18B20的溫度報(bào)警器設(shè)計(jì) 系 電子信息工程系 專業(yè) 電子信息工程技術(shù) 姓名 康志凌 班級(jí) 電子信息122 學(xué)號(hào) 指導(dǎo)教師 徐敏 N 職稱 講師 設(shè)計(jì)時(shí)間 2014.10.082015.04.08 專心-專注-專業(yè)摘要本設(shè)計(jì)以AT89C51單片機(jī)為核心,設(shè)計(jì)了一個(gè)溫度測(cè)量報(bào)警系統(tǒng),可以方便的實(shí)現(xiàn)溫度采集和顯示。它使用起來(lái)相當(dāng)方便,具有精度高、量程寬、靈敏度高、體積小、功耗低等優(yōu)點(diǎn),適合于我們?nèi)粘I詈凸まr(nóng)業(yè)中的溫度測(cè)量及報(bào)警。本設(shè)計(jì)由AT89C51單片機(jī)、DS18B20溫度傳感器和LED顯示器組成,可以直觀的顯示測(cè)量的溫度。本設(shè)計(jì)運(yùn)行過(guò)程中,如果外

2、界溫度低于-20或高于70,系統(tǒng)將出發(fā)蜂鳴器,產(chǎn)生報(bào)警聲音,且對(duì)應(yīng)的LED同步閃爍。關(guān)鍵詞:AT89C51,DS18B20,傳感器,溫度報(bào)警器目錄第1章 引言 溫度是一個(gè)十分重要的物理量,對(duì)他的測(cè)量與控制有著十分重要的意義。隨著現(xiàn)代化工農(nóng)業(yè)技術(shù)的發(fā)展及人民對(duì)生活環(huán)境要求的提高,人民也迫切需要監(jiān)測(cè)和控制溫度.在人類的生活環(huán)境中,溫度扮演著極其重要的角色。無(wú)論你生活在哪里,從事什么工作,無(wú)時(shí)無(wú)刻不在跟溫度打著交道。子18世紀(jì)工業(yè)革命以來(lái),工業(yè)發(fā)展對(duì)是否能掌握溫度有著絕對(duì)的聯(lián)系。在冶金、鋼鐵、石化、水泥、玻璃、醫(yī)藥等等行業(yè),可以說(shuō)幾乎80%的工業(yè)部門都不得不靠路這溫度的因素。信息科學(xué)和航空工業(yè)的飛速

3、發(fā)展給人們生活甚至國(guó)家安全帶來(lái)了巨大的飛躍。我的實(shí)習(xí)單位是航天八五一一研究所,在我工作期間深刻感覺到溫度對(duì)焊接工藝的重要性,往往只是高了或低了一二攝氏度,就有可能將電纜或芯片報(bào)廢掉,造成嚴(yán)重的損失。我們也在重要的位置上放置了一個(gè)溫度測(cè)量報(bào)警器由此可見溫度對(duì)我們工作生活的重要性,溫度傳感器以及溫度報(bào)警器就顯得格外重要。第2章 方案設(shè)計(jì)本設(shè)計(jì)主要元件有AT89C51、DS18B20、數(shù)碼管等,其中由AT89C51作為控制器,DS18B20測(cè)量溫度,再通過(guò)74LS245把AT89C51單片機(jī)芯片所處理和轉(zhuǎn)化的數(shù)據(jù)傳輸?shù)綌?shù)碼管中。當(dāng)DS18B20感知到溫度達(dá)到高于70或低于-20臨界值時(shí)相應(yīng)的LED閃

4、爍,同時(shí)蜂鳴器發(fā)出報(bào)警聲。晶振是正弦波震蕩電路,供本設(shè)計(jì)數(shù)字電路整形后作時(shí)鐘源。復(fù)位電路的作用是把電路恢復(fù)到起始狀態(tài)。本設(shè)計(jì)的溫度報(bào)警器電路的總體框圖如圖2.1所示。圖2.1 溫度報(bào)警器電路的總體框架第3章 DS18B20簡(jiǎn)介DS18B20是美國(guó)DALLAS半導(dǎo)體公司繼DS1820之后最新推出的一種改進(jìn)型智能溫度傳感器。與傳統(tǒng)的熱敏電阻相比,他能夠直接讀出被測(cè)溫度并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)912位的數(shù)字值讀數(shù)方式??梢苑謩e在93.75 ms和750 ms內(nèi)完成9位和12位的數(shù)字量,并且從DS18B20讀出的信息或?qū)懭隓S18B20的信息僅需要一根口線(單線接口)讀寫,溫度變換功率來(lái)源

5、于數(shù)據(jù)總線,總線本身也可以向所掛接的DS18B20供電,而無(wú)需額外電源。因而使用DS18B20可使系統(tǒng)結(jié)構(gòu)更趨簡(jiǎn)單,可靠性更高。他在測(cè)溫精度、轉(zhuǎn)換時(shí)間、傳輸距離、分辨率等方面較DS1820有了很大的改進(jìn),給用戶帶來(lái)了更方便的使用和更令人滿意的效果。 3.1 DS18B20性能指標(biāo) (1)獨(dú)特的單線接口方式:DS18B20與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊。 (2)在使用中不需要任何外圍元件。 (3)可用數(shù)據(jù)線供電,電壓范圍:+3.0 +5.5 V。 (4)測(cè)溫范圍:-55 +125 。固有測(cè)溫分辨率為0.5 。 (5)通過(guò)編程可實(shí)現(xiàn)912位的數(shù)字讀數(shù)方式。

6、 (6)用戶可自設(shè)定非易失性的報(bào)警上下限值。 (7)支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)測(cè)溫。 (8)負(fù)壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工作。3.2 DS18B20的封裝及內(nèi)部結(jié)構(gòu)DS18B20的封裝如圖3.1所示。圖3.1 DS18B20的封裝DS18B20引腳功能:1、 GND為電源地2、 DQ為數(shù)字信號(hào)輸入/輸出端3、VDD為外接供電電源輸入端(在寄生電源接線方式時(shí)地) DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。 3.3 DS18B20工作原理及應(yīng)用DS18

7、B20的溫度檢測(cè)與數(shù)字?jǐn)?shù)據(jù)輸出全集成于一個(gè)芯片之上,從而抗干擾力更強(qiáng)。其一個(gè)工作周期可分為兩個(gè)部分,即溫度檢測(cè)和數(shù)據(jù)處理。在講解其工作流程之前我們有必要了解18B20的內(nèi)部存儲(chǔ)器資源。18B20共有三種形態(tài)的存儲(chǔ)器資源,它們分別是:ROM 只讀存儲(chǔ)器,用于存放DS18B20ID編碼,其前8位是單線系列編碼(DS18B20的編碼是19H),后面48位是芯片唯一的序列號(hào),最后8位是以上56的位的CRC碼(冗余校驗(yàn))。數(shù)據(jù)在出產(chǎn)時(shí)設(shè)置不由用戶更改。DS18B20共64位ROM。RAM 數(shù)據(jù)暫存器,用于內(nèi)部計(jì)算和數(shù)據(jù)存取,數(shù)據(jù)在掉電后丟失,DS18B20共9個(gè)字節(jié)RAM,每個(gè)字節(jié)為8位。第1、2個(gè)字節(jié)

8、是溫度轉(zhuǎn)換后的數(shù)據(jù)值信息,第3、4個(gè)字節(jié)是用戶EEPROM(常用于溫度報(bào)警值儲(chǔ)存)的鏡像。在上電復(fù)位時(shí)其值將被刷新。第5個(gè)字節(jié)則是用戶第3個(gè)EEPROM的鏡像。第6、7、8個(gè)字節(jié)為計(jì)數(shù)寄存器,是為了讓用戶得到更高的溫度分辨率而設(shè)計(jì)的,同樣也是內(nèi)部溫度轉(zhuǎn)換、計(jì)算的暫存單元。第9個(gè)字節(jié)為前8個(gè)字節(jié)的CRC碼。EEPROM 非易失性記憶體,用于存放長(zhǎng)期需要保存的數(shù)據(jù),上下限溫度報(bào)警值和校驗(yàn)數(shù)據(jù),DS18B20共3位EEPROM,并在RAM都存在鏡像,以方便用戶操作。3.4 控制器對(duì)DS18B20操作流程1. 復(fù)位:首先我們必須對(duì)DS18B20芯片進(jìn)行復(fù)位,復(fù)位就是由控制器(單片機(jī))給DS18B20單

9、總線至少480uS的低電平信號(hào)。當(dāng)18B20接到此復(fù)位信號(hào)后則會(huì)在1560uS后回發(fā)一個(gè)芯片的存在脈沖。2. 存在脈沖:在復(fù)位電平結(jié)束之后,控制器應(yīng)該將數(shù)據(jù)單總線拉高,以便于在1560uS后接收存在脈沖,存在脈沖為一個(gè)60240uS的低電平信號(hào)。至此,通信雙方已經(jīng)達(dá)成了基本的協(xié)議,接下來(lái)將會(huì)是控制器與18B20間的數(shù)據(jù)通信。如果復(fù)位低電平的時(shí)間不足或是單總線的電路斷路都不會(huì)接到存在脈沖,在設(shè)計(jì)時(shí)要注意意外情況的處理。3. 控制器發(fā)送ROM指令:雙方打完了招呼之后最要將進(jìn)行交流了,ROM指令共有5條,每一個(gè)工作周期只能發(fā)一條,ROM指令分別是讀ROM數(shù)據(jù)、指定匹配芯片、跳躍ROM、芯片搜索、報(bào)警

10、芯片搜索。ROM指令為8位長(zhǎng)度,功能是對(duì)片內(nèi)的64位光刻ROM進(jìn)行操作。其主要目的是為了分辨一條總線上掛接的多個(gè)器件并作處理。誠(chéng)然,單總線上可以同時(shí)掛接多個(gè)器件,并通過(guò)每個(gè)器件上所獨(dú)有的ID號(hào)來(lái)區(qū)別,一般只掛接單個(gè)18B20芯片時(shí)可以跳過(guò)ROM指令(注意:此處指的跳過(guò)ROM指令并非不發(fā)送ROM指令,而是用特有的一條“跳過(guò)指令”)。ROM指令在下文有詳細(xì)的介紹。4. 控制器發(fā)送存儲(chǔ)器操作指令:在ROM指令發(fā)送給18B20之后,緊接著(不間斷)就是發(fā)送存儲(chǔ)器操作指令了。操作指令同樣為8位,共6條,存儲(chǔ)器操作指令分別是寫RAM數(shù)據(jù)、讀RAM數(shù)據(jù)、將RAM數(shù)據(jù)復(fù)制到EEPROM、溫度轉(zhuǎn)換、將EEPRO

11、M中的報(bào)警值復(fù)制到RAM、工作方式切換。存儲(chǔ)器操作指令的功能是命令18B20作什么樣的工作,是芯片控制的關(guān)鍵。5. 執(zhí)行或數(shù)據(jù)讀寫:一個(gè)存儲(chǔ)器操作指令結(jié)束后則將進(jìn)行指令執(zhí)行或數(shù)據(jù)的讀寫,這個(gè)操作要視存儲(chǔ)器操作指令而定。如執(zhí)行溫度轉(zhuǎn)換指令則控制器(單片機(jī))必須等待18B20執(zhí)行其指令,一般轉(zhuǎn)換時(shí)間為500uS。如執(zhí)行數(shù)據(jù)讀寫指令則需要嚴(yán)格遵循18B20的讀寫時(shí)序來(lái)操作。數(shù)據(jù)的讀寫方法將有下文有詳細(xì)介紹。若要讀出當(dāng)前的溫度數(shù)據(jù)我們需要執(zhí)行兩次工作周期,第一個(gè)周期為復(fù)位、跳過(guò)ROM指令、執(zhí)行溫度轉(zhuǎn)換存儲(chǔ)器操作指令、等待500uS溫度轉(zhuǎn)換時(shí)間。緊接著執(zhí)行第二個(gè)周期為復(fù)位、跳過(guò)ROM指令、執(zhí)行讀RAM的

12、存儲(chǔ)器操作指令、讀數(shù)據(jù)(最多為9個(gè)字節(jié),中途可停止,只讀簡(jiǎn)單溫度值則讀前2個(gè)字節(jié)即可)。第4章 硬件電路設(shè)計(jì)溫度報(bào)警器的電路設(shè)計(jì)如圖4.1所示,控制器使用單片機(jī)AT89C51,溫度傳感器使用DS18B20,用數(shù)碼管實(shí)現(xiàn)溫度顯示。本溫度報(bào)警器大體分四個(gè)工作過(guò)程。首先,由DS18B20溫度傳感器芯片測(cè)量當(dāng)前的溫度,并將結(jié)果送入單片機(jī)中。其次,再通過(guò)單片機(jī)AT89C51芯片對(duì)送來(lái)的測(cè)量溫度讀數(shù)進(jìn)行計(jì)算和轉(zhuǎn)化,并將此結(jié)果送入數(shù)碼管。然后,數(shù)碼管顯示溫度數(shù)據(jù)。最后,若溫度超標(biāo),則二極管發(fā)光和蜂鳴器響起。由圖4.1可以看到本電路主要由DS18B20溫度傳感器芯片、數(shù)碼管顯示模塊和AT89C51單片機(jī)芯片組

13、成。其中,DS18B20溫度傳感器芯片采用“一線制”與單片機(jī)相連,它獨(dú)立的完成溫度測(cè)量以及將測(cè)量結(jié)過(guò)傳送到單片機(jī)的工作。圖4.1 溫度報(bào)警器電路設(shè)計(jì)原理圖4.1 AT89C51AT89C51是一種帶4KFLASH(FPEROMFlash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位,俗稱。的可擦除可以反復(fù)擦除1000次。該器件采用ATMEL高密度非易失制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器。AT89C51為很多

14、提供了一種靈活性高且價(jià)廉的方案。排列如圖4.2所示 。圖4.2 AT89C51引腳排列在本設(shè)計(jì)中,AT89C51起到控制器的作用。當(dāng)DS18B20溫度傳感器芯片測(cè)量當(dāng)前的溫度后,把結(jié)果送入AT89C51單片機(jī)中。然后,通過(guò)AT89C51單片機(jī)芯片對(duì)送來(lái)的測(cè)量溫度讀數(shù)進(jìn)行計(jì)算和轉(zhuǎn)換,井將此結(jié)果送入數(shù)碼管模塊。4.2 晶振電路 晶振電路是給單片機(jī)提供時(shí)鐘信號(hào)的。其中,連接在晶振旁的兩個(gè)電容叫做負(fù)荷電容,一般單片機(jī)的晶振工作于并聯(lián)諧振狀態(tài),也可以理解為諧振電容的一部分。晶振電路的原理圖如圖4.3所示。圖4.3 晶振電路的原理圖它是根據(jù)晶振廠家提供的晶振要求負(fù)載電容選值的,換句話說(shuō),晶振的頻率就是在它

15、提供的負(fù)載電容下測(cè)得的,能最大限度的保證頻率值的誤差,也能保證溫漂等誤差。兩個(gè)電容的取值都是相同的,或者說(shuō)相差不大,如果相差太大,容易造成諧振的不平衡,容易造成停振或者干脆不起振。本設(shè)計(jì)中,負(fù)荷電容的值是22PF。4.3 復(fù)位電路復(fù)位電路的作用就是把電路恢復(fù)到起始狀態(tài)。就像計(jì)算器的清零按鈕的作用一樣,當(dāng)你進(jìn)行完了一個(gè)題目的計(jì)算后肯定是要清零的是吧!或者你輸入錯(cuò)誤,計(jì)算失誤時(shí)都 要進(jìn)行清零操作。以便回到原始狀態(tài),重新進(jìn)行計(jì)算。和計(jì)算器清零按鈕有所不同的是,復(fù)位電路啟動(dòng)的手段有所不同。一是在給電路通電時(shí)馬上進(jìn)行復(fù)位操作;二是在必要時(shí)可以由手動(dòng)操作;三是根據(jù)程序或者電路運(yùn)行的需要自動(dòng)地進(jìn)行。篡位電路

16、都 是比較簡(jiǎn)單的大都是只有電阻和電容組合就可以辦到了。復(fù)位電路的原理圖如圖4.4所示。圖4.4 復(fù)位電路的原理圖4.4 報(bào)警電路在本設(shè)計(jì)中,溫度報(bào)警器的報(bào)警溫度設(shè)為高:70,低:-20,當(dāng)DS18B20感知到溫度達(dá)到此臨界值時(shí)相應(yīng)的LED閃爍,同時(shí)蜂鳴器會(huì)發(fā)出報(bào)警聲。報(bào)警電路的原理圖如圖4.5所示。圖4.5 報(bào)警電路的原理圖4.5 74LS24574LS245是我們常用的芯片,用來(lái)驅(qū)動(dòng)led或者其他的設(shè)備,它是8路同相三態(tài)雙向總線收發(fā)器,可雙向傳輸數(shù)據(jù)。其封裝與引腳如圖4.6所示。圖4.6 74LS245的封裝與引腳74LS245還具有雙向三態(tài)功能,既可以輸出,也可以輸入數(shù)據(jù)。當(dāng)8051單片機(jī)

17、的P0口總線負(fù)載達(dá)到或超過(guò)P0最大負(fù)載能力時(shí),必須接入74LS245等總線驅(qū)動(dòng)器。 當(dāng)端/CE低電平有效時(shí),DIR=“0”,信號(hào)由 B 向 A 傳輸;(接收)DIR=“1”,信號(hào)由 A 向 B 傳輸;(發(fā)送)當(dāng)CE為高電平時(shí),A、B均為高阻態(tài)。由于P2口始終輸出地址的高8位,接口時(shí)74LS245的三態(tài)控制端1G和2G接地,P2口與輸入線對(duì)應(yīng)相連。P0口與74LS245輸入端相連,E端接地,保證數(shù)據(jù)線暢通。8051的/RD和/PSEN相與后接DIR,使得RD且PSEN有效時(shí),74LS245輸入(P0.1D1),其它時(shí)間處于輸出(P0.1D1)。 在設(shè)計(jì)中,它主要起到了把AT89C51單片機(jī)芯片所

18、處理和轉(zhuǎn)化的數(shù)據(jù)傳輸?shù)綌?shù)碼管中。4.6 顯示電路顯示電路中的數(shù)碼管是8位的,有16個(gè)引腳。通過(guò)AT89C51芯片對(duì)送來(lái)的測(cè)量溫度讀數(shù)進(jìn)行計(jì)算和轉(zhuǎn)化,并將此結(jié)果送入數(shù)碼管中,由數(shù)碼管來(lái)顯示,通過(guò)數(shù)碼管可以清楚的看到DS18B20所測(cè)得的溫度。數(shù)碼管的封裝圖如圖4.7所示。圖4.7 數(shù)碼管的封裝圖第5章 軟件設(shè)計(jì)5.1 主程序模塊 主程序需要設(shè)置初始值和DS18B20的溫度報(bào)警值,之后讀取溫度值,將該溫度與所設(shè)置的溫度比較。如果該溫度在所設(shè)溫度的范圍之內(nèi),則程序從頭開始運(yùn)行。如果該溫度在所設(shè)溫度的范圍之外,則報(bào)警器報(bào)警。主程序流程圖如圖5.1所示。圖 5.1 主程序流程圖5.2 程序說(shuō)明具體的程序

19、代碼及其說(shuō)明(見注釋語(yǔ)句)如下。/-/說(shuō)明:本例將報(bào)警溫度設(shè)為高:70,低:-20,當(dāng)DS18B20感知到溫度達(dá)/ 到次臨界值時(shí)相應(yīng)的LED閃爍,同時(shí)系統(tǒng)發(fā)出報(bào)警聲。/-#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit DQ = P36;sbit BEEP = P37;sbit HI_LED = P14;sbit LO_LED = P15;/共陰數(shù)碼管段碼及空白顯示uchar code DSY_CODE = 0x3F,0x06,0x

20、5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00 ;/溫度小數(shù)位對(duì)照表uchar code df_Table = 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9 ;/-/報(bào)警溫度上下限,為進(jìn)行正負(fù)數(shù)比較,此處設(shè)為char類型/取值范圍為-128+127,DS18B20支持范圍為-50+125/-char Alarm_Temp_HL2 = 70,-20;uchar CurrentT = 0; /當(dāng)前讀取的溫度整數(shù)部分uchar Temp_Value = 0x00,0x00; /從DS18B20讀取的溫度值uchar Display_Digit

21、= 0,0,0,0; /待顯示的各溫度數(shù)位bit HI_Alarm = 0,LO_Alarm = 0; /高低溫報(bào)警標(biāo)志bit DS18B20_IS_OK = 1; /傳感器正常標(biāo)志uint Time0_Count = 0; /定時(shí)器延時(shí)累加/-/延時(shí)/-void Delay(uint x) while( -x );/-/初始化DS18B20/-uchar Init_DS18B20() uchar status; DQ = 1;Delay(8); DQ = 0;Delay(90); DQ = 1;Delay(8); status = DQ; Delay(100); DQ = 1; return

22、 status;/-/讀一字節(jié)/-uchar ReadOneByte() uchar i, dat = 0; DQ = 1; _nop_(); for (i = 0; i < 8; i+) DQ = 0;dat >>= 1; DQ = 1; _nop_();_nop_(); if(DQ) dat | = 0x80;Delay(30); DQ = 1; return dat;/-/寫一字節(jié)/-void WriteOneByte(uchar dat) uchar i; for (i = 0; i < 8; i+) DQ = 0; DQ = dat & 0x01; D

23、elay(5); DQ = 1; dat>>=1; /-/讀取溫度值/-void Read_Temperature() if( Init_DS18B20() = 1) /DS18B20故障 DS18B20_IS_OK = 0; else WriteOneByte(0xCC); /跳過(guò)序列號(hào) WriteOneByte(0x44); /啟動(dòng)溫度轉(zhuǎn)換 Init_DS18B20(); WriteOneByte(0xCC); /跳過(guò)序列號(hào) WriteOneByte(0xBE); /讀取溫度寄存器 Temp_Value0 = ReadOneByte(); /溫度低8位 Temp_Value1

24、= ReadOneByte(); /溫度高8位 Alarm_Temp_HL0 = ReadOneByte(); /報(bào)警溫度TH Alarm_Temp_HL1 = ReadOneByte(); /報(bào)警溫度TL DS18B20_IS_OK = 1; /-/設(shè)置DS18B20溫度報(bào)警值/-void Set_Alarm_Temp_Value() Init_DS18B20(); WriteOneByte(0xCC); /跳過(guò)序列號(hào) WriteOneByte(0x4E); /將設(shè)定的溫度報(bào)警器值寫入DS18B20 WriteOneByte(Alarm_Temp_HL0); /寫TH WriteOneByt

25、e(Alarm_Temp_HL1); /寫TL WriteOneByte(0x7F); /12位精度 Init_DS18B20(); WriteOneByte(0xCC); /跳過(guò)序列號(hào) WriteOneByte(0x48); /溫度報(bào)警值存入DS18B20/-/在數(shù)碼管上顯示溫度/-void Display_Temperature() uchar i; uchar t = 150; /延時(shí)值 uchar ng = 0, np = 0; /負(fù)數(shù)標(biāo)識(shí)及負(fù)號(hào)顯示位置 char Signed_Current_Temp; /注意類型為char/如果為負(fù)數(shù)則反取加1,并設(shè)置負(fù)號(hào)標(biāo)識(shí)及負(fù)號(hào)顯示位置 if

26、( (Temp_Value1 & 0xF8) = 0xF8) Temp_Value1 = Temp_Value1; Temp_Value0 = Temp_Value0 + 1; if (Temp_Value0 = 0x00) Temp_Value1+; ng = 1; np = 0xFD; /默認(rèn)負(fù)號(hào)顯示在左邊第2位 /查表得到溫度小數(shù)部分 Display_Digit0 = df_Table Temp_Value0 & 0x0F ;/獲取溫度整數(shù)部分(無(wú)符號(hào)) CurrentT = (Temp_Value0 & 0xF0)>>4) | (Temp_Value

27、1 & 0x07)<<4);/有符號(hào)的當(dāng)前溫度值,注意定義為char,其值可為-128+127 Signed_Current_Temp = ng? -CurrentT : CurrentT;/高低溫報(bào)警標(biāo)志設(shè)置(與定義為char類型的Alarm_Temp_HL比較,這樣可區(qū)/分正負(fù)比較) HI_Alarm = Signed_Current_Temp >= Alarm_Temp_HL0 ? 1 : 0; LO_Alarm = Signed_Current_Temp <= Alarm_Temp_HL1 ? 1 : 0;/將整數(shù)部分分解為三位待顯示數(shù)字 Display

28、_Digit3 = CurrentT / 100; Display_Digit2 = CurrentT % 100 / 10; Display_Digit1 = CurrentT % 10; if(Display_Digit3 = 0) /高位為0則不顯示 Display_Digit3 = 10; np = 0xFB; if(Display_Digit2 = 0) /調(diào)整負(fù)號(hào)位置 Display_Digit2 = 10; np = 0xF7; /調(diào)整負(fù)號(hào)位置 for (i = 0;i < 30; i+) P0 = 0x39; P2 = 0x7F; Delay(t); P2 = 0xFF;

29、 /顯示C P0 = 0x63; P2 = 0xBF; Delay(t); P2 = 0xFF; /顯示º P0 = DSY_CODEDisplay_Digit0; /小數(shù)位 P2 = 0xDF; Delay(t); P2 = 0xFF; P0 = (DSY_CODEDisplay_Digit1) | 0x80; /個(gè)位及小數(shù)點(diǎn) P2 = 0xEF; Delay(t); P2 = 0xFF; P0 = DSY_CODEDisplay_Digit2; /十位 P2 = 0xF7; Delay(t); P2 = 0xFF; P0 = DSY_CODEDisplay_Digit3; /百位

30、 P2 = 0xFB; Delay(t); P2 = 0xFF; if (ng) P0 = 0x40; P2 = np; Delay(t); P2 = 0xFF; /-/定時(shí)器中斷,控制警報(bào)聲音/-void T0_INT() interrupt 1 TH0 = -1000 / 256; TL0 = -1000 % 256; BEEP = !BEEP; if ( +Time0_Count = 400) Time0_Count = 0; if (HI_Alarm) HI_LED = HI_LED; else HI_LED = 1; if (LO_Alarm) LO_LED = LO_LED; el

31、se LO_LED = 1; /-/主程序/-void main(void) IE = 0x82; TMOD = 0x01; TH0 = -1000 / 256; TL0 = -1000 % 256; TR0 = 0; HI_LED = 1; LO_LED = 1; Set_Alarm_Temp_Value(); Read_Temperature(); Delay(50000); Delay(50000); while(1) Read_Temperature(); if ( DS18B20_IS_OK ) if (HI_Alarm = 1 | LO_Alarm = 1) TR0 = 1; else TR0 = 0; Display_Temperature(); else P0 = P2 = 0x

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論