畢業(yè)論文---倉儲室溫度自動控制系統(tǒng)_第1頁
已閱讀1頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p> 設計(論文)題目</p><p> 倉儲室溫度自動控制系統(tǒng) </p><p> 學 院: 電信學院 </p><p> 學生姓名: </p><p> 專業(yè)班級:應用電子22班(手機) </p><p> 學 號:

2、 </p><p> 指導教師: </p><p> 2012年 2月 5日</p><p>  摘 要:本設計以STC89C52RC單片機為控制核心,由數(shù)字溫度傳感器DS18B20構(gòu)成了一個高溫和低溫時,分別對相應的器件進行控制的系統(tǒng)。詳細地介紹了整個系統(tǒng)的硬件組成結(jié)構(gòu)、工作原理和系統(tǒng)的軟件

3、程序設計,重點闡述了時鐘模塊、顯示模塊、溫度檢測模塊及相關控制模塊等的模塊化設計思路與制作。系統(tǒng)采用八段四位數(shù)碼管作為顯示器,具有環(huán)境溫度實時顯示,按鍵設置上下限溫度,從而控制倉庫排氣扇轉(zhuǎn)動。在本設計中,軟件程序均采用C語言編寫,便于移植與升級。</p><p>  關鍵詞:STC89C52RC; 單片機; 數(shù)碼管; 溫度控制;</p><p>  Based on single-chi

4、p microcomputer</p><p>  temperature control circuit design and production </p><p>  Abstract:This design with STC89C52RC microcontroller as control core, by real time clock chip DS1302 and digi

5、tal temperature sensor DS18B20 constitute a high temperature and low temperature respectively on the corresponding device to control system. Introduced the whole systems hardware structure, working principle and system s

6、oftware program design in detail, expounds the clock module, display module, temperature detecting module and related control module of modularization design and productio</p><p>  Key words: STC89C52RC; sin

7、gle-chip; Digital tube;Temperature control;</p><p><b>  目錄</b></p><p><b>  1背景與意義1</b></p><p><b>  1.1背景1</b></p><p><b>  1

8、.2意義1</b></p><p>  1.3功能介紹2</p><p>  2方案比較與論證2</p><p>  2.1設計任務與要求3</p><p>  2.2方案比較與論證2</p><p>  2.2.1方案比較與論證2</p><p>  2.2

9、.2方案的選擇4</p><p>  3系統(tǒng)硬件設計4</p><p>  3.1總體電路框圖4</p><p>  3.2單元電路設計5</p><p>  3.2.1單片機模塊5</p><p>  3.2.3溫度采集模塊5</p><p>  3.2.4數(shù)碼管顯示

10、模塊6</p><p>  3.2.5按鍵模塊7</p><p>  4系統(tǒng)軟件設計9</p><p>  4.1總體軟件框圖9</p><p>  4.2各模塊程序設計9</p><p>  4.2.1溫度數(shù)據(jù)采集:9</p><p>  5系統(tǒng)調(diào)試與測試11<

11、/p><p>  5.1硬件調(diào)試11</p><p>  5.2軟件調(diào)試12</p><p><b>  6設計總結(jié)12</b></p><p><b>  致 謝13</b></p><p><b>  參考文獻13</b></p

12、><p><b>  附錄15</b></p><p>  附錄A:程序清單15</p><p>  附錄B:程序清單22</p><p>  基于單片機溫度控制電路的設計與制作</p><p><b>  1背景與意義</b></p><p>&l

13、t;b>  背景</b></p><p>  隨著社會的發(fā)展,科技的進步,以及測溫儀器在各個領域的應用,智能化已是現(xiàn)代溫度控制系統(tǒng)發(fā)展的主流方向。特別是近年來,溫度控制系統(tǒng)已應用到人們生活的各個方面,設計一個溫度控制系統(tǒng),具有廣泛的應用前景與實際意義。溫度是科學技術(shù)中最基本的物理量之一,物理,化學,生物等學科都離不開溫度。在工業(yè)生產(chǎn)和實驗研究中,像電力,化工,石油,冶金,航空航天,機械制造,糧食

