基于單片機的智能溫控系統(tǒng)課程設計_第1頁
已閱讀1頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  單片機課程設計</b></p><p>  基于單片機的智能溫控系統(tǒng)</p><p>  學 院: ****** </p><p>  專業(yè)班級: ****** </p><p>  學 號: ******

2、 </p><p>  學生姓名: ****** </p><p>  指導教師: ****** </p><p><b>  目錄</b></p><p>  第一章 緒論- 1 -</p><p>  1.1 課

3、題背景- 1 -</p><p>  1.2 課題研究意義- 2 -</p><p>  1.3 課題的任務- 2 -</p><p>  第二章 方案的選擇- 3 -</p><p>  2.1 引言- 3 -</p><p>  2.2.1 硬件方案設計- 3 -</p><p>

4、;  2.2.2 軟件方案設計- 4 -</p><p>  第三章 硬件設計- 4 -</p><p>  3.1 單片機IAP15F2K61S2單元- 4 -</p><p>  3.2 顯示單元- 6 -</p><p>  3.3 溫度傳感器DS18B20單元- 7 -</p><p>  3.3.1

5、 DS18B20溫度傳感器特性- 7 -</p><p>  3.3.2 引腳介紹- 8 -</p><p>  3.3.3 工作原理- 9 -</p><p>  3.3.4 工作時序圖- 11 -</p><p>  第四章 軟件設計- 14 -</p><p>  4.1 軟件開發(fā)工具的選擇- 14

6、-</p><p>  4.2 智能溫控系統(tǒng)軟件實現(xiàn)- 15 -</p><p>  4.2.1 初始化子程序- 15 -</p><p>  4.2.2 溫度轉(zhuǎn)換- 16 -</p><p>  4.2.3 DS18B20寫子程序- 17 -</p><p>  4.2.4 DS18B20讀子程序- 18

7、-</p><p>  第五章 系統(tǒng)調(diào)試- 18 -</p><p>  第六章 心得與總結(jié)- 19 -</p><p>  附錄:程序代碼- 20 -</p><p><b>  第一章  緒論</b></p><p><b>  1.1 課題背景</b>&

8、lt;/p><p>  在人類的生活環(huán)境中,溫度扮演著極其重要的角色。無論你生活在哪里,從事什么工作,無時無刻不在與溫度打著交道。自18世紀工業(yè)革命以來,工業(yè)發(fā)展對是否能掌握溫度有著絕對的聯(lián)系。在冶金、鋼鐵、石化、水泥、玻璃、醫(yī)藥等等行業(yè),可以說幾乎80%的工業(yè)部門都不得不考慮著溫度的因素。</p><p>  溫度對于工業(yè)如此重要,由此推進了溫度傳感器的發(fā)展。</p><

9、p>  傳感器主要大體經(jīng)過了三個發(fā)展階段:模擬集成溫度傳感器。該傳感器是采用硅半導體集成工藝制成,因此亦稱硅傳感器或單片集成溫度傳感器。此種傳感器具有功能單一(僅測量溫度)、測溫誤差小、價格低、響應速度快、傳輸距離遠、體積小、微功耗等,適合遠距離測溫、控溫,不需要進行非線性校準,外圍電路簡單。它是目前在國內(nèi)外應用最為普遍的一種集成傳感器,典型產(chǎn)品有AD590、AD592、TMP17、LM135等;模擬集成溫度控制器。模擬集成溫度控

10、制器主要包括溫控開關、可編程溫度控制器,典型產(chǎn)品有LM56、AD22105和MAX6509。某些增強型集成溫度控制器(例如TC652/653)中還包含了A/D轉(zhuǎn)換器以及固化好的程序,這與智能溫度傳感器有某些相似之處。但它自成系統(tǒng),工作時并不受微處理器的控制,這是二者的主要區(qū)別;智能溫度傳感器。能溫度傳感器(亦稱數(shù)字溫度傳感器)是在20世紀90年代中期問世的。它是微電子技術(shù)、計算機技術(shù)和自動測試技術(shù)(ATE)的結(jié)晶。智能溫度傳感器內(nèi)部都包

