最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

畢 業(yè) 設(shè) 計(jì)( 論 文 )數(shù)字溫度顯示報(bào)警系統(tǒng)

2023-03-10 17:57 作者:小猴玩機(jī)大圣  | 我要投稿

?畢 業(yè) 設(shè) 計(jì)( 論? 文 )

?

題??? 目:? 數(shù)字溫度顯示報(bào)警系統(tǒng)?

專??? 業(yè):????? 電子信息工程?????

班??? 級:?????? 06(2)班???????

姓??? 名:? ? ? ? 石昊? ? ? ??

學(xué)??? 號:????? 2006654212???????

指導(dǎo)教師:?????? 葉凡??????????

日??? 期:???? 2010年6月5日????

?

?

?

?

?? ??

?

引言. 2

2. 設(shè)計(jì)要求. 2

2.1基本功能. 2

2.2擴(kuò)展功能. 2

3. 總體設(shè)計(jì)方案. 3

3.1數(shù)字溫度計(jì)設(shè)計(jì)方案論證. 3

3.1.1 方案一. 3

3.1.2 方案二. 3

3.2 總體設(shè)計(jì)框圖. 3

3.3單片機(jī)的選擇. 3

3.4 溫度傳感器的選擇. 5

3.4.1 DS18B20的介紹. 5

3.5 顯示模塊選擇. 7

3.5.1數(shù)碼管的分類. 8

3.5.2數(shù)碼管驅(qū)動原理. 8

4. 系統(tǒng)硬件電路設(shè)計(jì). 9

4.1系統(tǒng)整體電路圖. 9

4.2 單片機(jī)最小系統(tǒng). 10

4.3 溫度傳感器系統(tǒng). 10

4.3.1 DS18B20的測溫原理. 11

4.4 報(bào)警電路設(shè)計(jì). 12

4.5 顯示電路設(shè)計(jì). 12

4.6電源電路設(shè)計(jì). 13

5. 系統(tǒng)軟件設(shè)計(jì). 14

5.1主程序. 14

5.2讀出溫度子程序. 15

5.3溫度轉(zhuǎn)換命令子程序. 15

5.4 計(jì)算溫度子程序. 15

5.4 鍵盤掃描流程圖. 17

6. 測試與結(jié)果分析. 17

6.1仿真軟件介紹. 17

6.2 仿真結(jié)果. 18

6.2.1 用Keil進(jìn)行程序編譯. 18

6.2.2 在Proteus中仿真. 19

7. 總結(jié)與致謝. 22

參考文獻(xiàn):. 23

英文摘要:. 24

附錄:源程序. 25

數(shù)字溫度顯示報(bào)警系統(tǒng)

?

摘要:隨著時(shí)代的進(jìn)步和發(fā)展,單片機(jī)技術(shù)已經(jīng)普及到我們生活,工作,科研,各個領(lǐng)域,已經(jīng)成為一種比較成熟的技術(shù),本文將介紹一種基于單片機(jī)控制的數(shù)字溫度計(jì),利用單片機(jī)AT89S52設(shè)計(jì)了一種數(shù)字溫度計(jì),它由單片機(jī)、DS18B20傳感器以及LED 數(shù)碼管等部件組成,本溫度計(jì)屬于多功能溫度計(jì),功能較強(qiáng),可以設(shè)置上下限報(bào)警溫度,且測量準(zhǔn)確、誤差小。當(dāng)測量溫度超過設(shè)定的溫度上下限時(shí),啟動蜂鳴器和指示燈報(bào)警。

關(guān)鍵詞:單片機(jī)AT89S52;溫度計(jì);DS18B20;溫度顯示

引言

溫度是工業(yè)控制中主要的被控參數(shù)之一,特別是在冶金、化工、建材、食品、機(jī)械、石油等工業(yè)中,具有舉足重輕的作用。對于不同場所、不同工藝、所需溫度高低范圍不同、精度不同,則采用的測溫元件、測溫方法以及對溫度的控制方法也將不同;產(chǎn)品工藝不同、控制溫度的精度不同、時(shí)效不同,則對數(shù)據(jù)采集的精度和采用的控制算法也不同,因而,對溫度的測控方法多種多樣。隨著電子技術(shù)和微型計(jì)算機(jī)的迅速發(fā)展,微機(jī)測量和控制技術(shù)也得到了迅速的發(fā)展和廣泛的應(yīng)用[1]。利用微機(jī)對溫度進(jìn)行測控的技術(shù),也便隨之而生,并得到日益發(fā)展和完善,越來越顯示出其優(yōu)越性。

隨著人們生活水平的不斷提高,單片機(jī)控制無疑是人們追求的目標(biāo)之一,它所給人帶來的方便也是不可否定的,其中數(shù)字溫度計(jì)就是一個典型的例子,但人們對它的要求越來越高,要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設(shè)施就需要從數(shù)單片機(jī)技術(shù)入手,一切向著數(shù)字化控制,智能化控制方向發(fā)展[2]。

本設(shè)計(jì)即用單片機(jī)對溫度進(jìn)行實(shí)時(shí)檢測與控制,本文所介紹的數(shù)字溫度計(jì)與傳統(tǒng)的溫度計(jì)相比,具有讀數(shù)方便,測溫范圍廣,測溫準(zhǔn)確,其輸出溫度采用數(shù)字顯示,主要用于對測溫比較準(zhǔn)確的場所,或科研實(shí)驗(yàn)室使用,該設(shè)計(jì)控制器使用單片機(jī)AT89S52,測溫傳感器使用DS18B20,用4位共陽極LED數(shù)碼管以串口傳送數(shù)據(jù),實(shí)現(xiàn)溫度顯示,能準(zhǔn)確達(dá)到設(shè)計(jì)要求。本溫度計(jì)屬于多功能溫度計(jì),功能較強(qiáng),可以設(shè)置上下限報(bào)警溫度,且測量準(zhǔn)確、誤差小。當(dāng)測量溫度超過設(shè)定的溫度上下限時(shí),啟動蜂鳴器和指示燈報(bào)警。

2. 設(shè)計(jì)要求

2.1基本功能

? 基本范圍0-99

? 精度誤差小于0.5

? LED數(shù)碼直讀顯示

2.2擴(kuò)展功能

? 實(shí)現(xiàn)聲光報(bào)警

? 可以任意設(shè)定溫度的上下限報(bào)警功能 

3. 總體設(shè)計(jì)方案