14、存儲, 酒類生產(chǎn)等領域內(nèi),溫度常常是表征對象和過程狀態(tài)的最重要的參數(shù)之一。比如,發(fā)電廠鍋爐的溫度必須控制在一定的范圍之內(nèi);許多化學反應的工藝過程必須在適當?shù)臏囟认虏拍苷_M行;煉油過程中,原油必須在不同的溫度和壓力條件下進行分餾才能得到汽油,柴油,煤油等產(chǎn)品。沒有合適的溫度環(huán)境,許多電子設備就不能正常工作,糧倉的儲糧就會變質(zhì)霉爛,酒類的品質(zhì)就沒有保障。因此,各行各業(yè)對溫度控制的要求都越來越高??梢?,溫度的測量和控制是非常重要的。單片機在

15、電子產(chǎn)品中的應用已經(jīng)越來越廣泛,在很多的電子產(chǎn)品中也用到了溫度檢測和溫度控制。隨著溫度控制器應用范圍的日益廣泛和多樣,各種適用于不同場合的智能溫度控制器應運而生。比較成熟的產(chǎn)品就有水溫測控溫度控制系統(tǒng)和語音報</p><p><b>  意義</b></p><p>  基于單片機溫度控制的測試控制系統(tǒng),控制對象是溫度。溫度控制在日常生活及工業(yè)領域應用相當廣泛,比如溫

16、室,水池,發(fā)酵缸,電源等場所的溫度控制。而以往溫度控制是由人工完成的而且不夠重視,其實在很多場所溫度都需要監(jiān)控以防止發(fā)生意外。針對此問題,本系統(tǒng)設計的目的是實現(xiàn)可以根據(jù)外界環(huán)境溫度控制電機的溫度控制系統(tǒng),它應用廣泛,功能強大,小巧美觀,便于攜帶,是一款既實用又廉價的控制系統(tǒng)。</p><p><b>  功能介紹</b></p><p>  1.3.1按設定鍵可切換設

17、置模式,數(shù)碼管顯示相應模式頁面。</p><p>  1.3.2當按下溫度設定鍵,即</p><p>  1.3.3當進入上下限溫度設置時,按動上下鍵可實現(xiàn)溫度調(diào)整,并通過設定需要設定的上下限溫度值,可實現(xiàn)風扇的自動控制和手動控制工作方式的切換。</p><p><b>  方案比較與論證</b></p><p><

18、;b>  設計任務與要求</b></p><p>  2.1.1當傳感器檢測出的環(huán)境溫度偏低時,控制繼電器,實現(xiàn)電暖爐的開與關的狀態(tài)。</p><p>  2.1.2 當傳感器檢測出的環(huán)境溫度偏高時,隨著溫度的改變,控制電機的轉(zhuǎn)速作出相應的改變。</p><p>  2.1.3 通過時鐘芯片DS1302自動控制電機,使其在某個時間段不工作。<

19、/p><p>  2.1.4 當環(huán)境溫度超出了設定值時,蜂鳴器發(fā)出聲響報警。</p><p><b>  方案比較與論證</b></p><p><b>  方案比較與論證</b></p><p>  方案一:單片機按照一定的控制算法對采集的溫度數(shù)據(jù)進行處理,得到控制量,以控制電機的功率,從而實現(xiàn)風扇轉(zhuǎn)

20、速的控制。傳感器采用集成的AD599,但是這個方案的電路結(jié)構(gòu)十分復雜,A/D轉(zhuǎn)換器的精度實現(xiàn)既定功能的困難很大,而且由于器件很多,使得單片機89C51的內(nèi)部資源不能滿足需要,調(diào)試和安裝都十分不方便,同時實現(xiàn)擴展功能困難。方案組成方框圖如圖1所示:</p><p>  圖1 方案一組成方框圖</p><p>  方案二:采用數(shù)字式溫度傳感器DS18B20,它能夠?qū)囟戎苯愚D(zhuǎn)換成數(shù)字信號,可以

21、通過一根數(shù)據(jù)線與單片機進行通信,而且它不需要外部元件,在-100C~850C范圍內(nèi)可以精確到+0.50C。完全滿足設計要求。這樣設計就可以不使用A/D轉(zhuǎn)換器,從而使系統(tǒng)的精度得以提高,也能夠大大節(jié)省單片機得系統(tǒng)資源,所以我又加了DS1302時鐘模塊電路,使時間能夠?qū)崟r顯示。方案組成方框圖如圖2所示:</p><p>  圖2方案二組成方框圖</p><p><b>  方案的選擇

