2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  摘要</b></p><p>  溫度的檢測與控制是工業(yè)生產(chǎn)過程中比較典型的應(yīng)用。本設(shè)計(jì)以AT89C52單片機(jī)為核心,采用DS18B20溫度傳感器檢測溫度,由溫度采集、溫度顯示,溫度報警等功能模塊組成。基于題目基本要求,本系統(tǒng)對溫度采集和溫度顯示系統(tǒng)行了重點(diǎn)設(shè)計(jì)。本系統(tǒng)大部分功能由軟件實(shí)現(xiàn),吸收了硬件軟件化的思想。實(shí)際操作時,各功能在開發(fā)板上也能完美實(shí)現(xiàn)。本系統(tǒng)

2、實(shí)現(xiàn)了要求的基本功能,其余發(fā)揮部分也能實(shí)現(xiàn)。</p><p>  關(guān)鍵字:AT89C52單片機(jī)、DS18B20溫度傳感器、數(shù)碼管顯示、溫度采集</p><p><b>  目錄</b></p><p><b>  一.緒論</b></p><p><b>  二.設(shè)計(jì)目的</b&

3、gt;</p><p><b>  三.設(shè)計(jì)要求</b></p><p><b>  四.設(shè)計(jì)思路</b></p><p>  五.系統(tǒng)的硬件構(gòu)成及功能</p><p><b>  5.1主控制器</b></p><p><b>  5

4、.2顯示電路</b></p><p><b>  5.3溫度傳感器</b></p><p>  六.系統(tǒng)整體硬件電路</p><p><b>  七.系統(tǒng)程序設(shè)計(jì)</b></p><p>  八.測量及其結(jié)果分析</p><p><b>  九

5、.設(shè)計(jì)心得體會</b></p><p><b>  十.參考文獻(xiàn)</b></p><p><b>  附錄1 源程序</b></p><p>  附錄2 元件清單及PCB圖</p><p><b>  一.緒論</b></p><p> 

6、 隨著時代的發(fā)展,控制智能化,儀器小型化,功耗微量化得到廣泛關(guān)注。單片機(jī)控制系統(tǒng)無疑在這些忙面起到了舉足輕重的作用。單片機(jī)的應(yīng)用系統(tǒng)設(shè)計(jì)業(yè)已成為新的技術(shù)熱點(diǎn),其中數(shù)字溫度計(jì)就是一個典型的例子。 </p><p>  人民的生活與環(huán)境的溫度息息相關(guān),在工業(yè)生產(chǎn)過程中需要實(shí)時測量溫度,在農(nóng)業(yè)生產(chǎn)中也離不開溫度的測量,因此研究溫度的測量方法和裝置具有重要的意義。</p><p>  測

7、量溫度的關(guān)鍵是溫度傳感器,溫度傳感器的發(fā)展經(jīng)歷了三個發(fā)展階段:</p><p> ?、賯鹘y(tǒng)的分立式溫度傳感器</p><p>  ②模擬集成溫度傳感器</p><p> ?、壑悄芗蓽囟葌鞲衅?。</p><p>  目前的智能溫度傳感器(亦稱數(shù)字溫度傳感器)是在20世紀(jì)90年代中期問世的,它是微電子技術(shù)、計(jì)算機(jī)技術(shù)和自動測試技術(shù)(ATE)的結(jié)

8、晶,特點(diǎn)是能輸出溫度數(shù)據(jù)及相關(guān)的溫度控制量,適配各種微控制器(MCU)。社會的發(fā)展使人們對傳感器的要求也越來越高,現(xiàn)在的溫度傳感器正在基于單片機(jī)的基礎(chǔ)上從模擬式向數(shù)字式,從集成化向智能化、網(wǎng)絡(luò)化的方向飛速發(fā)展,并朝著高精度、多功能、總線標(biāo)準(zhǔn)化、高可靠性及安全性、開發(fā)虛擬傳感器和網(wǎng)絡(luò)傳感器、研制單片測溫系統(tǒng)等高科技的方向迅速發(fā)展,與傳統(tǒng)的溫度計(jì)相比,其具有讀數(shù)方便,測溫范圍廣,測溫準(zhǔn)確,輸出溫度采用數(shù)字顯示,主要用于對測溫要求比較準(zhǔn)確的場