3.1數(shù)字溫度計(jì)設(shè)計(jì)方案論證

3.1.1 方案一

由于本設(shè)計(jì)是測溫電路,根據(jù)設(shè)計(jì)要求可以使用熱敏電阻之類的感溫器件利用其感溫效應(yīng),然后將隨被測溫度變化的電壓或電流采集過來,經(jīng)過A/D轉(zhuǎn)換后,將數(shù)據(jù)傳輸?shù)絾纹瑱C(jī)進(jìn)行數(shù)據(jù)的處理,然后在顯示電路上顯示,這樣就可以將被測溫度顯示出來,這種設(shè)計(jì)需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。

3.1.2 方案二

在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,這是非常容易想到利用數(shù)字溫度傳感器,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測溫度值,進(jìn)行轉(zhuǎn)換,然后傳輸給單片機(jī)進(jìn)行數(shù)據(jù)處理,就可以滿足設(shè)計(jì)要求。

從以上兩種方案,很容易看出,采用方案二,電路設(shè)計(jì)比較簡潔,軟件設(shè)計(jì)也比較簡單,故采用方案二。

3.2 總體設(shè)計(jì)框圖

溫度計(jì)電路設(shè)計(jì)總體設(shè)計(jì)方框圖如圖3.2.1所示,控制器采用單片機(jī)AT89S52,溫度傳感器采用DS18B20,用4位LED數(shù)碼管以串口傳送數(shù)據(jù)實(shí)現(xiàn)溫度顯示。

?


?


?

?

?

?

?

?

?


圖3.2.1 總體設(shè)計(jì)方框圖

3.3單片機(jī)的選擇

方案一:選擇Microchip公司的PIC系列單片機(jī)

作為世界上最為頂尖的單片機(jī)研發(fā)與生產(chǎn)企業(yè),微芯公司設(shè)計(jì)的PIC系列單片機(jī)一度風(fēng)靡全球,其優(yōu)秀的性能和卓越的品質(zhì)受到了許多人的青睞,其優(yōu)點(diǎn)毋庸贅述。但是,高知名度的缺點(diǎn)也顯而易見,價(jià)格昂貴,性價(jià)比不高是其軟肋[3]。

方案二:選擇德州儀器的MSP430系列單片機(jī)

MSP430單片機(jī)是一個 16 位的、具有精簡指令集的混合型單片機(jī),它具有極低的功耗、豐富的片內(nèi)外設(shè)和方便靈活的開發(fā)手段。但是,由于MSP430單片機(jī)系列價(jià)格較高,比較適合于較為復(fù)雜的應(yīng)用系統(tǒng)[4]。

方案三:選擇Atmel公司的AT89S52單片機(jī)

AT89S52單片機(jī)是一個低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含8k Bytes ISP(In-system programmable)的可反復(fù)擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于 常規(guī)編程器,在功能強(qiáng)大的微型計(jì)算機(jī)的AT89S52單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價(jià)比的解決方案[5]。AT89S52引腳結(jié)構(gòu)圖如圖3.3.1:

?

?

圖3.3.1? AT89S52結(jié)構(gòu)圖

?

AT89S52 實(shí)物圖如圖3.3.2:

圖 3.3.2? AT89S52 實(shí)物圖

基于對成本和性能的比較,我們選擇AT89S52單片機(jī)。

3.4 溫度傳感器的選擇

3.4.1 DS18B20的介紹

溫度傳感器的種類眾多,在應(yīng)用與高精度、高可靠性的場合時(shí) DALLAS(達(dá)拉斯)公司生產(chǎn)的 DS18B20 溫度傳感器當(dāng)仁不讓。超小的體積,超低的硬件開消,抗干擾能力強(qiáng),精度高,附加功能強(qiáng),使得 DS18B20 更受歡迎。

DS18B20 的主要特征:

● 全數(shù)字溫度轉(zhuǎn)換及輸出;

● 最高 12 位分辨率,精度可達(dá)土 0.5攝氏度;

● 12 位分辨率時(shí)的最大工作周期為 750 毫秒;

● 可選擇寄生工作方式;

● 檢測溫度范圍為–55°C~+125°C (–67°F ~+257°F);

● 內(nèi)置 EEPROM,限溫報(bào)警功能。用戶可定義報(bào)警設(shè)置 ;

● 64 位光刻 ROM,內(nèi)置產(chǎn)品序列號,方便多機(jī)掛接;

● 多樣封裝形式,適應(yīng)不同硬件系統(tǒng);

● 獨(dú)特的單線接口僅需要一個端口引腳進(jìn)行通信;

● 多個DS18B20 可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)功能;

● 無須外部器件;

● 可通過數(shù)據(jù)線供電,電壓范圍為3.0~5.5V;

● 零待機(jī)功耗;

● 溫度以9 或12 位數(shù)字;

● 報(bào)警搜索命令識別并標(biāo)志超過程序限定溫度(溫度報(bào)警條件)的器件;

● 負(fù)電壓特性,電源極性接反時(shí),溫度計(jì)不會因發(fā)熱而燒毀,但不能正常工作;

DS18B20它有64 位ROM 的結(jié)構(gòu)開始8 位是產(chǎn)品類型的編號,接著是每個器件的惟一的序號,共有48 位,最后8 位是前面56位的CRC 檢驗(yàn)碼,這也是多個DS18B20 可以采用一線進(jìn)行通信的原因。溫度報(bào)警觸發(fā)器TH 和TL,可通過軟件寫入戶報(bào)警上下限[6]。

另外,由于DS18B20 單線通信功能是分時(shí)完成的,它有嚴(yán)格的時(shí)隙概念,因此讀寫時(shí)序很重要。系統(tǒng)對DS18B20 的各種操作按協(xié)議進(jìn)行。操作協(xié)議為:初始化DS18B20(發(fā)復(fù)位脈沖)→發(fā)ROM 功能命令→發(fā)存儲器操作命令→處理數(shù)據(jù)。

DS18B20芯片封裝結(jié)構(gòu)如圖3.4.1:

圖 3.4.1? DS18B20芯片封裝結(jié)構(gòu)

DS18B20采用3腳PR-35封裝或8腳SOIC封裝,其內(nèi)部結(jié)構(gòu)框圖如圖3.4.2所示。

?


?

I/O

?


圖 3.4.2? DS18B20內(nèi)部結(jié)構(gòu)框

DS18B20 工作原理