22、</b></p><p>  通過以上兩種方案的比較,我選擇的是方案二作為設計方案,因為方案二與方案一相比,它的硬件系統(tǒng)更簡單,但是功能卻更強大,它本身的模塊化設計又使它的系統(tǒng)通用性遠遠超過方案一,在現(xiàn)在的條件下我能夠完成這個方案,所以最終選擇了這個方案。</p><p><b>  系統(tǒng)硬件設計</b></p><p><b

23、>  總體電路框圖</b></p><p>  本設計以STC89C52RC單片機為主控核心設計的一個溫度控制系統(tǒng),低溫</p><p>  時可控制加熱設備,高溫時控制風扇,超出設定最高溫度值時蜂鳴器發(fā)出聲響報警。硬件方框圖如圖3所示:</p><p>  圖3 總體硬件方框圖</p><p><b>  單元電

24、路設計</b></p><p><b>  單片機模塊</b></p><p>  STC89C52RC單片機為40引腳雙列直插芯片,有四個I/O口P0,P1,P2,P3, MCS-51單片機共有4個8位的I/O口(P0、P1、P2、P3),每一條I/O線都能獨立地作輸出或輸入。</p><p>  單片機的最小系統(tǒng)如下圖所示,18

25、引腳和19引腳接時鐘電路,XTAL1接外部晶振和微調(diào)電容的一端,在片內(nèi)它是振蕩器倒相放大器的輸入,XTAL2接外部晶振和微調(diào)電容的另一端,在片內(nèi)它是振蕩器倒相放大器的輸出。第9引腳為復位輸入端,接上電容,電阻及開關后夠上電復位電路,20引腳為接地端,40引腳為電源端。31引腳接電源端[9-11],如圖4所示:</p><p><b>  圖4 單片機電路</b></p><

26、;p><b>  溫度采集模塊</b></p><p>  DS18B20支持“一線總線”,故可以大大提高系統(tǒng)的抗干擾性,適合于惡劣的環(huán)境溫度測量。全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi),體積小。同時DS18B20的測量溫度范圍為-55 0C~+125 0C,在-10~+85 0C范圍內(nèi),精度為+0.5 0C。同樣的,DS18B20還可以程序設定9~12位的分辨率,精度

27、為+0.5 0C。同時設定的報警溫度存儲在EEPROM中,掉電后依然保存。并且支持3V~5V的電壓范圍。便于系統(tǒng)設計。</p><p>  DS18B20的主要特點:</p><p>  適應電壓范圍更寬,電壓范圍:3.0~5.5V,在寄生電源方式下可由數(shù)據(jù)線供電;</p><p>  獨特的單線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實現(xiàn)微處理

28、器與DS18B20的雙向通訊;</p><p>  DS18B20支持多點組網(wǎng)功能,多個DS18B20可以并聯(lián)在唯一的三線上,實現(xiàn)組網(wǎng)多點測溫;</p><p>  DS18B20在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi);</p><p>  溫范圍-55℃~+125℃,在-10~+85℃時精度為±0.5℃;<

29、;/p><p>  可編程的分辨率為9~12位,對應的可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實現(xiàn)高精度測溫;</p><p>  在9位分辨率時最多在93.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12位分辨率時最多在750ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,速度更快;</p><p>  測量結(jié)果直接輸出數(shù)字溫度信號,以"一線總線"串行傳送

30、給CPU,同時可傳送CRC校驗碼,具有極強的抗干擾糾錯能力;</p><p>  負壓特性:電源極性接反時,芯片不會因發(fā)熱而燒毀,但不能正常工作[249-256]。</p><p>  對DS18B20的設計外部供電方式單點測溫。在這種外部電源供電方式下,DS18B20工作電源由VDD引腳接入,因為由VDD接入電源不存在電源電流不足的問題,可以保證轉(zhuǎn)換精度。不過要注意。在這種外部供電的方式