9、所,或科研實(shí)驗(yàn)室使用。該設(shè)計(jì)控制器使用ATMEL公司的AT89C52單片機(jī),測溫傳感器使用DALLAS公司DS18B20,用數(shù)碼管來實(shí)現(xiàn)溫度顯示。</p><p><b>  二.設(shè)計(jì)目的</b></p><p>  1.理解掌握MCS-51系列單片機(jī)的功能和實(shí)際應(yīng)用。</p><p>  2.掌握仿真開發(fā)軟件的使用。</p>&

10、lt;p>  3.掌握數(shù)字式溫度計(jì)電路的設(shè)計(jì)、組裝與調(diào)試方法。</p><p><b>  三.設(shè)計(jì)要求</b></p><p>  1.以MCS-51系列單片機(jī)為核心器件,組成一個數(shù)字式溫度計(jì)。</p><p>  2.采用數(shù)字式溫度傳感器為檢測器件,進(jìn)行單點(diǎn)溫度檢測,檢測精度為0.5</p><p>  3.溫

11、度顯示采用4位LED數(shù)碼管顯示,三位整數(shù),一位小數(shù)。</p><p>  4.具有鍵盤輸入上下限功能,超過上下限溫度時,進(jìn)行聲音報警。</p><p><b>  四.設(shè)計(jì)思路</b></p><p>  1.根據(jù)設(shè)計(jì)要求,選擇AT89C52單片機(jī)為核心器件。</p><p>  2.溫度檢測器件采用DS18B20數(shù)字式

12、溫度傳感器。與單片機(jī)的接口為P3.6引腳。</p><p>  3.鍵盤采用獨(dú)立式按鍵,由三個按鍵組成,分別是:設(shè)置鍵(SET),加一建(+1),確認(rèn)鍵(RET)。</p><p>  SET鍵(上下限溫度設(shè)置鍵):當(dāng)該鍵按下時,進(jìn)入上下限溫度設(shè)置功能。通過P3.1引腳接入。</p><p>  +1鍵(加一調(diào)整鍵):在輸入上下限溫度時,該鍵按下一次,被調(diào)整位加一。

13、通過P3.2引腳接入。</p><p>  RET鍵(確認(rèn)鍵):當(dāng)該鍵按下時,指向下一個要調(diào)整的位。通過P3.3引腳接入。</p><p>  4.聲音報警蜂鳴器通過P1.7引腳接入。</p><p>  硬件電路設(shè)計(jì)總體框圖為圖4.1:</p><p><b>  圖4.1</b></p><p&g

14、t;  五、系統(tǒng)的硬件構(gòu)成及功能</p><p><b>  1.主控制器</b></p><p>  單片機(jī)AT89S52具有低電壓供電和體積小等特點(diǎn),四個端口只需要兩個口就能滿足電路系統(tǒng)的設(shè)計(jì)需要,使用Atmel公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。很適合便攜手持式產(chǎn)品

15、的設(shè)計(jì)使用。</p><p>  AT89S52在仿真軟件中的圖像為圖5.1</p><p><b>  圖5.1</b></p><p><b>  2.顯示電路</b></p><p>  顯示電路采用四位共陽LED數(shù)碼管,從P3口RXD,TXD串口輸出段碼。</p><p&

16、gt;  LED數(shù)碼管在仿真軟件中如圖5.2</p><p><b>  圖5.2</b></p><p><b>  3.溫度傳感器</b></p><p>  DS18B20是美國DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實(shí)際要求通過簡單的

17、編程實(shí)現(xiàn)9~12位的數(shù)字值讀數(shù)方式。DS18B20的性能特點(diǎn)如下:</p><p>  ? 獨(dú)特的單線接口僅需一個端口引腳進(jìn)行通訊</p><p>  ? 簡單的多點(diǎn)分布應(yīng)用</p><p><b>  ? 無需外部器件</b></p><p>  ? 可通過數(shù)據(jù)線供電</p><p><b

18、>  ? 零待機(jī)功耗</b></p><p>  ? 測溫范圍-55~+125℃,以0.5℃遞增。華氏器件-67~+2570F,以0.90F 遞增</p><p>  ? 溫度以9 位數(shù)字量讀出</p><p>  ? 溫度數(shù)字量轉(zhuǎn)換時間200ms(典型值)</p><p>  ? 用戶可定義的非易失性溫度報警設(shè)置</