DS18B20 的溫度檢測與數(shù)字?jǐn)?shù)據(jù)輸出全集成于一個芯片之上,從而抗干擾力更強(qiáng)。其一個工作周期可分為兩個部分,即溫度檢測和數(shù)據(jù)處理。在講解其工作流程之前我們有必要了解18B20的內(nèi)部存儲器資源。DS18B20 共有三種形態(tài)的存儲器資源,它們分別是:

ROM? 只讀存儲器,用于存放 DS18B20ID 編碼,其前 8 位是單線系列編碼(DS18B20 的編碼是19H),后面48 位是芯片唯一的序列號,最后 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 個字節(jié) RAM,每個字節(jié)為 8 位。第1、2 個字節(jié)是溫度轉(zhuǎn)換后的數(shù)據(jù)值信息,第 3、4 個字節(jié)是用戶 EEPROM(常用于溫度報(bào)警值儲存)的鏡像。在上電復(fù)位時(shí)其值將被刷新。第 5 個字節(jié)則是用戶第 3 個 EEPROM的鏡像。第 6、7、8 個字節(jié)為計(jì)數(shù)寄存器,是為了讓用戶得到更高的溫度分辨率而設(shè)計(jì)的,同樣也是內(nèi)部溫度轉(zhuǎn)換、計(jì)算的暫存單元。第 9 個字節(jié)為前 8個字節(jié)的 CRC碼。

EEPROM? 非易失性記憶體,用于存放長期需要保存的數(shù)據(jù),上下限溫度報(bào)警值和校驗(yàn)數(shù)據(jù),DS18B20共3位EEPROM,并在 RAM 都存在鏡像,以方便用戶操作[7]。

DS18B20工作時(shí)寄存器中的分辨率轉(zhuǎn)換為相應(yīng)精度的溫度數(shù)值。該字節(jié)各位的定義如圖3.4.3所示。低5位一直為1,TM是工作模式位,用于設(shè)置DS18B20在工作模式還是在測試模式,DS18B20出廠時(shí)該位被設(shè)置為0,用戶要去改動,R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),來設(shè)置分辨率。

?

溫度? LSB

溫度? MSB

TH用戶字節(jié)1

TL用戶字節(jié)2

配置寄存器

保留

保留

保留

CRC


?

?

?

?

?

?

?

?

?

?

TM

R1

R0

1

1

1

1

1

?

圖3.4.3 DS18B20字節(jié)定義

?

3.5 顯示模塊選擇

數(shù)碼管是一種半導(dǎo)體發(fā)光器件,其基本單元是發(fā)光二極管。

?3.5.1數(shù)碼管的分類

數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個發(fā)光二極管單元(多一個小數(shù)點(diǎn)顯示);按能顯示多少個“8”可分為1位、2位、4位等等數(shù)碼管;按發(fā)光二極管單元連接方式分為共陽極數(shù)碼管和共陰極數(shù)碼管。共陽數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數(shù)碼管。共陽數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮。當(dāng)某一字段的陰極為高電平時(shí),相應(yīng)字段就不亮。。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管。共陰數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到地線GND上,當(dāng)某一字段發(fā)光二極管的陽極為高電平時(shí),相應(yīng)字段就點(diǎn)亮。當(dāng)某一字段的陽極為低電平時(shí),相應(yīng)字段就不亮[8]。如圖3.5.1

??? ???????????

?

圖3.5.1 八段數(shù)碼管事物圖

3.5.2數(shù)碼管驅(qū)動原理

?數(shù)碼管要正常顯示,就要用驅(qū)動電路來驅(qū)動數(shù)碼管的各個段碼,從而顯示出我們要的數(shù)字,在有些時(shí)候需要做一個簡單的顯示系統(tǒng)。那么在單片機(jī)I/O資源夠用的情況下可以直接用單片機(jī)的I/O口驅(qū)動數(shù)碼管,也可以根據(jù)數(shù)碼管的驅(qū)動方式的不同,可以分為靜態(tài)式和動態(tài)式兩類。

(1)靜態(tài)顯示驅(qū)動:靜態(tài)驅(qū)動也稱直流驅(qū)動。靜態(tài)驅(qū)動是指每個數(shù)碼管的每一個段碼都由一個單片機(jī)的I/O端口進(jìn)行驅(qū)動,或者使用如BCD碼二-十進(jìn)制譯碼器譯碼進(jìn)行驅(qū)動。靜態(tài)驅(qū)動的優(yōu)點(diǎn)是編程簡單,顯示亮度高,缺點(diǎn)是占用I/O端口多,如驅(qū)動5個數(shù)碼管靜態(tài)顯示則需要5×8=40根I/O端口來驅(qū)動,要知道一個89S51單片機(jī)可用的I/O端口才32個呢),實(shí)際應(yīng)用時(shí)必須增加譯碼驅(qū)動器進(jìn)行驅(qū)動,增加了硬件電路的復(fù)雜性[8]。

(2)動態(tài)顯示驅(qū)動:數(shù)碼管動態(tài)顯示接口是單片機(jī)中應(yīng)用最為廣泛的一種顯示方式之一,動態(tài)驅(qū)動是將所有數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,但究竟是那個數(shù)碼管會顯示出字形,取決于單片機(jī)對位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮[9]。通過分時(shí)輪流控制各個數(shù)碼管的的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。在輪流顯示過程中,每位數(shù)碼管的點(diǎn)亮?xí)r間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感,動態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低[10]。

  靜態(tài)驅(qū)動方式簡單不容易出錯,如果電路設(shè)計(jì)合適,也能夠用較少的線完成多個數(shù)碼管的驅(qū)動。但是動態(tài)驅(qū)動方式省單片機(jī)的資源,如今已經(jīng)有很多這樣成熟的基于動態(tài)掃描的芯片。

所以能滿足本文顯示設(shè)計(jì)要求,采用LG3641BH LED數(shù)碼管做為顯示電路,數(shù)碼管顯示電路采用4位共陽LED數(shù)碼管從P14,P15,P16,P17串口輸出段碼。

4. 系統(tǒng)硬件電路設(shè)計(jì)

4.1系統(tǒng)整體電路圖

該系統(tǒng)電路主要包括:單片機(jī)最小系統(tǒng)、DS18B20溫度傳感器系統(tǒng)、報(bào)警系統(tǒng)、LED顯示模塊電路及電源接口和數(shù)據(jù)下載接口等電路,如圖 4.1.1所示。