11、含溫度傳感器、A/D轉(zhuǎn)換器、信號處理器、存儲器(或寄存器)和接口電路。有的產(chǎn)品還帶多路選擇器、中央控制器(CPU)、隨機存取存儲器(R</p><p>  進入21世紀后,溫度傳感器正朝著高精度、多功能、總線標準化、高可靠性及安全性、開發(fā)虛擬傳感器和網(wǎng)絡傳感器、研制單片測溫系統(tǒng)等高科技的方向迅速發(fā)展。</p><p>  目前市場主要存在單點和多點兩種溫度測量儀表。對于單點溫測儀表,主要采

12、用傳統(tǒng)的模擬集成溫度傳感器,其中又以熱電阻、熱電偶等傳感器的測量精度高,測量范圍大,而得到了普遍的應用。此種產(chǎn)品測溫范圍大都在-200℃~800℃之間,分辨率12位,最小分辨溫度在0.001~0.01之間。自帶LED顯示模塊,顯示4位到16位不等。有的儀表還具有存儲功能,可存儲幾百到幾千組數(shù)據(jù)。該類儀表可很好的滿足單個用戶單點測量的需要。多點溫度測量儀表,相對與單點的測量精度有一定的差距,雖然實現(xiàn)了多路溫度的測控,但價格昂貴。</

13、p><p>  針對目前市場的現(xiàn)狀,本課題提出了一個智能溫控系統(tǒng)的設想。</p><p>  1.2 課題研究意義</p><p>  隨著科學技術(shù)的不斷進步與發(fā)展,溫度控制在工業(yè)控制、電子測溫計、醫(yī)療儀器、家用電器等各種溫度控制系統(tǒng)中廣泛應用,且由過去的單點測量向多測量發(fā)展。目前溫度傳感器有模擬和數(shù)字兩類傳感器,為了克服模擬傳感器與微處理器接口時需要信號調(diào)理電路和A/

14、D轉(zhuǎn)換器的弊端,大多數(shù)多點測溫控制系統(tǒng)采用數(shù)字傳感器,并大大方便了系統(tǒng)的設計。比較有代表性的數(shù)字溫度傳感器有DS18B20、MAX6575、DS1722、MAX6635、SMT160-30等。</p><p>  在傳統(tǒng)的溫度測量系統(tǒng)設計中,往往采用模擬技術(shù)進行設計,這樣就不可避免地遇到諸如引線誤差補償、多點測量中的切換誤差和信號調(diào)理電路的誤差等問題;而其中某一環(huán)節(jié)處理不當,就可能造成整個系統(tǒng)性能的下降。隨著現(xiàn)代

15、科學技術(shù)的飛速發(fā)展,特別是大規(guī)模集成電路設計技術(shù)的發(fā)展,微型化、集成化、數(shù)字化正成為傳感器發(fā)展的一個重要方向。美國Dallas半導體公司推出的數(shù)字溫度傳感器DS18B20,具有獨特的單總線接口,僅需要占用一個通用I/0端口即可完成與微處理器的通信;在-10~+85℃ 溫度范圍內(nèi)具有0.5℃ 精度;用戶可編程設定9~12位的分辨率。以上特性使得DS18B20非常適用于構(gòu)建高精度、多點溫度測量系統(tǒng)。</p><p>

16、<b>  1.3 課題的任務</b></p><p>  本課題主要是實現(xiàn)對溫度進行多點同時測量并準確顯示。整個系統(tǒng)由單片機控制,具體要求如下:</p><p>  要求運用DS18B20溫度傳感器讀出溫度。</p><p>  要求數(shù)碼管實時顯示DS18B20讀出的溫度,溫度精確到0.5℃。</p><p>  要求

17、單片機可以手動調(diào)節(jié)溫控的最高溫度和最低溫度。</p><p>  要求單片機可自行控制溫度:</p><p>  ①溫度小于20度,加熱指示燈亮,蜂鳴器報警。</p><p> ?、跍囟却笥?0度并且小于25度,加熱指示燈亮,蜂鳴器不報警。</p><p> ?、蹨囟却笥?5度,加熱指示燈滅,蜂鳴器報警。</p><p&g

18、t;<b>  第二章 方案的選擇</b></p><p><b>  2.1 引言</b></p><p>  采用一種是用以IAP15F2K61S2單片機為核心的單片機控制方案。選用單片機IAP15F2K61S2芯片作為本設計的核心元件,利用單片機靈活的編程設計和豐富的IO端口,及其控制的準確性,實現(xiàn)基本的密碼鎖功能。在單片機的外圍電路外接輸

19、入鍵盤用于密碼的輸入和一些功能的控制,外接數(shù)碼管顯示器用于顯示作用。</p><p>  2.2.1 硬件方案設計</p><p>  本系統(tǒng)采用m2t板子,運用到的主要硬件設備:</p><p>  1.IAP15F2K61S2芯片:采用宏晶公司最新STC15系列IAP15F2K61S2。</p><p>  2. CH452芯片:它是數(shù)碼

20、管顯示驅(qū)動和鍵盤掃描控制芯片。</p><p>  3. 數(shù)碼管顯示器:顯示實時溫度。</p><p>  4. DS18B20溫控傳感器:讀出溫度并傳遞溫度信號。</p><p>  5. 蜂鳴器:用作警報,提示溫度過高或者過低。</p><p>  6. LED燈:用于指示加熱還是未加熱狀態(tài)。</p><p>  

21、在硬件設計過程中,充分利用各部分的功能,實現(xiàn)智能溫控系統(tǒng)。</p><p>  2.2.2 軟件方案設計</p><p>  本設計程序的采取C語言進行編寫。</p><p><b>  硬件設計</b></p><p>  本設計的硬件設計包括單片機單元IAP15F2K61S2、顯示單元(實時溫度顯示 )、溫度傳感器D

22、S18B20單元、按鍵單元。</p><p>  3.1 單片機IAP15F2K61S2單元</p><p>  1.采用宏晶公司最新STC15系列IAP15F2K61S2芯片。ISP/IAP,在系統(tǒng)可編程/在應用可編程,無需編程器,無需仿真器??僧敺抡嫫魇褂?。</p><p>  2.增強型8051CPU,1T,單時鐘/機器周期,速度比普通8051快8-12倍&l

23、t;/p><p>  3.61K字節(jié)片內(nèi)片內(nèi)Flash程序存儲器,擦寫次數(shù)10萬次以上4.片內(nèi)大容量2048字節(jié)的SRAM</p><p>  5.大容量片內(nèi)EEPROM,擦寫次數(shù)10萬次數(shù)以上</p><p>  6.共8通道10位高速ADC,速度可達30萬次/秒,3路PWM還可當3路D/A使用。</p><p>  7.共3通道捕獲/比較單元

24、(CCP/PWM/PCA)</p><p>  8.內(nèi)部高可靠復位,8級可選復位門檻電壓,徹底省掉外部復位電路</p><p>  9.內(nèi)部高精度R/C時鐘,內(nèi)部時鐘從5MHz~35MHz可選,相當于普通8051的60MHz~420MHz</p><p>  10.兩組高速異步串行通信端口(可同時使用),可在5組管腳之間進行切換,分時復用可當5組串口使用。</

25、p><p>  11.一組高速異步串行通信端口SPI。</p><p>  12.各種接口擴展齊全。</p><p>  13.一根優(yōu)質(zhì)USB線實現(xiàn)系統(tǒng)供電、程序下載、通信功能。</p><p>  引腳圖以及各引腳功能簡單介紹如下:</p><p><b>  VCC:供電電壓</b></p&

26、gt;<p><b>  GND:接地;</b></p><p>  P0口:P0口為一個8位漏級開路雙向I/O口,每個管腳可吸收8TTL門電流。當P1口的管腳寫“1”時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FLASH編程時,P0口作為原碼輸入口,當FLASH進行校驗時,P0輸出原碼,此時P0外部電位必須被拉高。</p&g

27、t;<p>  P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入“1”后,電位被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。</p><p>  P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P

28、2口被寫“1”時,其管腳電位被內(nèi)部上拉電阻拉高,且作為輸入。作為輸入時,P2口的管腳電位被外部拉低,將輸出電流,這是由于內(nèi)部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉的優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。</p><p>

29、  P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入時,由于外部下拉為低電平,P3口將輸出電流(ILL),也是由于上拉的緣故。同時P3口同時為閃爍編程和編程校驗接收一些控制信號。</p><p>  RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高平時間。</p><p>

30、;  ALE / PROG :當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的低位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令時ALE才起作用。另

31、外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。</p><p>  PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取址期間,每個機器周期PSEN兩次有效。但在訪問內(nèi)部部數(shù)據(jù)存儲器時,這兩次有效的PSEN信號將不出現(xiàn)。</p><p>  EA/VPP:當EA保持低電平時,訪問外部ROM;注意加密方式1時,EA將內(nèi)部鎖定為RESET;當EA端保持高電平時,訪問

32、內(nèi)部ROM。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p>  XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。</p><p>  XTAL2:來自反向振蕩器的輸出。</p><p><b>  3.2 顯示單元</b></p><p><b>  1.數(shù)碼管原理圖

33、</b></p><p>  2.數(shù)碼管顯示部分使用四個四位一體LED數(shù)碼管,LED顯示器是由LED發(fā)光二極管發(fā)展過來的一種顯示器件,是發(fā)光二極管的改型。LED是發(fā)光二極管的簡稱,是一種將電能轉(zhuǎn)換成光能的設備。本身也是一種光源。LED顯示器是由發(fā)光二極管排列組成的顯示器件。它采用低電壓掃描驅(qū)動,具有:</p><p>  耗電少、使用壽命長、成本低、故障少、視角大、可視距離遠等

34、特點。此外,它的響應時間短(一般不超過0.1us),亮度也比較高。它的缺點是工作電流比較大,每一段的工作電流在10mA左右。其中每位數(shù)碼管是由8個發(fā)光二極管演變而來,其中7個發(fā)光二極管構(gòu)成7筆字形,另一個構(gòu)成小數(shù)點,稱為8段LED。8段LED數(shù)碼管是利用7個LED(發(fā)光二極管)外加一個小數(shù)點的LED組合而成的顯示設備,可以顯示0~9等10個數(shù)字和小數(shù)點,使用非常廣泛。</p><p>  它的外觀圖如下所示:&l

35、t;/p><p>  運用此類數(shù)碼管顯示密碼。</p><p>  3.3 溫度傳感器DS18B20單元</p><p>  DS18B20是美國DSLLAS半導體公司推出的第一篇支持“一線總線”接口的溫度傳感器,它具有微型化、低功耗、高性能、抗干擾能力強、易配微處理器等優(yōu)點,可直接將溫度轉(zhuǎn)化成串型數(shù)字信號供處理器處理。</p><p>  3.

36、3.1 DS18B20溫度傳感器特性</p><p>  適應電壓范圍寬,電壓范圍在3.0~5.5V,在寄生電源方式下可有數(shù)據(jù)線供電。</p><p>  獨特的單線接口方式,它與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通信。</p><p>  支持多點組網(wǎng)功能,多個DS18B20可以并聯(lián)在唯一的三線上,實現(xiàn)組網(wǎng)多點測溫。</p&g

37、t;<p>  在使用中不需要任何外圍元件,全部傳感器元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。</p><p>  測溫范圍-55℃~+125℃,在-10℃~+85℃時精度為±0.5℃。</p><p>  可編程分辨率為9~12位,對應的可分辨率溫度分別為0.5℃,0.25℃,0.125℃和0.0625℃,可實現(xiàn)高精度測溫。</p><

38、p>  在9位分辨率時,最多在93.78ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字;12位分辨率時,最多在750ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,顯示速度快。</p><p>  測量結(jié)果直接輸出數(shù)字溫度信號,以“一線總線”串行送給CPU,同時可傳送CRC校驗碼,具有極強的抗干擾糾錯能力。</p><p>  負壓特性。電源極性接反時,芯片不會因發(fā)熱而燒毀,但不能正常工作。</p><p>

39、;<b>  2.應用范圍</b></p><p>  冷凍庫、糧倉、儲罐、電信機房、電力機房、電纜線槽等測溫和控制領域。</p><p>  軸瓦、缸體、紡織、空調(diào)等狹小空間工業(yè)設備測溫和控制。</p><p>  汽車空調(diào)、冰箱、冷柜以及中低緯度干燥箱等。</p><p>  供熱、制冷管道熱量計量、中央空調(diào)分戶熱能

40、計量等。</p><p>  3.3.2 引腳介紹</p><p>  圖3.5 DS18B20實物圖</p><p>  DS18B20有兩種封裝:三角TO-92直插式(用的最多、最普遍的封裝)和八角SOIC貼片式,封裝引腳見圖3.6。表3.2.1列出了DS18B20的引腳定義。</p><p> ?。╝)DS18B20 To-92