31、下,DS18B20的GND腳不能懸空,否則不能轉(zhuǎn)換溫度,讀取的溫度總是80 oC。DS18B20的硬件電路連接如下圖6所示:</p><p>  圖6 DS18B20原理圖</p><p><b>  數(shù)碼管顯示模塊</b></p><p>  數(shù)碼管顯示模塊是一種專門用于顯示字母、數(shù)字、版本號等的段顯示模塊。它是由四位數(shù)碼管位組成的,數(shù)碼管

32、右下角有一個小數(shù)點,這樣就起到了小數(shù)的顯示,確保精確的顯示。本系統(tǒng)采用四位八段數(shù)碼管,我設置單片機驅(qū)動數(shù)碼管采用三極管的電流控制方式,單片機輸出口電流,驅(qū)動三極管,達到控制顯示的目的。連接原理圖如圖7所示:</p><p>  圖7 數(shù)碼管顯示數(shù)碼管1602原理圖</p><p><b>  按鍵模塊</b></p><p>  我在本設計中加

33、入了3個按鍵,其中S1為模式鍵,按一次,選擇顯示當前溫度模式,按第二次,選擇設置上下限溫度模式,按第三次,復位模式。S2、S3為設置鍵,用于設置上下限溫度值。如圖8所示:</p><p><b>  圖8 按鍵原理圖</b></p><p>  3.2.5系統(tǒng)電路結(jié)構(gòu)</p><p><b>  系統(tǒng)軟件設計</b>&l

34、t;/p><p>  總體軟件框圖(如圖9)</p><p><b>  圖9總體軟件框圖</b></p><p><b>  各模塊程序設計</b></p><p><b>  溫度數(shù)據(jù)采集:</b></p><p>  根據(jù)DS18B20的通訊協(xié)議,單片

35、機控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:每一次讀寫之前都要對DS18B20進行復位操作,復位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對DS18B20進行預定的操作,復位要求單片機將數(shù)據(jù)線下拉50微秒,然后釋放,當DS18B20受到信號后等待16~60微秒左右,然后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號表示復位成功。</p><p>  下圖12是DS18B20的初始化和讀寫時

36、序:</p><p>  圖12 DS18B20讀寫時序</p><p><b>  系統(tǒng)調(diào)試與測試</b></p><p><b>  硬件調(diào)試</b></p><p>  在本溫度控制電路的設計調(diào)試中遇到了很多的問題。回想這些問題只要認真多思考都是可以避免的,以下為主要的問題:</p>

37、;<p>  開始調(diào)試時發(fā)現(xiàn)數(shù)碼管發(fā)熱很厲害,后來發(fā)現(xiàn)三極管的驅(qū)動電流太大了,加上上拉電阻后問題就解決了。</p><p>  雙向可控硅BTA12-600B高壓部分電路,加104電容時,發(fā)生擊穿現(xiàn)象,導致光耦控制部分電路癱瘓,原因是耐壓值不夠。解決的方法有兩種,第一種是更換耐壓值更高的電容;由于該電容的作用是吸收可控硅元件的殘余電量,使得可控硅能夠正常導通截止,而根據(jù)使用的負載(交流電機),去掉該

38、電容后,該電路能夠正常的工作,所以第二種是在電路可以運行的狀況下去掉該104電容相連的電路。我采取的是第二種方法。</p><p><b>  軟件調(diào)試</b></p><p>  在軟件調(diào)試時也出現(xiàn)了一些問題,其中主要的問題有以下兩個方面:</p><p>  程序讀取溫度值時,出現(xiàn)的現(xiàn)象,造成風扇溫度在判斷時出現(xiàn)錯誤,使風扇經(jīng)常性突快突慢變

39、化,蜂鳴器也不斷的蜂鳴報警。解決的方法是在讀取溫度判斷時加延時,并且多次判斷,防止跳變。</p><p>  調(diào)節(jié)系統(tǒng)參數(shù)時,數(shù)碼管光標太快以致調(diào)節(jié)的時候觀察困難,原因是刷新數(shù)碼管太快。解決的方法是在相應數(shù)據(jù)更該時,才開始刷新數(shù)碼管內(nèi)容。</p><p><b>  設計總結(jié)</b></p><p>  在整個設計過程中,充分發(fā)揮人的主觀能動性