圖中有三個獨(dú)立式按鍵可以分別調(diào)整溫度計(jì)的上下限報(bào)警設(shè)置,圖中蜂鳴器可以在被測溫度不在上下限范圍內(nèi)時(shí),發(fā)出報(bào)警鳴叫聲音,同時(shí)LED數(shù)碼管將沒有被測溫度值顯示,這時(shí)可以調(diào)整報(bào)警上下限,從而測出被測的溫度值。

??? 圖中的按健復(fù)位電路是上電復(fù)位加手動復(fù)位,使用比較方便,在程序跑飛時(shí),可以手動復(fù)位,這樣就不用在重起單片機(jī)電源,就可以實(shí)現(xiàn)復(fù)位。????????

圖 4.1.1 系統(tǒng)整體電路圖

?

?

4.2 單片機(jī)最小系統(tǒng)

最小系統(tǒng)包括晶振電路、復(fù)位電路、按鍵設(shè)置部分,AT89S52單片機(jī)最小系統(tǒng)的電路如圖:4.2.1

單片機(jī)AT89S52具有低電壓供電和體積小等特點(diǎn),四個端口只需要兩個口就能滿足電路系統(tǒng)的設(shè)計(jì)需要[11],很適合便攜手持式產(chǎn)品的設(shè)計(jì)使用系統(tǒng)可用二節(jié)電池供電。

?

??????????????????????????? 圖 4.2.1 單片機(jī)最小系統(tǒng)電路

4.3 溫度傳感器系統(tǒng)

DS18B20溫度傳感器電路,如圖 4.3.1。

圖 4.3.1? DS18B20溫度傳感器系統(tǒng)

DS18B20采用單線進(jìn)行數(shù)據(jù)傳輸,外接一個4.7k上拉電阻與單片機(jī)的P10口相連進(jìn)行數(shù)據(jù)的雙向傳輸[12]。

4.3.1 DS18B20的測溫原理

器件中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號送給減法計(jì)數(shù)器1;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所產(chǎn)生的信號作為減法計(jì)數(shù)器2的脈沖輸入。器件中還有一個計(jì)數(shù)門,當(dāng)計(jì)數(shù)門打開時(shí),DS18B20就對低溫度系數(shù)振蕩器產(chǎn)生的時(shí)鐘脈沖進(jìn)行計(jì)數(shù)進(jìn)而完成溫度測量。計(jì)數(shù)門的開啟時(shí)間由高溫度系數(shù)振蕩器來決定,每次測量前,首先將-55℃所對應(yīng)的一個基數(shù)分別置入減法計(jì)數(shù)器1、溫度寄存器中,計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55℃所對應(yīng)的一個基數(shù)值。

減法計(jì)數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,減法計(jì)數(shù)器1的預(yù)置將重新被裝入,減法計(jì)數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計(jì)數(shù),如此循環(huán)直到減法計(jì)數(shù)器計(jì)數(shù)到0時(shí),停止溫度寄存器的累加,此時(shí)溫度寄存器中的數(shù)值就是所測溫度值。其輸出用于修正減法計(jì)數(shù)器的預(yù)置值,只要計(jì)數(shù)器門仍未關(guān)閉就重復(fù)上述過程,直到溫度寄存器值大致被測溫度值[13]。

由表1可見,DS18B20溫度轉(zhuǎn)換的時(shí)間比較長,而且分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時(shí)間越長。因此,在實(shí)際應(yīng)用中要將分辨率和轉(zhuǎn)換時(shí)間權(quán)衡考慮。

高速暫存RAM的第6、7、8字節(jié)保留未用,表現(xiàn)為全邏輯1。第9字節(jié)讀出前面所有8字節(jié)的CRC碼,可用來檢驗(yàn)數(shù)據(jù),從而保證通信數(shù)據(jù)的正確性。

當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開始啟動轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號擴(kuò)展的二進(jìn)制補(bǔ)碼形式存儲在高速暫存存儲器的第1、2字節(jié)。單片機(jī)可以通過單線接口讀出該數(shù)據(jù),讀數(shù)據(jù)時(shí)低位在先,高位在后,數(shù)據(jù)格式以0.0625℃/LSB形式表示。

當(dāng)符號位S=0時(shí),表示測得的溫度值為正值,可以直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)符號位S=1時(shí),表示測得的溫度值為負(fù)值,要先將補(bǔ)碼變成原碼,再計(jì)算十進(jìn)制數(shù)值。表2是一部分溫度值對應(yīng)的二進(jìn)制溫度數(shù)據(jù)[14]。

?

表1 DS18B20溫度轉(zhuǎn)換時(shí)間表

R1

R0

分辨率/位

溫度最大轉(zhuǎn)向時(shí)間/ms

0

0

9

93.75

0

1

10

187.5

1

0

11

375

1

1

12

750

?

DS18B20完成溫度轉(zhuǎn)換后,就把測得的溫度值與RAM中的TH、TL字節(jié)內(nèi)容作比較。若T>TH或T<TL,則將該器件內(nèi)的報(bào)警標(biāo)志位置位,并對主機(jī)發(fā)出的報(bào)警搜索命令作出響應(yīng)。因此,可用多只DS18B20同時(shí)測量溫度并進(jìn)行報(bào)警搜索。

在64位ROM的最高有效字節(jié)中存儲有循環(huán)冗余檢驗(yàn)碼(CRC)。主機(jī)ROM的前56位來計(jì)算CRC值,并和存入DS18B20的CRC值作比較,以判斷主機(jī)收到的ROM數(shù)據(jù)是否正確。

?

?

表2 一部分溫度對應(yīng)值表

溫度/℃

二進(jìn)制表示

十六進(jìn)制表示

+125

0000 0111??? 1101 0000

07D0H

+85

0000 0101??? 0101 0000

0550H

+25.0625

0000 0001??? 1001 0000

0191H

+10.125

0000 0000??? 1010 0001

00A2H

+0.5

0000 0000??? 0000 0010

0008H

0

0000 0000??? 0000 1000

0000H

-0.5

1111 1111??? 1111 0000

FFF8H

-10.125

1111 1111??? 0101 1110

FF5EH

-25.0625

1111 1110??? 0110 1111

FE6FH

-55

1111 1100??? 1001 0000

FC90H

?

4.4 報(bào)警電路設(shè)計(jì)

報(bào)警電路中加一PNP三極管驅(qū)動,基極接單片機(jī)P11口,當(dāng)端口變成低電平時(shí),驅(qū)動三極管會導(dǎo)通,VCC電壓加載到蜂鳴器使其發(fā)聲、報(bào)警發(fā)光二極管亮,如圖4.4.1。