19、p><p>  ? 報警搜索命令識別并標(biāo)志超過程序限定溫度(溫度報警條件)的器件。</p><p>  DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。DS18B20的管腳排列、各種封裝形式如圖 3.3.1所示,DQ 為數(shù)據(jù)輸入/輸出引腳。開漏單總線接口引腳。當(dāng)被用著在寄生電源下,也可以向器件提供電源;GND為地信號;VDD為

20、可選擇的VDD引腳。當(dāng)工作于寄生電源時,此引腳必須接地。其電路圖如圖5.3.1所示.。 </p><p>  圖5.3.1 外部封裝形式 </p><p>  在仿真軟件中如圖5.3.2所示</p><p><b>  圖5.3.2</b></p><p>  DS18

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

22、減法計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55 ℃所對應(yīng)的一個基數(shù)值。</p><p>  減法計(jì)數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器1的預(yù)置值減到0時溫度寄存器的值將加1,減法計(jì)數(shù)器 1的預(yù)置將重新被裝入,減法計(jì)數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計(jì)數(shù),如此循環(huán)直到減法計(jì)數(shù)器2計(jì)數(shù)到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數(shù)值即為所測溫圖5.3.3中的斜率累加器用于補(bǔ)償和修

23、正測溫過程中的非線性其輸出用,于修正減法計(jì)數(shù)器的預(yù)置值,只要計(jì)數(shù)門仍未關(guān)閉就重復(fù)上述過程,直至溫度寄存器值達(dá)到被測溫度值,這就是DS18B20的測溫原理。</p><p>  另外,由于DS18B20單線通信功能是分時完成的,有嚴(yán)格的時隙概念,因此讀寫時序很重要。系統(tǒng)對DS18B20的各種操作必須按協(xié)議進(jìn)行。操作協(xié)議為:初始化DS18B20(發(fā)復(fù)位脈沖)→發(fā)ROM功能命令→發(fā)存儲器操作命令→處理數(shù)據(jù)。</p

24、><p><b>  圖5.3.3 </b></p><p>  在正常測溫情況下,DS1820的測溫分辨力為0.5℃,可采用下述方法獲得高分辨率的溫度測量結(jié)果:首先用DS1820提供的讀暫存器指令(BEH)讀出以0.5℃為分辨率的溫度測量結(jié)果,然后切去測量結(jié)果中的最低有效位(LSB),得到所測實(shí)際溫度的整數(shù)部分Tz,然后再用BEH指令取計(jì)數(shù)器1的計(jì)數(shù)剩余值Cs和每度計(jì)

25、數(shù)值CD??紤]到DS1820測量溫度的整數(shù)部分以0.25℃、0.75℃為進(jìn)位界限的關(guān)系,實(shí)際溫度Ts可用下式計(jì)算:</p><p>  表1.部分溫度值對應(yīng)的二進(jìn)制溫度數(shù)據(jù)。</p><p>  六.系統(tǒng)整體硬件電路</p><p>  根據(jù)設(shè)計(jì)要求與設(shè)計(jì)思路,硬件電路設(shè)計(jì)框圖如圖6.1所示,在仿真軟件Proteus上完成。其中LED數(shù)碼管以動態(tài)掃描法實(shí)現(xiàn)溫度顯示,

26、由四個PNP型晶體管Q2,Q3,Q4,Q5和八個電阻組成,基極與單片機(jī)的P1.0,P1.1,P1.2連接。DS18B20的數(shù)據(jù)I/O端與單片機(jī)P3.6引腳連接。外部晶振為12MHz。蜂鳴器通過Q1放大后與引腳P1.7相連。</p><p>  圖中有三個獨(dú)立式按鍵可以分別調(diào)整溫度計(jì)的上下限報警設(shè)置,圖中蜂鳴器可以在被測溫度不在上下限范圍內(nèi)時,發(fā)出報警鳴叫聲音,同時LED數(shù)碼管將沒有被測溫度值顯示,這時可以調(diào)整報警

27、上下限,從而測出被測的溫度值。圖中的按健復(fù)位電路是上電復(fù)位加手動復(fù)位,使用比較方便,在程序跑飛時,可以手動復(fù)位,這樣就不用在重起單片機(jī)電源,就可以實(shí)現(xiàn)復(fù)位。</p><p>  圖6.1系統(tǒng)總體硬件電路</p><p><b>  七.系統(tǒng)程序設(shè)計(jì)</b></p><p>  數(shù)字式溫度計(jì)的應(yīng)用程序主要包括主程序,溫度檢測程序,溫度轉(zhuǎn)換程序,