41、 (b)DS18B20八角SOIC</p><p>  圖3.6 DS18B20引腳封裝圖</p><p>  表3.2.1 DS18B20引腳定義</p><p>  3.3.3 工作原理</p><p>  首先我們來看控制DS18B20的指令:</p><p>  33H—讀ROM。讀DS

42、18B20溫度傳感器ROM的編碼(即64位地址)。</p><p>  55H—匹配ROM。發(fā)出此命令之后,接著發(fā)出64位ROM編碼,訪問單總線上與該編碼相對應的DS18B20并使之作出響應,為下一步對該DS18B20的讀/寫做準備。</p><p>  F0H—搜索ROM。用于確定掛接在同一總線上DS18B20的個數(shù),識別64位ROM地址,為操作個器件做好準備。</p>&

43、lt;p>  CCH—跳過ROM。忽略64為ROM地址,直接向18B20發(fā)溫度轉(zhuǎn)換命令,適用于一個從機工作。</p><p>  ECH—告警搜索命令。執(zhí)行后只有溫度超過設定值上限或下限的芯片才做出響應。</p><p>  以上這些指令設計的存儲器是64位光刻ROM,表3.2.2列出了它的含義。</p><p>  表3.2.2 64位光刻ROM各位定義&

44、lt;/p><p>  64位光刻ROM中的序列號是出廠前被光刻好的,它可以看做該DS18B20的地址序列碼。其各位排列順序是:開始8位為產(chǎn)品類型標號,接下來48位是該DS18B20自身的序列號,最后8位是前面56位的CRC循環(huán)冗余校驗碼(CR=X8+X5+X4+1)。光刻ROM的作用是使每一個DS18B20都各不相同,這樣就可以實現(xiàn)一條總線上掛接多個DS18B20的目的。</p><p> 