圖 4.4.1 報(bào)警電路

?

4.5 顯示電路設(shè)計(jì)

如圖4.5.1,采用LG3641BH LED數(shù)碼管顯示電路采用4位共陽LED數(shù)碼管從P14,P15,P16,P17串口輸出段碼。用PNP三極管進(jìn)行驅(qū)動,當(dāng)相應(yīng)的端口變成低電平時(shí),驅(qū)動相應(yīng)的三極管會導(dǎo)通,驅(qū)動三極管給數(shù)碼管相應(yīng)的位供電,這時(shí)只要P0口送出數(shù)字的顯示代碼,數(shù)碼管就能正常顯示數(shù)字。

?

?

圖 4.5.1 數(shù)碼管顯示電路

4.6電源電路設(shè)計(jì)

我們選用的是串聯(lián)起來的4節(jié)1.5v5號電池,從經(jīng)濟(jì)的角度考慮的,干電池比較便宜,但其還有不足之處,干電池存儲的是電量。隨著電量的消耗,它的供電電壓就會不斷的下降,所有我們需要使用一個穩(wěn)壓器,來保證電源供給的是標(biāo)準(zhǔn)的5v電壓。4節(jié)1.5v串聯(lián)起來產(chǎn)生的和電壓最大是6v,而本文的AT89S52單片機(jī)工作電壓的范圍是4v5.5v,在該系統(tǒng)中我們使用的電壓是5v。這時(shí)我們可以用LM7805穩(wěn)壓器來產(chǎn)生穩(wěn)定的5v電壓[15]。穩(wěn)壓電路如下圖4.6.1所示:

圖4.6.1? LM7805穩(wěn)壓電路

在該電路中,C12是極性電容,起到穩(wěn)壓的作用,而C2是非極性電容,它起的作用是濾除輸出電壓中不是直流的成分,即濾波。

LM7805穩(wěn)壓芯片的穩(wěn)壓壓差為2V左右,在實(shí)際使用中容易出現(xiàn)電壓過低的狀態(tài),此時(shí)提供的電源達(dá)不到系統(tǒng)的電源要求,會出現(xiàn)程序跑飛的現(xiàn)象,而另一款LM2904穩(wěn)壓壓差可以達(dá)到40mV,效果比LM7805好很多,但考慮到經(jīng)濟(jì)原因我們采用LM7805,只要在穩(wěn)壓前端提供較大的電源供應(yīng)即可。

5. 系統(tǒng)軟件設(shè)計(jì)

系統(tǒng)程序主要包括主程序,讀出溫度子程序,溫度轉(zhuǎn)換命令子程序,計(jì)算溫度子程序,按鍵掃描。

5.1主程序

主程序的主要功能是負(fù)責(zé)讀出并處理DS18B20的測量的當(dāng)前溫度值,溫度的實(shí)時(shí)顯示,并根據(jù)設(shè)置的上下限判斷是否報(bào)警。系統(tǒng)開始運(yùn)行時(shí),溫度傳感器測量并計(jì)算溫度值通過P1.0口傳輸進(jìn)單片機(jī)里進(jìn)行處理,經(jīng)過處理后的數(shù)據(jù)再通過P0口傳輸?shù)綌?shù)碼管進(jìn)行顯示。通過按鍵設(shè)置溫度報(bào)警界限,當(dāng)超過報(bào)警界限時(shí)單片機(jī)將相應(yīng)的數(shù)據(jù)通過P1.1口傳輸進(jìn)行聲光報(bào)警。溫度測量每1s進(jìn)行一次。這樣可以在一秒之內(nèi)測量一次被測溫度,其程序流程見圖5.1.1所示。

圖5.1.1 ?主程序流程圖

5.2讀出溫度子程序

讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時(shí)需進(jìn)行CRC校驗(yàn),校驗(yàn)有錯時(shí)不進(jìn)行溫度數(shù)據(jù)的改寫。其程序流程圖如圖5.2.1示

??

?

圖5.2.1讀溫度流程圖

5.3溫度轉(zhuǎn)換命令子程序

溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令,當(dāng)采用12位分辨率時(shí)轉(zhuǎn)換時(shí)間約為750ms,在本程序設(shè)計(jì)中采用1s顯示程序延時(shí)法等待轉(zhuǎn)換的完成[16]。溫度轉(zhuǎn)換命令子程序流程圖如上圖,圖5.3.1所示

5.4 計(jì)算溫度子程序

計(jì)算溫度子程序?qū)AM中讀取值進(jìn)行BCD碼的轉(zhuǎn)換運(yùn)算,并進(jìn)行溫度值正負(fù)的判定,其程序流程圖如圖5.4.1所示。

?

?

圖 5.3.1? 溫度轉(zhuǎn)換流程圖

?

?

?

圖 5.4.1 計(jì)算溫度流程圖

5.4 鍵盤掃描流程圖

?

圖 5.4.1 按鍵掃描流程圖

6. 測試與結(jié)果分析

6.1仿真軟件介紹

本次仿真用了Proteus軟件,Proteus(海神)的ISIS是一款Labcenter出品的電路分析實(shí)物仿真系統(tǒng),可仿真各種電路和IC,并支持單片機(jī),元件庫齊全,使用方便,是不可多得的專業(yè)的單片機(jī)軟件仿真系統(tǒng)[17]。

  該軟件的特點(diǎn):

 ?。?)全部滿足我們提出的單片機(jī)軟件仿真系統(tǒng)的標(biāo)準(zhǔn),并在同類產(chǎn)品中具有明顯的優(yōu)勢。(2)具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、RS一232動態(tài)仿真、1 C調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號發(fā)生器等。(3)目前支持的單片機(jī)類型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各種外圍芯片。(4)支持大量的存儲器和外圍芯片??傊撥浖且豢罴瘑纹瑱C(jī)和SPICE分析于一身的仿真軟件,功能極其強(qiáng)大 ,可仿真51、AVR、PIC。

Proteus與其它單片機(jī)仿真軟件不同的是,它不僅能仿真單片機(jī)CPU的工作情況,也能仿真單片機(jī)外圍電路或沒有單片機(jī)參與的其它電路的工作情況。因此在仿真和程序調(diào)試時(shí),關(guān)心的不再是某些語句執(zhí)行時(shí)單片機(jī)寄存器和存儲器內(nèi)容的改變,而是從工程的角度直接看程序運(yùn)行和電路工作的過程和結(jié)果。對于這樣的仿真實(shí)驗(yàn),從某種意義上講,是彌補(bǔ)了實(shí)驗(yàn)和工程應(yīng)用間脫節(jié)的矛盾和現(xiàn)象[18]。