28、LED顯示程序等。</p><p>  系統(tǒng)的主程序主要用來初始化一些系統(tǒng)參數(shù),對DS18B20的配置數(shù)據(jù)進(jìn)行一系列的設(shè)定。溫度檢測程序是對DS18B20的狀態(tài)不斷地查詢,讀出RAM中的9字節(jié),在讀出時需進(jìn)行CRC校驗(yàn),校驗(yàn)有錯時不進(jìn)行溫度數(shù)據(jù)的改寫,讀取當(dāng)前的溫度值后,進(jìn)行溫度轉(zhuǎn)化程序,對溫度符號處理和溫度值的BCD碼處理,進(jìn)行溫度值正負(fù)的判定,將其段碼送至顯示緩沖區(qū),以備定時掃描服務(wù)程序處理。LED顯示程序主

29、要對顯示緩沖器中的顯示數(shù)據(jù)進(jìn)行刷新操作,當(dāng)最高顯示位為0時,將符號顯示位移入下一位。總程序程序代碼見附錄一</p><p>  八.測量及其結(jié)果分析</p><p>  1.Proteus仿真結(jié)果</p><p>  軟件方面,在Proteus編譯下進(jìn)行,源程序編譯及仿真調(diào)試。</p><p>  在軟件中選定傳感器后可對其進(jìn)行環(huán)境溫度設(shè)置,

30、如圖8.1.1,將環(huán)境溫度設(shè)為34.9。</p><p><b>  圖8.1.1</b></p><p>  然后點(diǎn)擊軟件執(zhí)行鍵,按操作步驟實(shí)施后,觀察LED數(shù)碼管示數(shù),此時示數(shù)如圖8.1.2。</p><p><b>  圖8.1.2</b></p><p>  可見本次軟件測試結(jié)果良好。<

31、;/p><p><b>  2.硬件測試結(jié)果</b></p><p>  在硬件測試方面,檢查電路板及焊接的質(zhì)量情況,在檢查無誤后通電檢查LED顯示器。</p><p>  其中 DS18B20實(shí)物圖為8.2.1</p><p>  在室溫下,LED顯示器示數(shù)如圖8.2.2,為26.4攝氏度</p><p

32、><b>  圖8.2.2</b></p><p>  用手蓋住溫度傳感器后,LED顯示器示數(shù)如圖8.2.3,為29.7攝氏度。</p><p>  比較可知,硬件調(diào)試結(jié)果也達(dá)到了要求。</p><p><b>  九.設(shè)計(jì)心得體會</b></p><p>  本次課設(shè)對我來說是一次難得的經(jīng)歷

33、,首先是第一次接觸了仿真軟件Proteus,在使用時經(jīng)歷了很多次失敗,因?yàn)檫@款軟件與以前使用的各種軟件有很多不同,使用時不停出錯,接線時由于元件放置不合理而接的雜亂無章;輸入源程序時還較為順利,顯示結(jié)果比較滿意。其次是程序設(shè)計(jì),我們在參考別人成功先例的基礎(chǔ)上根據(jù)自己設(shè)計(jì)的需要編制程序,其中歷經(jīng)不少曲折,最后我的收獲是,編程一定要細(xì)心,針對每一個細(xì)節(jié),稍有疏忽,程序就不能正常工作。最后是單片機(jī)實(shí)踐操作,由于我自己已買了一塊開發(fā)板,所以硬件

34、調(diào)試比較順利,效果也不錯,就是DS18B20溫度傳感器靈敏度不太高,示數(shù)變化不大。另外,我前期花了一些時間專門學(xué)習(xí)這塊芯片,了解了DS18B20的工作原理的時序圖。</p><p>  在這次的實(shí)踐與學(xué)習(xí)中,盡管期間困難重重,但我還是從中學(xué)習(xí)了不少新的知識與技能和解決困難的方法,也終于體驗(yàn)到了經(jīng)歷困難到最終獲得成功的那種無以言表的喜悅之情,總之,本次課設(shè)是我收獲最多的一次,也希望自己在以后的各項(xiàng)研究活動中能堅(jiān)持這