45、 下面介紹以上幾條指令的用法。當主機需要對眾多在線DS18B20中的某一個進行操作時,首先應將主機逐個與DS18B20掛接,讀出其序列號;然后再將所有的DS18B20掛接到總線上,單片機發(fā)出匹配ROM命令(55H),緊接著主機提供的64位序列(包括DS18B20的48位序列號)之后的操作就是針對該DS18B20的。</p><p>  如果主機只對一個DS18B20進行操作,就不需要讀取ROM編碼以及匹配ROM編

46、碼了,只要用跳過ROM(CCH)命令,就可以進行如下溫度轉(zhuǎn)換和讀取操作。</p><p>  44H—溫度轉(zhuǎn)換。啟動DS18B20進行溫度轉(zhuǎn)換,12位轉(zhuǎn)換時最長為750ms(9位為93.75ms)。結(jié)果存入內(nèi)部9字節(jié)的RAM中。</p><p>  BEH—讀暫存器。讀內(nèi)部RAM中9字節(jié)的溫度數(shù)據(jù)。</p><p>  4EH—寫暫存器。發(fā)出向內(nèi)部RAM的2、3字節(jié)

47、寫上、下限溫度數(shù)據(jù)命令,緊跟該命令之后,是傳送兩字節(jié)的數(shù)據(jù)。</p><p>  48H—復制暫存器。將RAM中第2,3字節(jié)的內(nèi)容復制到E2ROM中。</p><p>  B8H—重調(diào)E2ROM中內(nèi)容回復到RAM中的第3,4字節(jié)。</p><p>  B4H—讀供電方式。讀DS18B20的供電模式。寄生供電時,DS18B20發(fā)送0;外接電源供電時,DS18B20發(fā)送

48、1。</p><p>  以上這些指令涉及的存儲器為高速暫存器RAM和可電擦出E2ROM,見表3.2.3。</p><p>  表3.2.3 高速暫存器RAM</p><p>  高速暫存器RAM由9個字節(jié)的存儲器組成。第0~1字節(jié)是溫度的顯示位;第2和第3個字節(jié)是復制的TH和TL,同時第2和第3個字節(jié)的數(shù)字可以更新;第4個字節(jié)是配置寄存器,同時第4個字節(jié)的數(shù)字可

49、以更新;第5,6,7三個字節(jié)的保留的??呻姴脸鯡2ROM又包括溫度觸發(fā)器TH和TL,以及一個配置寄存器。</p><p>  表3.2.4列出了溫度數(shù)據(jù)在高速暫存器RAM的第0和第1個字節(jié)中的存儲格式。</p><p>  表3.2.4 溫度數(shù)據(jù)存儲格式</p><p>  DS18B20在出廠時默認配置為12位,其中最高位為符號位,即溫度值共11位,單片機在讀取

50、數(shù)據(jù)時,一次會讀2字節(jié)共16位,讀完后將低11位的二進制數(shù)轉(zhuǎn)化為十進制數(shù)后再乘以0.0625便為所測的實際溫度值。另外,還需要判斷溫度的正負。前5個數(shù)字為符號位,這5位同時變化,我們只需要判斷11位就可以了。前5位為1時,讀取的溫度為負值,且測到的數(shù)值需要取反加1再乘以0.0625才可得到實際溫度值。前5位為0時,讀取的溫度為正值,且溫度為正值時,只要將測得的數(shù)值乘以0.0625即可得到實際溫度值。</p><p&g