程序編譯用Keil軟件, Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時(shí)更能體現(xiàn)高級語言的優(yōu)勢。

6.2 仿真結(jié)果

6.2.1 用Keil進(jìn)行程序編譯

運(yùn)用keil軟件編譯C語言程序,其結(jié)果如下圖6.2.1和圖6.2.2所示,在結(jié)果欄顯示“cao cx”—0 Error(s),0 warning(s).說明此程序在軟件編譯上無語法等錯誤。將此程序生成*.hex文件調(diào)入硬件中用Proteus進(jìn)行調(diào)試仿真。

圖6.1.1 Keil編譯C語言程序

圖6.1.2 Keil編譯C語言程序

6.2.2 在Proteus中仿真

將生成的cao.hex文件調(diào)入Proteus電路圖的單片機(jī)中,點(diǎn)擊圖左下角的開始鍵運(yùn)行,程序的開始界面如圖6.2.1,數(shù)碼管顯示“— —”。

?

圖6.2.1 仿真程序初始化

程序初始化后通過調(diào)節(jié)DS18B20溫度傳感器的數(shù)值,數(shù)碼管會顯示相應(yīng)的數(shù)值,例如10℃,其結(jié)果如圖6.2.2所示。

圖6.2.2 仿真程序正常運(yùn)行結(jié)果

在設(shè)置系統(tǒng)報(bào)警溫度上下限時(shí),按下按鍵S1,數(shù)碼管會顯示“H38C”(系統(tǒng)默認(rèn)上限為38℃),此時(shí)進(jìn)入溫度上限設(shè)置模式,可通過調(diào)節(jié)S2和S3分別增加和減小數(shù)碼管上顯示的數(shù)字,例如設(shè)置上限為39℃,如圖6.2.3所示。

接著再次按下鍵S1,數(shù)碼管會顯示“L05C”(系統(tǒng)默認(rèn)下限為5℃),此時(shí)進(jìn)入溫度下限設(shè)置模式,可通過調(diào)節(jié)S2和S3分別增加和減小數(shù)碼管上顯示的數(shù)字,例如設(shè)置下限為5℃,如圖6.2.4所示。

圖6.2.3 仿真設(shè)置最高溫度報(bào)警線

?

?

圖6.2.4仿真設(shè)置溫度報(bào)警最低線

當(dāng)溫度超過設(shè)置的上下限時(shí),系統(tǒng)會進(jìn)行聲光報(bào)警,蜂鳴器會發(fā)出“滴……滴……滴”蜂鳴聲,同時(shí)LED燈會閃爍。

當(dāng)系統(tǒng)未檢測的到DS18B20溫度傳感器或運(yùn)行錯誤時(shí),數(shù)碼管會顯示錯誤的數(shù)字“8.8.8.8”,如圖6.2.5所示。

圖6.2.5 仿真程序出錯

?

7. 總結(jié)與致謝

做為對大學(xué)四年所學(xué)知識的總結(jié),通過本次的畢業(yè)論文設(shè)計(jì),我學(xué)到了很多東西,同時(shí)在做的過程中也發(fā)現(xiàn)很多的問題,從最初的課題選擇到對相關(guān)課題資料的搜集與摘選,再到自己論文內(nèi)容的思路的設(shè)計(jì)、編寫以致最后階段的修改與完善。在這一過程中,我對我們大學(xué)四年所學(xué)習(xí)的相關(guān)電子知識又有了更深一層的學(xué)習(xí)和理解,讓我對自己所學(xué)的又有了更深的掌握。雖然以前還做過這樣的設(shè)計(jì)但這次設(shè)計(jì)真的讓我長進(jìn)了很多,單片機(jī)課程設(shè)計(jì)重點(diǎn)就在于軟件算法的設(shè)計(jì),需要有很巧妙的程序算法,雖然以前寫過幾次程序,但我覺的寫好一個程序并不是一件簡單的事,舉個例子,以前寫的那幾次,數(shù)據(jù)加減時(shí),我用的都是BCD碼,這一次,我全部用的都是16進(jìn)制的數(shù)直接加減,顯示處理時(shí)在用除法去刪分,感覺效果比較好,有好多的東西,只有我們?nèi)ピ囍隽?,才能真正的掌握,只學(xué)習(xí)理論有些東西而不結(jié)合實(shí)踐是很難理解的,更談不上掌握。

從這次的畢業(yè)設(shè)計(jì)中,我真真正正的意識到,在以后的學(xué)習(xí)中,要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識用到實(shí)際當(dāng)中,學(xué)習(xí)單機(jī)片機(jī)更是如此,程序只有在經(jīng)常的寫與讀的過程中才能提高,這就是我在這次課程設(shè)計(jì)中的最大收獲。

在此過程中,我也要感謝對我一直悉心指導(dǎo)和幫助的指導(dǎo)教師——葉愛芹老師。正是在她不厭其煩的指導(dǎo)和對我們的啟發(fā)中,讓我對我的論文設(shè)計(jì)思路逐漸清晰明朗,每當(dāng)在我論文設(shè)計(jì)中遇到困難時(shí)充滿希望,總能迎刃而解,總之非常感謝她這段時(shí)間對我們的鼓勵和指導(dǎo)。

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

參考文獻(xiàn):

[1]  李朝青.單片機(jī)原理及接口技術(shù)(簡明修訂版).杭州:北京航空航天大學(xué)出版社,1998

[2]  李廣弟.單片機(jī)基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,1994

[3]  江力.單片機(jī)原理與應(yīng)用技術(shù)? .清華大學(xué)出版社 .2006

[4]  蔡美琴等.MCS一51系列單片機(jī)系統(tǒng)及其應(yīng)用[M].北京:高等教育出版社,1999.

[5]?? 王樹勛.MCS一51單片微型計(jì)算機(jī)原理與開發(fā).北京:機(jī)械工業(yè)出版社,1995

[6]?? 何希才.傳感器及其應(yīng)用電路.北京:電子工業(yè)出版社,2001

[7]?? 劉迎春、葉湘濱.傳感器原理設(shè)計(jì)與應(yīng)用(第三版) [M].長沙:國防科技大學(xué)出版社,