40、,自主學習,學到了許多沒學到的知識。較好的完成了作品,達到了預期的目的,完了最初的設想。但是在做板時由于之前考慮的不夠周全,時鐘芯片沒有加到上拉電阻,由于是做好了板把元件焊上去才發(fā)現(xiàn)的,只能在板的后面把3個上拉電阻焊上去,所以導致了整塊板的看起來不是很美觀。通過這一次的經(jīng)驗我意識到了對電路的設計、布局要先有一個好的構(gòu)思,而且要認真仔細的檢查各個功能模塊的具體情況,確保不遺留什么元件,才做出美觀、大方的電路板。程序編寫中,先研究各個功能模

41、塊的程序,包括時鐘模塊的程序,溫度模塊的程序,不懂的就通過查資料或者請教老師和同學來解決,然后再整理好這些程序,最終完成了能實現(xiàn)整個設計要求的程序。在此次設計中,知道了做凡事要有一顆平常的心,不要想著走捷徑,也練就了我們的耐心和細心,做什么事都要認真仔細,因為細節(jié)決定成敗??傊@次設計使我的能力得到了全方位的提高。</p><p><b>  參考文獻</b></p><

42、;p>  [1]沙占友 王彥明 孟志永. 單片機外圍電路設計[M]. 北京: 電子工業(yè)出版社,2003,1</p><p>  [2]李建忠. 單片機原理及應用(第二版) [M]. 西安: 西安電子科技大學出版社,2008,2</p><p>  [3]譚浩強.C程序設計(第三版) [M]. (清華大學出版社)2006.11</p><p>  [4]求是科技

43、. 單片機典型模塊設計實例導航[M]. 北京: 人民郵電出版社,2004</p><p>  [5]華成英 童詩白.模擬電子技術(shù)基礎(第四版) [M]. (高等教育出版社)2006.1</p><p>  [6]繆家鼎 徐文娟 牟同升. 光電技術(shù)[M]. 浙江大學出版社,1996.3</p><p>  [7]吳大正.電路基礎(第二版)(西安電子科技大學出版社)20

44、00.7</p><p>  [8]袁小平.電子技術(shù)綜合設計教程(第一版)(機械工業(yè)出版社)2008.4</p><p>  [9]康華光, 鄒壽彬,電子技術(shù)基礎數(shù)字部分(第四版) 北京:高等教育出版社 1999</p><p>  [10]杜膚生, 數(shù)字集成電路應用精粹,北京:人民郵電出版社 2001</p><p>  [1

45、1]陳大欽,電子技術(shù)基礎實驗(第二版),北京:高等教育出版社 2000</p><p>  [12]全國大學生電子設計競賽組委會,第五界全國大學生電子設計競賽獲獎作品選編.2001.北京理工大學出版社, 2003</p><p>  [13]中國計量出版社組編,新編電子電路大全, 北京:中國計量出版社, 2001.1</p><p>  [14]葛汝明,

46、《電子技術(shù)實驗與課程設計》,山東: 山東大學出版社 2004 </p><p>  [15]周永金,《 模擬電子技術(shù)及應用 》,西安:陜西國防學院電子教研室 2005</p><p>  [16]吳瑋瑋, PROTEL 99簡明應用教程 ,西安:陜西國防學院電子教研室 2006</p><p>  [17]任元,吳勇,《 常用電子元器件簡明手冊

47、》,北京:工業(yè)出版社 2000 </p><p>  [18]程路,鄭毅,向先波,PROTEL 99SE 電路板設計與制作,人民郵電出版社  2007</p><p><b>  致謝</b></p><p>  這次的設計和論文是在各位老師的悉心指導下完成的。你們嚴肅的科學態(tài)度,嚴謹?shù)闹螌W精神,精益求精的工作作風,深深地感染和激勵著我

48、。從課題的選擇到項目的最終完成,你們都始終給予我細心的指導和不懈的支持。在此謹向老師們致以誠摯的謝意和崇高的敬意。 在此,我還要感謝在一起愉快的度過大學三年的09級電子班的同學和老師們,是你們的幫助和支持,我才能克服一個一個的困難和疑惑,直至本文的順利完成。</p><p>  最后,衷心感謝在百忙之中抽出寶貴時間對此論文進行評閱與審議的老師們。感謝學院給我提供了一個展現(xiàn)自己的舞臺,給我一次難得煅煉的機