51、t;  3.3.4 工作時序圖</p><p> ?、?初始化時序如圖3.8</p><p>  圖3.8 初始化時序</p><p>  先將數(shù)據(jù)線置高電平1。</p><p>  延時(該時間要求不是很嚴格,但是要盡可能短一點)。</p><p>  數(shù)據(jù)線拉到低電平0。</p><p> 

52、 延時750us(該時間范圍可以在480us~960us)。</p><p>  數(shù)據(jù)線拉到高電平1。</p><p>  延時等待。如果初始化成功則在15~60us內(nèi)產(chǎn)生一個有DS18B20返回的低電平0,據(jù)該狀態(tài)可以確定它的存在。但是應注意,不能無限地等待,不然會使程序進入死循環(huán),所以要進行超時判斷。</p><p>  若CPU讀到數(shù)據(jù)線上的低電平0后,還要進

53、行延時,其延時的時間從發(fā)出高電平算起(第5)步的時間算起)最少要480us。</p><p>  將數(shù)據(jù)線再次拉到高電平1后結(jié)束。</p><p>  ② DS18B20寫數(shù)據(jù)時序圖如圖3.9</p><p>  圖3.9 寫數(shù)據(jù)時序圖</p><p>  數(shù)據(jù)線先置低電平0。</p><p>  延時確定的時間為1

54、5us。</p><p>  按從低位到高位的順序發(fā)送數(shù)據(jù)(一次只發(fā)送一位)。</p><p>  延時時間為45us。</p><p>  將數(shù)據(jù)線拉高到高電平1。</p><p>  重復1)~5)步驟,直到發(fā)送完整個字節(jié)。</p><p>  最后將數(shù)據(jù)線拉高到1。</p><p> ?、?/p>

55、 DS18B20讀數(shù)據(jù)時序圖如圖3.10</p><p>  圖3.10 讀數(shù)據(jù)時序圖</p><p><b>  將數(shù)據(jù)線拉高到1。</b></p><p><b>  延時2us。</b></p><p><b>  將數(shù)據(jù)線拉低到0。</b></p>&l

56、t;p><b>  延時6us。</b></p><p><b>  將數(shù)據(jù)線拉高到1。</b></p><p><b>  延時4us。</b></p><p>  讀數(shù)據(jù)線的狀態(tài)位,并進行數(shù)據(jù)處理。</p><p><b>  延時30us。</b&g

57、t;</p><p>  重復1)~7)步驟,直到讀取完一個字節(jié)。</p><p><b>  3.3 按鍵單元</b></p><p>  本次智能溫控系統(tǒng)設計的按鍵單元電路有四個按鍵,功能分別是:</p><p>  K1鍵:模式選擇選擇</p><p> ?、?模式一:智能控制溫度</

58、p><p> ?、?模式二:選擇最高溫度調(diào)節(jié)</p><p> ?、?模式三:選擇最低溫度調(diào)節(jié)</p><p>  K2鍵:加位鍵。可對最高溫度和最低溫度進行加調(diào)整。 </p><p>  K3鍵:減位鍵??蓪ψ罡邷囟群妥畹蜏囟冗M行減調(diào)整。</p><p>  K4鍵:智能溫控鍵。</p><p>

59、<b>  第四章 軟件設計</b></p><p>  4.1 軟件開發(fā)工具的選擇</p><p>  要使單片機系統(tǒng)按照人的意圖辦事,需設法讓人與計算機對話,并聽從人的指揮。程序設計語言是實現(xiàn)人機交換信息的最基本工具,可分為機器語言、匯編語言和高級語言。</p><p>  機器語言用二進制編碼表示每一條指令,是計算機能直接識別和

60、執(zhí)行的語言。用機器語言編寫的程序成為機器語言程序或者指令程序(機器碼程序)。因為機器只能識別和執(zhí)行這種機器碼程序,所以又稱它為目標程序。用機器語言編寫程序不易記憶、不易查錯、不易修改。</p><p>  為了克服機器語言的上述缺點,可采用有一定含義的符號,即指令助記符來表示,一般都采用某些有關的英文單詞的縮寫。這樣就出現(xiàn)了另一種程序語言—匯編語言。</p><p>  匯編語言是用助記符

61、、符號和數(shù)字等來表示指令的程序語言,容易理解和記憶,它與機器語言指令是一一對應的。匯編語言不像高級語言(如BASIC)那樣通用型強,而是屬于某種計算機所獨有,與計算機的內(nèi)部硬件結(jié)構(gòu)密切相關。用匯編語言編寫的程序稱為匯編語言程序。</p><p>  以上兩種語言都是低級語言。盡管匯編語言有不少優(yōu)點,但它仍存在著機器語言的某些缺陷:與CPU的硬件結(jié)構(gòu)密切相關,不同的CPU其匯編語言是不同的。這使得匯編語言程序不能移

62、植,使用不便;其次,要使用匯編語言進行程序設計必須了解所使用CPU硬件的結(jié)構(gòu)與性能,對程序設計人員有較高的要求。為此,又出現(xiàn)了對單片機進行編程的高級語言,如PL\M,C等。</p><p>  Keil 4是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。 &

63、lt;/p><p>  Keil 4軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil 4生成的目標代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。</p><p>  經(jīng)分析綜合得知,本課題采用C語言進行編程。</p><p>  