1997

[8]? ?靳達(dá).單片機(jī)應(yīng)用系統(tǒng)開發(fā)實(shí)例導(dǎo)航.北京:人民郵電出版社,2003.

[9]?? 潘新民,王燕芳.微型計(jì)算機(jī)實(shí)用系統(tǒng)設(shè)計(jì)[M].北京:人民郵電出版社,1992.

[10]? 胡漢才.單片機(jī)原理及接口技術(shù).北京:清華大學(xué)出版社,1996

[11]? 何力民.MCS一51系列單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì).北京:北京航空航天大學(xué)出版社,1993

?

[12]? 江曉安.等數(shù)字電子技術(shù) . 編著. 西安電子科技大學(xué)出版社 .1993

[13] ?閻石.數(shù)字電子技術(shù)基礎(chǔ)(第三版). 北京:高等教育出版社,1989

[14] ?廖常初.現(xiàn)場總線概述[J].電工技術(shù),1999.

[15] ?靳達(dá).單片機(jī)典型模塊設(shè)計(jì)實(shí)例導(dǎo)航.北京:人民郵電出版社,2003.

[16] ?王松武,于鑫,武思軍.電子創(chuàng)新設(shè)計(jì)與實(shí)踐.北京:國防工業(yè)出版社,2005

[17]? Artori S,ZHANG G X. Geometric Error Measurement and Compensation of Machines.

Annals of the CIRP. 1995

[18] ?Bolton W. Instrumentation&process measurement. Longman Scientific&Technical. 1991

?

?

?

?

?

?

?

?

?

?

?

?

?

?

英文摘要:

Digital temperature display alarming system

Abstract: along with the progress of The Times and development, technology has spread to our life, work, scientific research, each domain, has become a more mature technology, this paper introduces a method based on single-chip microcomputer control, the digital thermometer AT89S52 SCM design using a digital thermometer, it by MCU, LED digital sensors and DS18B20 pipe etc components, this thermometer belongs to the multi-function thermometer, function, can install strong upper temperature, and the measurement accuracy alarm and small error. When measuring temperature exceeds the upper limit set temperature, light buzzer and alarm.

Keywords: SCM AT89S52; thermometer; DS18B20; temperature display

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

附錄:源程序

/******************************************************************

程序名稱:DS18B20溫度測量、報(bào)警系統(tǒng)

簡要說明:DS18B20溫度計(jì),溫度測量范圍0~99.9攝氏度

??? 可設(shè)置上限報(bào)警溫度、下限報(bào)警溫度

??? 即高于上限值或者低于下限值時(shí)蜂鳴器報(bào)警

??? 默認(rèn)上限報(bào)警溫度為38℃、默認(rèn)下限報(bào)警溫度為5℃

??? 報(bào)警值可設(shè)置范圍:最低上限報(bào)警值等于當(dāng)前下限報(bào)警值

??? 最高下限報(bào)警值等于當(dāng)前上限報(bào)警值

??? 將下限報(bào)警值調(diào)為0時(shí)為關(guān)閉下限報(bào)警功能???

******************************************************************/

#include <AT89X52.h>

#include "DS18B20.h"??

#define uint unsigned int

#define uchar unsigned char?? //宏定義

#define SET? P3_1??? //定義調(diào)整鍵

#define DEC? P3_2??? //定義減少鍵

#define ADD? P3_3??? //定義增加鍵

#define BEEP P3_7??? //定義蜂鳴器

bit shanshuo_st;??? //閃爍間隔標(biāo)志

bit beep_st;???? //蜂鳴器間隔標(biāo)志

sbit DIAN = P2^7;??????? //小數(shù)點(diǎn)

uchar x=0;????? //計(jì)數(shù)器

signed char m;???? //溫度值全局變量

uchar n;????? //溫度值全局變量

uchar set_st=0;???? //狀態(tài)標(biāo)志

signed char shangxian=38;? //上限報(bào)警溫度,默認(rèn)值為38

signed char xiaxian=5;?? //下限報(bào)警溫度,默認(rèn)值為5

uchar

code? LEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};

/*****延時(shí)子程序*****/

void Delay(uint num)

{

?while( --num );

}

/*****初始化定時(shí)器0*****/

void InitTimer(void)

{

? TMOD=0x1;

? TH0=0x3c;

? TL0=0xb0;???? //50ms(晶振12M)

}

/*****定時(shí)器0中斷服務(wù)程序*****/

void timer0(void) interrupt 1

{

?TH0=0x3c;

?TL0=0xb0;

?x++;

}

/*****外部中斷0服務(wù)程序*****/

void int0(void) interrupt 0

{

?EX0=0;????? //關(guān)外部中斷0

?if(DEC==0&&set_st==1)

?{

? shangxian--;

? if(shangxian<xiaxian)shangxian=xiaxian;

?}

?else if(DEC==0&&set_st==2)

?{

? xiaxian--;

? if(xiaxian<0)xiaxian=0;

?}

}

/*****外部中斷1服務(wù)程序*****/

void int1(void) interrupt 2

{

?EX1=0;????? //關(guān)外部中斷1

?if(ADD==0&&set_st==1)

?{

? shangxian++;

? if(shangxian>99)shangxian=99;

?}

?else if(ADD==0&&set_st==2)

?{

? xiaxian++;

? if(xiaxian>shangxian)xiaxian=shangxian;

?}?

}

/*****讀取溫度*****/

void check_wendu(void)

{

?uint a,b,c;

?c=ReadTemperature()-5;? //獲取溫度值并減去DS18B20的溫漂誤差

?a=c/100; ????//計(jì)算得到十位數(shù)字

?b=c/10-a*10;??? //計(jì)算得到個位數(shù)字

?m=c/10;????? //計(jì)算得到整數(shù)位

?n=c-a*100-b*10;??? //計(jì)算得到小數(shù)位

?if(m<0){m=0;n=0;}?? //設(shè)置溫度顯示上限

?if(m>99){m=99;n=9;}?? //設(shè)置溫度顯示上限???

}

/*****顯示開機(jī)初始化等待畫面*****/

Disp_init()???

{

?P2 = 0xbf;????? //顯示-

?P1 = 0xf7;

?Delay(200);

?P1 = 0xfb;

?Delay(200);??

?P1 = 0xfd;

?Delay(200);

?P1 = 0xfe;

?Delay(200);

?P1 = 0xff;???????? //關(guān)閉顯示

}

/*****顯示溫度子程序*****/