35、種精神。</p><p><b>  十.參考文獻(xiàn)</b></p><p>  [1]單片機(jī)原理與接口技術(shù)(第二版)牛昱光 李曉林 電子工業(yè)出版社. 2010.7</p><p>  [2]單片機(jī)系統(tǒng)設(shè)計(jì)與應(yīng)用實(shí)例. 韓志軍 機(jī)械工業(yè)出版社. 2009.10</p><p>  [3]《DS1

36、8B20數(shù)據(jù)手冊》</p><p><b>  附錄一 源程序</b></p><p>  #include <AT89X52.h></p><p>  #include "DS18B20.h" </p><p>  #define uint unsigned int</p>

37、;<p>  #define uchar unsigned char //宏定義</p><p>  #define SET P3_1 //定義調(diào)整鍵</p><p>  #define DEC P3_2 //定義減少鍵</p><p>  #define ADD P3_3 //定義增加鍵</p><p&

38、gt;  #define BEEP P3_7 //定義蜂鳴器</p><p>  bit shanshuo_st; //閃爍間隔標(biāo)志</p><p>  bit beep_st; //蜂鳴器間隔標(biāo)志</p><p>  sbit DIAN = P2^7; //小數(shù)點(diǎn)</p><p>  uchar x=0;

39、//計(jì)數(shù)器</p><p>  signed char m; //溫度值全局變量</p><p>  uchar n; //溫度值全局變量</p><p>  uchar set_st=0; //狀態(tài)標(biāo)志</p><p>  signed char shangxian=38; //上限報警溫度,默認(rèn)值為38<

40、/p><p>  signed char xiaxian=15; //下限報警溫度,默認(rèn)值為5</p><p>  uchar code LEDData[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};</p><p>  /*****延時子程序*****/</p><p>  v

41、oid Delay(uint num)</p><p><b>  {</b></p><p>  while( --num );</p><p><b>  }</b></p><p>  /*****初始化定時器0*****/</p><p>  void InitTim

42、er(void)</p><p><b>  {</b></p><p><b>  TMOD=0x1;</b></p><p><b>  TH0=0x4c;</b></p><p>  TL0=0x00; //50ms(晶振12M)</p><p

43、><b>  }</b></p><p>  /*****定時器0中斷服務(wù)程序*****/</p><p>  void timer0(void) interrupt 1</p><p><b>  {</b></p><p><b>  TH0=0x4c;</b><

44、;/p><p><b>  TL0=0x00;</b></p><p><b>  x++;</b></p><p><b>  }</b></p><p>  /*****外部中斷0服務(wù)程序*****/</p><p>  void int0(void)

45、interrupt 0</p><p><b>  {</b></p><p>  EX0=0; //關(guān)外部中斷0</p><p>  if(DEC==0&&set_st==1)</p><p><b>  {</b></p><p>  shang

46、xian--;</p><p>  if(shangxian<xiaxian)shangxian=xiaxian;</p><p><b>  }</b></p><p>  else if(DEC==0&&set_st==2)</p><p><b>  {</b></

47、p><p>  xiaxian--;</p><p>  if(xiaxian<0)xiaxian=0;</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*****外部中斷1服務(wù)程序*****/</p>&

48、lt;p>  void int1(void) interrupt 2</p><p><b>  {</b></p><p>  EX1=0; //關(guān)外部中斷1</p><p>  if(ADD==0&&set_st==1)</p><p><b>  {</b>&l

49、t;/p><p>  shangxian++;</p><p>  if(shangxian>99)shangxian=99;</p><p><b>  }</b></p><p>  else if(ADD==0&&set_st==2)</p><p><b>  

50、{</b></p><p>  xiaxian++;</p><p>  if(xiaxian>shangxian)xiaxian=shangxian;</p><p><b>  } </b></p><p><b>  }</b></p><p>  

51、/*****讀取溫度*****/</p><p>  void check_wendu(void)</p><p><b>  {</b></p><p>  uint a,b,c;</p><p>  c=ReadTemperature()-5; //獲取溫度值并減去DS18B20的溫漂誤差</p>&

52、lt;p>  a=c/100; //計(jì)算得到十位數(shù)字</p><p>  b=c/10-a*10; //計(jì)算得到個位數(shù)字</p><p>  m=c/10; //計(jì)算得到整數(shù)位</p><p>  n=c-a*100-b*10; //計(jì)算得到小數(shù)位</p><p>  if(m<0){m=0;n=

53、0;} //設(shè)置溫度顯示上限</p><p>  if(m>99){m=99;n=9;} //設(shè)置溫度顯示上限 </p><p><b>  }</b></p><p>  /*****顯示開機(jī)初始化等待畫面*****/</p><p>  Disp_init()</p><p&g