64、4.2 智能溫控系統(tǒng)軟件實現(xiàn)</p><p>  系統(tǒng)軟件設計主要包括系統(tǒng)程序和流程圖,根據(jù)整個系統(tǒng)的要求,完成溫度的測量與控制必須經(jīng)過以下幾個步驟:單片機接受傳感器的溫度信號,并通過CH452數(shù)碼管驅(qū)動數(shù)碼管顯示出來,單片機掃描鍵盤,接受控制信號,并將溫度顯示出來,若溫度不在范圍內(nèi)則發(fā)出報警。</p><p>  系統(tǒng)主程序流程圖如圖4.1。</p><p>  

65、4.2.1 初始化子程序</p><p>  DS18B20初始化程序嚴格按照DS18B20的時序來編寫,微處理器開始發(fā)送一個復位脈沖(在480us~960us之間),接著數(shù)據(jù)線釋放拉到高電平1,如圖4.2所示。 </p><p>  圖4.2 初始化子程序流程圖</p><p>  4.2.2 溫度轉(zhuǎn)換</p><

66、p>  由三片DS18B20是串接在不同的I/O,讀取溫度的子是程序獨立分開,但工作原理一樣。</p><p>  以單個為例,首先調(diào)用DS18B20初始化子程序?qū)λM行初始化,然后發(fā)跳過匹配ROM命令,接著發(fā)溫度轉(zhuǎn)換命令完成溫度轉(zhuǎn)換,該命令主要是完成溫度的A/D轉(zhuǎn)換,讀取溫度程序是在轉(zhuǎn)換結(jié)束后才能讀取當前溫度值。其它兩片工作原理一樣。工作流程圖如圖4.3。</p><p>  圖4

67、.3 溫度轉(zhuǎn)換流程圖</p><p>  4.2.3 DS18B20寫子程序</p><p>  當主機把數(shù)據(jù)線從高邏輯電平拉低至邏輯電平時產(chǎn)生寫時間片,有兩種類型的寫時間片,寫1時間片和寫0時間片,所有時間片必須有最短為60微妙的持續(xù)期。在各寫周期之間必須有最短為1us的恢復時間。在I/O口線高電平變?yōu)榈碗娖胶驞S18B20在15us到60us之間對I/O采樣,如果是高電平則寫1,低

68、電平寫0。流程圖如圖4.5所示。</p><p>  圖4.5 寫子程序流程圖</p><p>  4.2.4 DS18B20讀子程序</p><p>  從DS18B20讀數(shù)據(jù)時單片機產(chǎn)生讀時間片,當主機把數(shù)據(jù)線從邏輯高電平拉到低電平時產(chǎn)生讀時間片,數(shù)據(jù)線必須保持在邏輯電平至少1微妙,來自DS18B20的輸出數(shù)據(jù)在讀時間段下降沿之后15微妙有效,因此為了讀出從讀時

69、間段開始算起15微妙的狀態(tài)單片機必須停止把I/O引腳驅(qū)動拉低至低電平,在讀時間段結(jié)束時I/O引腳經(jīng)過外部的上拉電阻拉回至高電平,所有讀時間段的最短持續(xù)周期限為60微妙,各個讀時間片之間必須有最短為1微妙的恢復時間,把主機采樣時間定在15微妙期間的末尾系統(tǒng)時序關系就有最大的余地。</p><p>  單片機從DS18B20中讀取數(shù)據(jù)是一位一位的讀的,沒讀完一位的數(shù)據(jù)到單片機的特定單元A,A左移一次與B向或,直至DS

70、18B20的數(shù)據(jù)全部移到B中,到此單片機就對DS18B20完成了讀字節(jié)操作。讀數(shù)據(jù)流程圖如圖4.6所示。</p><p>  圖4.6 讀子程序流程圖</p><p><b>  第五章 系統(tǒng)調(diào)試</b></p><p>  在調(diào)試前,先對電路板進行細致的檢查,通過萬用表的測量,觀察有無短路或斷路情況。加電后如果發(fā)現(xiàn)有些芯片迅速發(fā)熱,應立即斷

71、電檢查電路。電源電路板應有良好的穩(wěn)壓特性,保證系統(tǒng)各芯片的正常工作,為此,應仔細測量電源板的各電壓輸出,檢驗是否滿足系統(tǒng)設計要求。硬件調(diào)試離不開軟件的配合,通常需要做一些簡單的測試程序來確定電路的工作情況,以此判斷問題所在。</p><p>  各模塊焊接完成后及時用萬用表進行測量,測量應連接的點是否正確短接。顯示模塊,可用歐姆表(內(nèi)部含電源)進行測試,將表筆正極接數(shù)碼管共陽端,負表筆依次接abcdefgh,觀察

72、數(shù)碼管是否正常顯示,如不正常,檢查焊接情況。上電后,測量各芯片引腳電壓,與理論值相比較,如不同,檢查硬件電路。</p><p><b>  第六章 心得與總結(jié)</b></p><p>  在工業(yè)生產(chǎn)和日常生活中,對溫度控制系統(tǒng)的要求,主要是保證溫度在一定溫度范圍內(nèi)變化,穩(wěn)定性好,不振蕩,對系統(tǒng)的快速性要求不高。在本次課設中簡單分析了單片機溫度控制系統(tǒng)設計過程及實現(xiàn)方法

73、。本系統(tǒng)的測溫范圍為-55℃—125℃,溫度檢測系統(tǒng)根據(jù)用戶設定的溫度范圍完成一定范圍的溫度控制。本單片機的時鐘最高可達12M,I/O口可達32個,高的時鐘頻率和豐富的I/O,都為我們實現(xiàn)電路功能提供了非常有利的條件。同時也因為開發(fā)環(huán)境友好,易用,方便,大大加快本系統(tǒng)設計開發(fā)。</p><p>  總結(jié)在本次設計中,我采用IAP15F2K61S2芯片為核心器件,設計出了可調(diào)節(jié)的智能溫控系統(tǒng),能夠?qū)崿F(xiàn)自動溫控,手動