Disp_Temperature()???? //顯示溫度

{

?P2 =0xc6;????? //顯示C

?P1 = 0xf7;

?Delay(300);

?P2 =LEDData[n];??? //顯示個位

?P1 = 0xfb;

?Delay(300);

?P2 =LEDData[m%10];??? //顯示十位

?DIAN = 0;???????? //顯示小數(shù)點(diǎn)

?P1 = 0xfd;

?Delay(300);

?P2 =LEDData[m/10];??? //顯示百位

?P1 = 0xfe;

?Delay(300);

?P1 = 0xff;???????? //關(guān)閉顯示

}

/*****顯示報(bào)警溫度子程序*****/

Disp_alarm(uchar baojing)

{

?P2 =0xc6;????? //顯示C

?P1 = 0xf7;

?Delay(200);

?P2 =LEDData[baojing%10]; //顯示十位

?P1 = 0xfb;

?Delay(200);

?P2 =LEDData[baojing/10]; //顯示百位

?P1 = 0xfd;

?Delay(200);

?if(set_st==1)P2 =0x89;

?else if(set_st==2)P2 =0xc7; //上限H、下限L標(biāo)示

?P1 = 0xfe;

?Delay(200);

?P1 = 0xff;???????? //關(guān)閉顯示

}

/*****報(bào)警子程序*****/

void Alarm()

{

?if(x>=10){beep_st=~beep_st;x=0;}

?if((m>=shangxian&&beep_st==1)||(m<xiaxian&&beep_st==1))BEEP=0;

?else BEEP=1;

}

/*****主函數(shù)*****/

void main(void)

{

??? uint z;

?InitTimer();??? //初始化定時(shí)器

?EA=1;????? //全局中斷開關(guān)

?TR0=1;

?ET0=1;????? //開啟定時(shí)器0

?IT0=1;???????

?IT1=1;

?check_wendu();

?check_wendu();

?for(z=0;z<300;z++)

?{

? Disp_init();???????

? }

?while(1)

? {

? if(SET==0)

? {

?? Delay(2000);

?? do{}while(SET==0);

?? set_st++;x=0;shanshuo_st=1;

?? if(set_st>2)set_st=0;

? }

? if(set_st==0)

? {

?? EX0=0;??? //關(guān)閉外部中斷0

?? EX1=0;??? //關(guān)閉外部中斷1

??? check_wendu();

????? Disp_Temperature();

?? Alarm();?? //報(bào)警檢測

? }

? else if(set_st==1)

? {

?? BEEP=1;??? //關(guān)閉蜂鳴器

?? EX0=1;??? //開啟外部中斷0

?? EX1=1;??? //開啟外部中斷1

?? if(x>=10){shanshuo_st=~shanshuo_st;x=0;}

?? if(shanshuo_st) {Disp_alarm(shangxian);}

? }

? else if(set_st==2)

? {

?? BEEP=1;??? //關(guān)閉蜂鳴器

?? EX0=1;??? //開啟外部中斷0

?? EX1=1;??? //開啟外部中斷1

?? if(x>=10){shanshuo_st=~shanshuo_st;x=0;}

?? if(shanshuo_st) {Disp_alarm(xiaxian);}

? }

??? }

}

/*****END*****/

DS18B20.h

#include <AT89X52.h>

#define? DQ? P3_6???? //定義DS18B20總線I/O

/*****延時(shí)子程序*****/

void Delay_DS18B20(int num)

{

? while(num--) ;

}

/*****初始化DS18B20*****/

void Init_DS18B20(void)

{

? unsigned char x=0;

? DQ = 1;???????? //DQ復(fù)位

? Delay_DS18B20(8);??? //稍做延時(shí)

? DQ = 0;???????? //單片機(jī)將DQ拉低

? Delay_DS18B20(80);?? //精確延時(shí),大于480us

? DQ = 1;???????? //拉高總線

? Delay_DS18B20(14);

? x = DQ;?????????? //稍做延時(shí)后,如果x=0則初始化成功,x=1則初始化失敗

? Delay_DS18B20(20);

}

/*****讀一個字節(jié)*****/

unsigned char ReadOneChar(void)

{

? unsigned char i=0;

? unsigned char dat = 0;

? for (i=8;i>0;i--)

? {

??? DQ = 0;???? // 給脈沖信號

??? dat>>=1;

??? DQ = 1;???? // 給脈沖信號

??? if(DQ)

??? dat|=0x80;

??? Delay_DS18B20(4);

? }

? return(dat);

}

/*****寫一個字節(jié)*****/

void WriteOneChar(unsigned char dat)

{

? unsigned char i=0;

? for (i=8; i>0; i--)

? {

??? DQ = 0;

??? DQ = dat&0x01;

??? Delay_DS18B20(5);

??? DQ = 1;

??? dat>>=1;

? }

}

/*****讀取溫度*****/

unsigned int ReadTemperature(void)

{

? unsigned char a=0;

? unsigned char b=0;

? unsigned int t=0;

? float tt=0;

? Init_DS18B20();

? WriteOneChar(0xCC);? //跳過讀序號列號的操作

? WriteOneChar(0x44);? //啟動溫度轉(zhuǎn)換

? Init_DS18B20();

? WriteOneChar(0xCC);? //跳過讀序號列號的操作

? WriteOneChar(0xBE);? //讀取溫度寄存器

? a=ReadOneChar();???? //讀低8位

? b=ReadOneChar();??? //讀高8位

? t=b;

? t<<=8;

? t=t|a;

? tt=t*0.0625;

? t= tt*10+0.5;???? //放大10倍輸出并四舍五入

? return(t);

}

/*****END*****/


畢 業(yè) 設(shè) 計(jì)( 論 文 )數(shù)字溫度顯示報(bào)警系統(tǒng)的評論 (共 條)

分享到微博請遵守國家法律
紫金县| 双桥区| 新余市| 建瓯市| 崇明县| 克什克腾旗| 冀州市| 读书| 甘谷县| 读书| 迭部县| 日土县| 德庆县| 津市市| 大庆市| 青浦区| 陕西省| 巨鹿县| 耿马| 宝丰县| 岳普湖县| 承德市| 朔州市| 视频| 陵川县| 榆树市| 武冈市| 浑源县| 拜泉县| 平潭县| 雅安市| 运城市| 英德市| 昌黎县| 高密市| 石泉县| 孝感市| 油尖旺区| 德阳市| 常宁市| 巴彦淖尔市|