49、會,使得我的動手能力和專業(yè)技能都有了很大的提高。</p><p><b>  附錄</b></p><p><b>  附錄A:程序清單</b></p><p>  //********DS18B20 temp controller**********************************************

50、***</p><p>  #include <reg52.h></p><p>  #include <intrins.h></p><p>  #include <iic.h> //_nop_();延時函數(shù)用</p><p>  #define u

51、char unsigned char</p><p>  #define uint unsigned int</p><p>  sbit DQ=P1^3; //溫度輸入口</p><p>  sbit IO=P1^5; //繼電器輸出口 </p><p>  s

52、bit bp=P1^4; </p><p>  uint h; </p><p>  uint temp,set;</p><p>  uint count,flag;</p><p>  uchar set1[3]={0};</p>&l

53、t;p>  sbit k1=P1^0;</p><p>  sbit k2=P1^1;</p><p>  sbit k3=P1^2;</p><p>  //**************溫度小數(shù)部分用查表法***********//</p><p>  uchar code ditab[16]=</p&g

54、t;<p>  {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};</p><p><b>  //</b></p><p>  uchar code dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82

55、,0xf8,0x80,0x90,0xff,0xbf};</p><p>  //共陽LED段碼表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮

56、" "-" </p><p>  uchar code dis_8[12]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,</p><p>  0xFF,0x3F};</p><p>  //帶小數(shù)點共陰LED段碼表 "0" &q

57、uot;1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" </p><p>  uchar data temp_data[2]={0x00,0x00};

58、 //讀出溫度暫放</p><p>  uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //顯示單元數(shù)據(jù),共4個數(shù)據(jù)和一個運算暫用</p><p>  /*****************11us延時函數(shù)*************************/</p><p>  voi