54、t;<b>  {</b></p><p>  P2=0xbf; </p><p><b>  P1=0xfe;</b></p><p>  Delay(200);</p><p><b>  P2=0xbf;</b></p><p><b&g

55、t;  P1=0xfd;</b></p><p>  Delay(200);</p><p><b>  P2=0xbf;</b></p><p><b>  P1=0xfb;</b></p><p>  Delay(200);</p><p><b>

56、  P2=0xbf; </b></p><p>  P1=0xf7; //第四</p><p>  Delay(200);</p><p>  P1=0xff; //關(guān)閉顯示</p><p><b>  }</b></p><p>  /*****顯示溫度子程序***

57、**/</p><p>  Disp_Temperature() //顯示溫度</p><p><b>  {</b></p><p>  P2=0xc6; //顯示C</p><p>  P1=0xf7; //</p><p>  Delay(300);<

58、/p><p>  P2=LEDData[n]; //顯示個位</p><p>  P1=0xfb; //</p><p>  Delay(300);</p><p>  P2=LEDData[m%10]; //顯示小數(shù)點(diǎn)</p><p><b>  DIAN=0;</b><

59、;/p><p><b>  P1=0xfd;</b></p><p>  Delay(300);</p><p>  P2=LEDData[m/10]; //顯示百位</p><p><b>  P1=0xfe;</b></p><p>  Delay(300);</

60、p><p>  P1=0xff; //關(guān)閉顯示</p><p><b>  }</b></p><p>  /*****顯示報警溫度子程序*****/</p><p>  Disp_alarm(uchar baojing)</p><p><b>  {</b>

61、;</p><p>  P2=0xc6; //顯示C</p><p><b>  P1=0xf7;</b></p><p>  Delay(200);</p><p>  P2=LEDData[baojing%10]; //顯示十位</p><p><b>  P1=0xfb

62、;</b></p><p>  Delay(200);</p><p>  P2=LEDData[baojing/10]; //顯示百位</p><p><b>  P1=0xfd;</b></p><p>  Delay(200);</p><p>  if(set_st==1)P

63、2=0x89;</p><p>  else if(set_st==2)P2=0xc7; //上限H、下限L標(biāo)示</p><p><b>  P1=0xfe;</b></p><p>  Delay(200);</p><p><b>  P1=0xff;</b></p><p&

64、gt;<b>  }</b></p><p>  /*****報警子程序*****/</p><p>  void Alarm()</p><p><b>  {</b></p><p>  if(x>=10){beep_st=~beep_st;x=0;}</p><p&g

65、t;  if((m>=shangxian&&beep_st==1)||(m<xiaxian&&beep_st==1))BEEP=0;</p><p>  else BEEP=1;</p><p><b>  }</b></p><p>  /*****主函數(shù)*****/</p><