74、調(diào)節(jié)最高溫度和最低溫度的功能,更加方便的智能調(diào)節(jié)。</p><p>  完成了實驗要求的基本功能,初步學習了如何使用c語言編寫程序,實驗設備模擬電梯運行,實現(xiàn)了一些基本功能,以及實現(xiàn)一些簡單功能有了更準確的認識,更深刻的了解,加強了對理論課所學的理論知識的理解,了解了設計一個簡單系統(tǒng)的基本流程,加深了對單片機的認識,從硬件到軟件,從設計到調(diào)試。常用編程設計思路技巧的掌握方面有一定加強,但是還有不少問題需要改進。對

75、系統(tǒng)的設計,主要的思路和想法,編譯語言的易讀性,規(guī)范性,實驗操作的簡潔性等方面還有很大提高空間。</p><p>  在這次課設過程中,起初我只想讓板子實現(xiàn)溫度智能控制,軟件設置了溫控范圍為20-25度,但在后來一次一次的調(diào)試中我發(fā)現(xiàn),如果能讓板子實現(xiàn)溫控范圍可以人為設定,將更加豐富智能溫控系統(tǒng)的功能,于是經(jīng)過調(diào)制,最終得到了我所設想的全部功能。</p><p>  通過這次單片機的學習,

76、我感覺我的理論知識和實踐能力都有了很顯著的提高,比如說編寫程序的時候遇到了一些問題,或者說寫的程序運行不了,我就會查找大量的資料,找同學來幫助解決這些問題,用一些耿合適的指令來實現(xiàn)課題要求的功能,從寫程序到調(diào)試電路,我付出了很大的努力。同時也更深入的了解到單片機以及單片機編寫語言的博大精深。我在實踐中得到了很大快樂,我知道我的專業(yè)知識的掌握上還是遠遠不夠的,我還要更加努力去學習,充實自己的理論知識,提高自己的實踐能力。</p>

77、;<p><b>  附錄:程序代碼</b></p><p>  #include <reg51.h></p><p>  #include <math.h></p><p>  #include <intrins.h></p><p>  #define uchar u

78、nsigned char // 0 ~255</p><p>  #define uint unsigned int // 0 ~ 65536</p><p>  #define ulong unsigned long</p><p>  /*****

79、****************ch452操作命令*********************************/</p><p>  #define CH452_NOP 0x0000 // 空操作</p><p>  #define CH452_RESET 0x0201 // 復位</p><p> 

80、 #define CH452_LEVEL 0x0100 // 加載光柱值,需另加7位數(shù)據(jù)</p><p>  #define CH452_CLR_BIT 0x0180 // 段位清0,需另加6位數(shù)據(jù)</p><p>  #define CH452_SET_BIT 0x01C0 // 段位置1,需另加6位數(shù)據(jù)<

81、/p><p>  #define CH452_SLEEP 0x0202 // 進入睡眠狀態(tài)</p><p>  #define CH452_LEFTMOV 0x0300 // 設置移動方式-左移</p><p>  #define CH452_LEFTCYC 0x0301 // 設置移動方式-左

82、循環(huán)</p><p>  #define CH452_RIGHTMOV 0x0302 // 設置移動方式-右移</p><p>  #define CH452_RIGHTCYC 0x0303 // 設置移動方式-右循環(huán) </p><p>  #define CH452_SELF_BCD 0x0380

83、 // 自定義BCD碼,需另加7位數(shù)據(jù)</p><p>  #define CH452_SYSOFF 0x0400 // 關閉顯示、關閉鍵盤</p><p>  #define CH452_SYSON1 0x0401 // 開啟顯示</p><p>  #define CH452_SYSON2 0x04

84、03 // 開啟顯示、鍵盤</p><p>  #define CH452_SYSON2W 0x0423 // 開啟顯示、鍵盤, 真正2線接口</p><p>  #define CH452_NO_BCD 0x0500 // 設置默認顯示方式,可另加3位掃描極限</p><p>  #define C

85、H452_BCD 0x0580 // 設置BCD譯碼方式,可另加3位掃描極限</p><p>  #define CH452_TWINKLE 0x0600 // 設置閃爍控制,需另加8位數(shù)據(jù)</p><p>  #define CH452_GET_KEY 0x0700 // 獲取按鍵,返回按鍵代碼</p>

86、<p>  #define CH452_DIG0 0x0800 // 數(shù)碼管位0顯示,需另加8位數(shù)據(jù)</p><p>  #define CH452_DIG1 0x0900 // 數(shù)碼管位1顯示,需另加8位數(shù)據(jù)</p><p>  #define CH452_DIG2 0x0a00 //

87、 數(shù)碼管位2顯示,需另加8位數(shù)據(jù)</p><p>  #define CH452_DIG3 0x0b00 // 數(shù)碼管位3顯示,需另加8位數(shù)據(jù)</p><p>  #define CH452_DIG4 0x0c00 // 數(shù)碼管位4顯示,需另加8位數(shù)據(jù)</p><p>  #define CH452_DIG

88、5 0x0d00 // 數(shù)碼管位5顯示,需另加8位數(shù)據(jù)</p><p>  #define CH452_DIG6 0x0e00 // 數(shù)碼管位6顯示,需另加8位數(shù)據(jù)</p><p>  #define CH452_DIG7 0x0f00 // 數(shù)碼管位7顯示,需另加8位數(shù)據(jù)</p>&l