59、d delay(uint t)</p><p><b>  {</b></p><p>  for (;t>0;t--);</p><p><b>  }</b></p><p>  void delay2(uchar x)</p><p><b>  {&l

60、t;/b></p><p>  uchar a,b;</p><p>  for(a=0;a<20;a++)</p><p>  { for(b=x;b>0;b--); }</p><p><b>  }</b></p><p>  /****************顯示掃描函數(shù)

61、***************************/</p><p>  void scan()</p><p><b>  {</b></p><p>  P0=dis_7[display[2]];//數(shù)據(jù)顯示 </p><p>  P2=0Xfb;

62、 </p><p>  delay(250);</p><p>  P0=dis_8[display[1]];//小數(shù)點顯示</p><p>  P2=0Xfd; </p><p>  delay(250);</p><p>  P0=dis_7[display[0]];//數(shù)據(jù)顯示

63、 </p><p>  P2=0Xfe; </p><p>  delay(250);</p><p><b>  P0=0XFF;</b></p><p><b>  P2=0XFF;</b></p><p><

64、;b>  }</b></p><p>  /****************DS18B20復位函數(shù)************************/</p><p>  void ow_reset(void)</p><p><b>  {</b></p><p>  char presence=1;&

65、lt;/p><p>  while(presence)</p><p><b>  {</b></p><p>  while(presence)</p><p><b>  {</b></p><p>  DQ=1;_nop_();_nop_();//從高拉倒低</p&g

66、t;<p>  DQ=0; </p><p>  delay(50); //550 us</p><p>  DQ=1; </p><p>  delay(6);

67、 //66 us</p><p>  presence=DQ; //presence=0 復位成功,繼續(xù)下一步</p><p><b>  } </b></p><p>  delay(45); //延時500 us</p><p>  presence=~DQ;

68、 </p><p><b>  }</b></p><p>  DQ=1; //拉高電平</p><p><b>  }</b></p><p>  /****************DS18B20寫命令函數(shù)************************/<

69、;/p><p>  //向1-WIRE 總線上寫1個字節(jié)</p><p>  void write_byte(uchar val)</p><p><b>  { </b></p><p><b>  uchar i;</b></p><p>  for(i=8;i>0;i

70、--)</p><p><b>  {</b></p><p>  DQ=1;_nop_();_nop_(); //從高拉倒低</p><p>  DQ=0;_nop_();_nop_();_nop_();_nop_(); //5 us</p><p>  DQ=val&0x0

71、1; //最低位移出</p><p>  delay(6); //66 us</p><p>  val=val/2; //右移1位</p><p><b>  }</b><

72、/p><p><b>  DQ=1;</b></p><p><b>  delay(1);</b></p><p><b>  }</b></p><p><b>  //</b></p><p>  /***************

73、*DS18B20讀1字節(jié)函數(shù)************************/</p><p>  //從總線上取1個字節(jié)</p><p>  uchar read_byte(void)</p><p><b>  {</b></p><p><b>  uchar i;</b></p>

74、<p>  uchar value=0;</p><p>  for(i=8;i>0;i--)</p><p><b>  {</b></p><p>  DQ=1;_nop_();_nop_();</p><p>  value>>=1;</p><p>  DQ

75、=0;_nop_();_nop_();_nop_();_nop_(); //4 us</p><p>  DQ=1;_nop_();_nop_();_nop_();_nop_(); //4 us</p><p>  if(DQ)value|=0x80;</p><p>  delay(6);

76、 //66 us</p><p><b>  }</b></p><p><b>  DQ=1;</b></p><p>  return(value);</p><p><b>  }</b></p><p><b&g

77、t;  //</b></p><p>  /****************讀出溫度函數(shù)************************/</p><p><b>  //</b></p><p>  uint read_temp()</p><p><b>  {</b></p&

78、gt;<p>  ow_reset(); //總線復位</p><p>  delay(200);</p><p>  write_byte(0xcc); //發(fā)命令</p><p>  write_byte(0x44); //發(fā)轉(zhuǎn)換命令</p><p&g

79、t;  ow_reset(); </p><p><b>  delay(1);</b></p><p>  write_byte(0xcc); //發(fā)命令</p><p>  write_byte(0xbe);</p><p>  temp_data[0]=read_byte(); //讀溫

80、度值的第字節(jié)</p><p>  temp_data[1]=read_byte(); //讀溫度值的高字節(jié)</p><p>  temp=temp_data[1];</p><p>  temp<<=8; </p><p>  tem

81、p=temp|temp_data[0]; // 兩字節(jié)合成一個整型變量。</p><p>  return temp; //返回溫度值</p><p><b>  }</b></p><p><b>  //</b></p><p>  /*********

82、*******溫度數(shù)據(jù)處理函數(shù)************************/</p><p>  //二進制高字節(jié)的低半字節(jié)和低字節(jié)的高半字節(jié)組成一字節(jié),這個</p><p>  //字節(jié)的二進制轉(zhuǎn)換為十進制后,就是溫度值的百、十、個位值,而剩</p><p>  //下的低字節(jié)的低半字節(jié)轉(zhuǎn)化成十進制后,就是溫度值的小數(shù)部分</p><p&g

83、t;  /********************************************************/</p><p>  void work_temp(uint tem)</p><p><b>  {</b></p><p>  uchar n=0;</p><p>  if(tem>63

84、48) // 溫度值正負判斷</p><p>  {tem=65536-tem;n=1;} // 負溫度求補碼,標志位置1</p><p>  display[4]=tem&0x0f; // 取小數(shù)部分的值</p><p>  display[0]=ditab[displ

85、ay[4]]; // 存入小數(shù)部分顯示值</p><p>  display[4]=tem>>4; // 取中間八位,即整數(shù)部分的值</p><p>  display[3]=display[4]/100; // 取百位數(shù)據(jù)暫存</p><p>  display[2]=display[4]/10%10; //

86、 取十位數(shù)據(jù)暫存</p><p>  DQ=display[4]/10%10;</p><p>  display[1]=display[4]%10; // 取個位數(shù)據(jù)暫存</p><p>  /******************符號位顯示判斷**************************/</p><p>  if(!disp

87、lay[3]) </p><p><b>  {</b></p><p>  display[3]=0x0a; //最高位為0時不顯示</p><p><b>  }</b></p><p>  if(n){display[3]=0x0b;} //負溫度時最高位顯示&q

88、uot;-"</p><p><b>  }</b></p><p><b>  //</b></p><p>  //********************************************************</p><p>  void beep(uchar x)

89、</p><p><b>  {uchar i;</b></p><p>  for(i=x;i>0;i--)</p><p><b>  {</b></p><p>  unsigned int j=400;</p><p>  while(j--)</p>

90、;<p><b>  {bp=~bp;</b></p><p>  delay2(2);}</p><p>  delay2(100); </p><p><b>  }</b></p><p><b>  }</b></p><p>  

91、//*********************************************************</p><p>  void disp_set()</p><p><b>  {</b></p><p>  P0=dis_7[set1[2]];//數(shù)據(jù)顯示 </p>&

92、lt;p>  P2=0Xfb; </p><p>  delay(250);</p><p>  P0=dis_8[set1[1]];//小數(shù)點顯示</p><p>  P2=0Xfd; </p><p>  delay(250);</p><p>

93、  P0=dis_7[set1[0]];//數(shù)據(jù)顯示 </p><p>  P2=0Xfe; </p><p>  delay(250);</p><p><b>  }</b></p><p>  ///*****************************

94、******************************</p><p>  void key_scan()</p><p><b>  {</b></p><p><b>  if(k1==0)</b></p><p>  {while(k1==0);</p><p>

95、<b>  flag++;</b></p><p>  if(flag==2)</p><p><b>  flag=0;}</b></p><p>  if(flag==1)</p><p><b>  {</b></p><p>  while(k1

96、==1)</p><p><b>  {</b></p><p><b>  if(k2==0)</b></p><p>  { delay(50);</p><p><b>  if(k2==0)</b></p><p>  { delay(10000

97、);</p><p><b>  set++;</b></p><p>  if(set==1000)</p><p><b>  set=0;</b></p><p><b>  }</b></p><p><b>  }</b>

98、</p><p><b>  if(k3==0)</b></p><p>  { delay(50);</p><p><b>  if(k3==0)</b></p><p>  { delay(10000);</p><p><b>  set--;</b

99、></p><p>  if(set==-1)</p><p><b>  set=999;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  set1[2]=set/100;</p&

100、gt;<p>  set1[1]=set%100/10;</p><p>  set1[0]=set%100%10;</p><p>  disp_set();</p><p><b>  }</b></p><p>  write(2,set1[2]);</p><p>  del

101、ay2(250);</p><p>  write(1,set1[1]);</p><p>  delay2(250);</p><p>  write(0,set1[0]);</p><p>  delay2(250); </p><p><b>  }</b></p><p

102、><b>  }</b></p><p>  //****************************************************</p><p>  void bijiao()</p><p><b>  {</b></p><p>  count=(display[

103、2]*100)+(display[1]*10)+display[0]; </p><p>  if(count>set) </p><p>  {IO=0;//啟動繼電器 </p><p><b>  beep(1);}</b></p><p><b>  else </b&

104、gt;</p><p><b>  IO=1; </b></p><p><b>  }</b></p><p>  /****************主函數(shù)************************/</p><p>  void main()</p><p>&l

105、t;b>  {</b></p><p>  set1[0]=read(0);</p><p>  set1[1]=read(1);</p><p>  set1[2]=read(2);</p><p>  set=set1[2]*100+set1[1]*10+set1[0];</p><p>  fo

106、r(h=0;h<4;h++) //開機顯示"0000"</p><p>  {display[h]=0;} </p><p>  ow_reset(); //開機先轉(zhuǎn)換一次</p><p>  write_byte(0xcc); //Skip ROM&l

107、t;/p><p>  write_byte(0x44); //發(fā)轉(zhuǎn)換命令</p><p>  for(h=0;h<100;h++) //開機顯示"0000"</p><p><b>  {scan();}</b></p><p><b>  w

108、hile(1)</b></p><p>  { key_scan();</p><p>  work_temp(read_temp()); //處理溫度數(shù)據(jù) //不啟動繼電器 </p><p>  if(display[3]==0x0a)</p><p>  {scan(); &l

109、t;/p><p>  bijiao();}</p><p><b>  else</b></p><p><b>  IO=1;</b></p><p><b>  //顯示溫度值</b></p><p><b>  }</b><

110、/p><p><b>  }</b></p><p><b>  //</b></p><p>  //***********************結(jié)束**************************//</p><p><b>  附錄B:電路圖</b></p>

溫馨提示

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

評論

0/150

提交評論