版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 溫度計(jì)課程設(shè)計(jì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
- 基于51單片機(jī)的數(shù)字溫度計(jì)課程設(shè)計(jì)
- 基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)報告課程設(shè)計(jì)
- 課程設(shè)計(jì)--基于51單片機(jī)的數(shù)字溫度計(jì)的設(shè)計(jì)
- 基于51單片機(jī)的溫度計(jì)課程設(shè)計(jì)
- 51單片機(jī)課程設(shè)計(jì)數(shù)字溫度計(jì)報告
- 基于單片機(jī)數(shù)字溫度計(jì)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)-數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)—數(shù)字溫度計(jì)
- 單片機(jī)數(shù)字溫度計(jì)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)-數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)—數(shù)字溫度計(jì)
- 基于單片機(jī)的數(shù)字溫度計(jì)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-- 基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)
- 基于單片機(jī)的數(shù)字溫度計(jì)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)——數(shù)字溫度計(jì)
評論
0/150
提交評論