89、t;p>  /****************************************************************/</p><p>  sbit ch452_load = P3^3; //串行命令加載,上升延激活</p><p>  sbit ch452_dout = P2^7; //鍵值數(shù)據(jù)輸入,接ch45

90、1數(shù)據(jù)輸出 </p><p>  sbit ch452_din = P2^6; //串行數(shù)據(jù)輸出,接CH451的數(shù)據(jù)輸人</p><p>  sbit ch452_dclk = P2^5; //串行數(shù)據(jù)時鐘上升延激活</p><p>  sbit shuchu=P3^1; //加熱標志&

91、lt;/p><p>  sbit beep=P1^7; //蜂鳴器</p><p>  uint wendu;</p><p>  uchar moshi;</p><p>  uchar display_data[4]; </p><p>  uint tmax=250;

92、 //初始最高溫度</p><p>  uint tmin=200; //初始最低溫度</p><p>  void delay(uint z)</p><p>  { uint a,b;</p><p>  for(a=z;a>0;a--)</p>&

93、lt;p>  for(b=120;b>0;b--); }</p><p>  code uchar no_BCD[16]={0xBD,0x18,0xD5, //0,1,2,</p><p>  0xD9,0x78,0xE9, //3,4,5,</p><p>  0xED

94、,0x98,0xFD,0xF9, //6,7,8,9 </p><p>  0xFC,0x6D,0xA5,0x5D,0xE5,0xE4 //A,B,C,D,E,F}; </p><p>  uchar ch452_key=0; //存放鍵盤中斷中讀取的鍵值</p><p>  uint counter

95、 = 0;</p><p>  uchar key=0x00; </p><p>  sbit DQ=P1^3; //定義DS18B20總線I/O</p><p>  void Delay_DS18B20(int num); </p><p>  /************************

96、*********初始化DS18B20**************************/ </p><p>  void Init_DS18B20()</p><p><b>  {</b></p><p>  unsigned char x;</p><p>  DQ=1;

97、 //DQ復位</p><p>  Delay_DS18B20(8); //稍做延時</p><p>  DQ = 0; //單片機將DQ拉低</p><p>  Delay_DS18B20(80); //精確延時,大于480us</p&g

98、t;<p>  DQ = 1; //拉高總線</p><p>  Delay_DS18B20(14);</p><p>  x = DQ; //稍做延時后,如果x=0則初始化成功,x=1則初始化失敗</p><p>  Delay_DS18B20(20);</p><

99、;p><b>  }</b></p><p>  /**********************************延時子程序*****************************/</p><p>  void Delay_DS18B20(int num)</p><p><b>  {</b></p

100、><p><b>  uchar yy;</b></p><p>  while(num--)</p><p>  { for(yy=6;yy>0;yy--)</p><p>  { _nop_(); } </p><p><b>  } </b></p>

101、<p><b>  }</b></p><p>  /************************************寫一個字節(jié)***************************/</p><p>  void WriteOneChar(unsigned char dat)</p><p><b>  {<

102、;/b></p><p>  unsigned char i=0;</p><p>  for (i=8; i>0; i--)</p><p>  { DQ = 0;</p><p>  DQ = dat&0x01;</p><p>  Delay_DS18B20(5);</p>

103、<p><b>  DQ = 1;</b></p><p><b>  dat>>=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*****讀一個字節(jié)*****/&

104、lt;/p><p>  unsigned char ReadOneChar(void)</p><p><b>  {</b></p><p>  unsigned char i=0;</p><p>  unsigned char dat = 0;</p><p><b>  EA=0;&

105、lt;/b></p><p>  for (i=8;i>0;i--)</p><p>  { DQ = 0; // 給脈沖信號</p><p><b>  dat>>=1;</b></p><p>  DQ = 1; //

106、給脈沖信號</p><p><b>  if(DQ)</b></p><p>  dat|=0x80;</p><p>  Delay_DS18B20(4);}</p><p><b>  EA=1;</b></p><p>  return(dat);</p>

107、<p><b>  }</b></p><p>  /************************************讀取溫度*****************************/</p><p>  unsigned int ReadTemperature(void) //讀取溫度并轉(zhuǎn)換</p><p><b

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

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

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

111、;<=8;</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

112、>  }</b></p><p>  /***************************寫命令時序************************************/</p><p>  void ch452_write(uint command) //定義一無符號整型變量存儲12字節(jié)的命令字</p><p><b>

113、  {</b></p><p><b>  uchar i;</b></p><p>  ch452_load=0; //命令開始 </p><p>  for(i=0;i<12;i++) //送入12位數(shù)據(jù),低位在前</p>

114、<p>  { </p><p>  ch452_din=command&1;</p><p>  ch452_dclk=0;</p><p>  command>>=1;</p><p>  ch452_dclk=1; //上升沿有效

115、</p><p><b>  }</b></p><p>  ch452_load=1; //上升沿加載數(shù)據(jù)</p><p><b>  }</b></p><p>  /******************************************

116、***********************************/</p><p>  /*******************************刷新數(shù)碼管************************************/</p><p>  void refresh_SMG()</p><p><b>  {</b>&l

117、t;/p><p>  if(moshi==0)//模式0,顯示實時溫度</p><p>  { display_data[0] =wendu/1000; //轉(zhuǎn)換 數(shù)碼管顯示</p><p>  display_data[1] =wendu/100%10;</p><p>  display_data[2] =wendu/10%

溫馨提示

  • 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

提交評論