66、p>  void main(void)</p><p><b>  {</b></p><p><b>  uint z;</b></p><p>  InitTimer(); //初始化定時器</p><p>  EA=1; //全局中斷開關(guān)</p><p

67、><b>  TR0=1;</b></p><p>  ET0=1; //開啟定時器0</p><p>  IT0=1; </p><p><b>  IT1=1;</b></p><p>  check_wendu();</p><p>  c

68、heck_wendu();</p><p>  for(z=0;z<300;z++)</p><p><b>  {</b></p><p>  Disp_init(); </p><p><b>  }</b></p><p><b>  wh

69、ile(1)</b></p><p><b>  {</b></p><p>  if(SET==0)</p><p><b>  {</b></p><p>  Delay(2000);</p><p>  do{}while(SET==0);</p>

70、;<p>  set_st++;x=0;shanshuo_st=1;</p><p>  if(set_st>2)set_st=0;</p><p><b>  }</b></p><p>  if(set_st==0)</p><p><b>  {</b></p>

71、<p>  EX0=0; //關(guān)閉外部中斷0</p><p>  EX1=0; //關(guān)閉外部中斷1</p><p>  check_wendu();</p><p>  Disp_Temperature();</p><p>  Alarm(); //報警檢測</p><p><b&

72、gt;  }</b></p><p>  else if(set_st==1)</p><p><b>  {</b></p><p>  BEEP=1; //關(guān)閉蜂鳴器</p><p>  EX0=1; //開啟外部中斷0</p><p>  EX1=1; //開啟

73、外部中斷1</p><p>  if(x>=10){shanshuo_st=~shanshuo_st;x=0;}</p><p>  if(shanshuo_st) {Disp_alarm(shangxian);}</p><p><b>  }</b></p><p>  else if(set_st==2)&l

74、t;/p><p><b>  {</b></p><p>  BEEP=1; //關(guān)閉蜂鳴器</p><p>  EX0=1; //開啟外部中斷0</p><p>  EX1=1; //開啟外部中斷1</p><p>  if(x>=10){shanshuo_st=~shans

75、huo_st;x=0;}</p><p>  if(shanshuo_st) {Disp_alarm(xiaxian);}</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p&

76、gt;  /*****END*****/</p><p>  DS18B20.h:</p><p>  #include <AT89X52.h></p><p>  #define DQ P3_6 //定義DS18B20總線I/O</p><p>  /*****延時子程序*****/</p><p

77、>  void Delay_DS18B20(int num)</p><p><b>  {</b></p><p>  while(num--) ;</p><p><b>  }</b></p><p>  /*****初始化DS18B20*****/</p><p&g

78、t;  void Init_DS18B20(void)</p><p><b>  {</b></p><p>  unsigned char x=0;</p><p>  DQ = 1; //DQ復(fù)位</p><p>  Delay_DS18B20(8); //稍做延時</p>

79、;<p>  DQ = 0; //單片機(jī)將DQ拉低</p><p>  Delay_DS18B20(80); //精確延時,大于480us</p><p>  DQ = 1; //拉高總線</p><p>  Delay_DS18B20(14);</p><p>  x =

80、 DQ; //稍做延時后,如果x=0則初始化成功,x=1則初始化失敗</p><p>  Delay_DS18B20(20);</p><p><b>  }</b></p><p>  /*****讀一個字節(jié)*****/</p><p>  unsigned char ReadOneChar(voi

81、d)</p><p><b>  {</b></p><p>  unsigned char i=0;</p><p>  unsigned char dat = 0;</p><p>  for (i=8;i>0;i--)</p><p><b>  {</b><

82、;/p><p>  DQ = 0; // 給脈沖信號</p><p><b>  dat>>=1;</b></p><p>  DQ = 1; // 給脈沖信號</p><p><b>  if(DQ)</b></p><p>  

83、dat|=0x80;</p><p>  Delay_DS18B20(4);</p><p><b>  }</b></p><p>  return(dat);</p><p><b>  }</b></p><p>  /*****寫一個字節(jié)*****/</p>

84、;<p>  void WriteOneChar(unsigned char dat)</p><p><b>  {</b></p><p>  unsigned char i=0;</p><p>  for (i=8; i>0; i--)</p><p><b>  {</b&g

85、t;</p><p><b>  DQ = 0;</b></p><p>  DQ = dat&0x01;</p><p>  Delay_DS18B20(5);</p><p><b>  DQ = 1;</b></p><p><b>  dat>

86、>=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*****讀取溫度*****/</p><p>  int ReadTemperature(void)</p><p><b>

87、  {</b></p><p>  unsigned char a=0;</p><p>  unsigned char b=0;</p><p><b>  int t=0;</b></p><p>  float tt=0;</p><p>  Init_DS18B20();<

88、;/p><p>  WriteOneChar(0xCC); //跳過讀序號列號的操作</p><p>  WriteOneChar(0x44); //啟動溫度轉(zhuǎn)換</p><p>  Init_DS18B20();</p><p>  WriteOneChar(0xCC); //跳過讀序號列號的操作</p><p>

89、  WriteOneChar(0xBE); //讀取溫度寄存器</p><p>  a=ReadOneChar(); //讀低8位</p><p>  b=ReadOneChar(); //讀高8位</p><p><b>  t=b;</b></p><p><b>  t<<=8

90、;</b></p><p><b>  t=t|a;</b></p><p>  tt=t*0.0625;</p><p>  t= tt*10+0.5; //放大10倍輸出并四舍五入</p><p>  return(t);</p><p><b>  }<

溫馨提示

  • 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

提交評論