版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 單片機(jī)課程設(shè)計(jì)</b></p><p> 基于單片機(jī)的智能溫控系統(tǒng)</p><p> 學(xué) 院: ****** </p><p> 專業(yè)班級(jí): ****** </p><p> 學(xué) 號(hào): ******
2、 </p><p> 學(xué)生姓名: ****** </p><p> 指導(dǎo)教師: ****** </p><p><b> 目錄</b></p><p> 第一章 緒論- 1 -</p><p> 1.1 課
3、題背景- 1 -</p><p> 1.2 課題研究意義- 2 -</p><p> 1.3 課題的任務(wù)- 2 -</p><p> 第二章 方案的選擇- 3 -</p><p> 2.1 引言- 3 -</p><p> 2.2.1 硬件方案設(shè)計(jì)- 3 -</p><p>
4、; 2.2.2 軟件方案設(shè)計(jì)- 4 -</p><p> 第三章 硬件設(shè)計(jì)- 4 -</p><p> 3.1 單片機(jī)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 工作時(shí)序圖- 11 -</p><p> 第四章 軟件設(shè)計(jì)- 14 -</p><p> 4.1 軟件開發(fā)工具的選擇- 14
6、-</p><p> 4.2 智能溫控系統(tǒng)軟件實(shí)現(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)境中,溫度扮演著極其重要的角色。無論你生活在哪里,從事什么工作,無時(shí)無刻不在與溫度打著交道。自18世紀(jì)工業(yè)革命以來,工業(yè)發(fā)展對(duì)是否能掌握溫度有著絕對(duì)的聯(lián)系。在冶金、鋼鐵、石化、水泥、玻璃、醫(yī)藥等等行業(yè),可以說幾乎80%的工業(yè)部門都不得不考慮著溫度的因素。</p><p> 溫度對(duì)于工業(yè)如此重要,由此推進(jìn)了溫度傳感器的發(fā)展。</p><
9、p> 傳感器主要大體經(jīng)過了三個(gè)發(fā)展階段:模擬集成溫度傳感器。該傳感器是采用硅半導(dǎo)體集成工藝制成,因此亦稱硅傳感器或單片集成溫度傳感器。此種傳感器具有功能單一(僅測(cè)量溫度)、測(cè)溫誤差小、價(jià)格低、響應(yīng)速度快、傳輸距離遠(yuǎn)、體積小、微功耗等,適合遠(yuǎn)距離測(cè)溫、控溫,不需要進(jìn)行非線性校準(zhǔn),外圍電路簡(jiǎn)單。它是目前在國(guó)內(nèi)外應(yīng)用最為普遍的一種集成傳感器,典型產(chǎn)品有AD590、AD592、TMP17、LM135等;模擬集成溫度控制器。模擬集成溫度控
10、制器主要包括溫控開關(guān)、可編程溫度控制器,典型產(chǎn)品有LM56、AD22105和MAX6509。某些增強(qiáng)型集成溫度控制器(例如TC652/653)中還包含了A/D轉(zhuǎn)換器以及固化好的程序,這與智能溫度傳感器有某些相似之處。但它自成系統(tǒng),工作時(shí)并不受微處理器的控制,這是二者的主要區(qū)別;智能溫度傳感器。能溫度傳感器(亦稱數(shù)字溫度傳感器)是在20世紀(jì)90年代中期問世的。它是微電子技術(shù)、計(jì)算機(jī)技術(shù)和自動(dòng)測(cè)試技術(shù)(ATE)的結(jié)晶。智能溫度傳感器內(nèi)部都包
11、含溫度傳感器、A/D轉(zhuǎn)換器、信號(hào)處理器、存儲(chǔ)器(或寄存器)和接口電路。有的產(chǎn)品還帶多路選擇器、中央控制器(CPU)、隨機(jī)存取存儲(chǔ)器(R</p><p> 進(jìn)入21世紀(jì)后,溫度傳感器正朝著高精度、多功能、總線標(biāo)準(zhǔn)化、高可靠性及安全性、開發(fā)虛擬傳感器和網(wǎng)絡(luò)傳感器、研制單片測(cè)溫系統(tǒng)等高科技的方向迅速發(fā)展。</p><p> 目前市場(chǎng)主要存在單點(diǎn)和多點(diǎn)兩種溫度測(cè)量?jī)x表。對(duì)于單點(diǎn)溫測(cè)儀表,主要采
12、用傳統(tǒng)的模擬集成溫度傳感器,其中又以熱電阻、熱電偶等傳感器的測(cè)量精度高,測(cè)量范圍大,而得到了普遍的應(yīng)用。此種產(chǎn)品測(cè)溫范圍大都在-200℃~800℃之間,分辨率12位,最小分辨溫度在0.001~0.01之間。自帶LED顯示模塊,顯示4位到16位不等。有的儀表還具有存儲(chǔ)功能,可存儲(chǔ)幾百到幾千組數(shù)據(jù)。該類儀表可很好的滿足單個(gè)用戶單點(diǎn)測(cè)量的需要。多點(diǎn)溫度測(cè)量?jī)x表,相對(duì)與單點(diǎn)的測(cè)量精度有一定的差距,雖然實(shí)現(xiàn)了多路溫度的測(cè)控,但價(jià)格昂貴。</
13、p><p> 針對(duì)目前市場(chǎng)的現(xiàn)狀,本課題提出了一個(gè)智能溫控系統(tǒng)的設(shè)想。</p><p> 1.2 課題研究意義</p><p> 隨著科學(xué)技術(shù)的不斷進(jìn)步與發(fā)展,溫度控制在工業(yè)控制、電子測(cè)溫計(jì)、醫(yī)療儀器、家用電器等各種溫度控制系統(tǒng)中廣泛應(yīng)用,且由過去的單點(diǎn)測(cè)量向多測(cè)量發(fā)展。目前溫度傳感器有模擬和數(shù)字兩類傳感器,為了克服模擬傳感器與微處理器接口時(shí)需要信號(hào)調(diào)理電路和A/
14、D轉(zhuǎn)換器的弊端,大多數(shù)多點(diǎn)測(cè)溫控制系統(tǒng)采用數(shù)字傳感器,并大大方便了系統(tǒng)的設(shè)計(jì)。比較有代表性的數(shù)字溫度傳感器有DS18B20、MAX6575、DS1722、MAX6635、SMT160-30等。</p><p> 在傳統(tǒng)的溫度測(cè)量系統(tǒng)設(shè)計(jì)中,往往采用模擬技術(shù)進(jìn)行設(shè)計(jì),這樣就不可避免地遇到諸如引線誤差補(bǔ)償、多點(diǎn)測(cè)量中的切換誤差和信號(hào)調(diào)理電路的誤差等問題;而其中某一環(huán)節(jié)處理不當(dāng),就可能造成整個(gè)系統(tǒng)性能的下降。隨著現(xiàn)代
15、科學(xué)技術(shù)的飛速發(fā)展,特別是大規(guī)模集成電路設(shè)計(jì)技術(shù)的發(fā)展,微型化、集成化、數(shù)字化正成為傳感器發(fā)展的一個(gè)重要方向。美國(guó)Dallas半導(dǎo)體公司推出的數(shù)字溫度傳感器DS18B20,具有獨(dú)特的單總線接口,僅需要占用一個(gè)通用I/0端口即可完成與微處理器的通信;在-10~+85℃ 溫度范圍內(nèi)具有0.5℃ 精度;用戶可編程設(shè)定9~12位的分辨率。以上特性使得DS18B20非常適用于構(gòu)建高精度、多點(diǎn)溫度測(cè)量系統(tǒng)。</p><p>
16、<b> 1.3 課題的任務(wù)</b></p><p> 本課題主要是實(shí)現(xiàn)對(duì)溫度進(jìn)行多點(diǎn)同時(shí)測(cè)量并準(zhǔn)確顯示。整個(gè)系統(tǒng)由單片機(jī)控制,具體要求如下:</p><p> 要求運(yùn)用DS18B20溫度傳感器讀出溫度。</p><p> 要求數(shù)碼管實(shí)時(shí)顯示DS18B20讀出的溫度,溫度精確到0.5℃。</p><p> 要求
17、單片機(jī)可以手動(dòng)調(diào)節(jié)溫控的最高溫度和最低溫度。</p><p> 要求單片機(jī)可自行控制溫度:</p><p> ?、贉囟刃∮?0度,加熱指示燈亮,蜂鳴器報(bào)警。</p><p> ?、跍囟却笥?0度并且小于25度,加熱指示燈亮,蜂鳴器不報(bào)警。</p><p> ?、蹨囟却笥?5度,加熱指示燈滅,蜂鳴器報(bào)警。</p><p&g
18、t;<b> 第二章 方案的選擇</b></p><p><b> 2.1 引言</b></p><p> 采用一種是用以IAP15F2K61S2單片機(jī)為核心的單片機(jī)控制方案。選用單片機(jī)IAP15F2K61S2芯片作為本設(shè)計(jì)的核心元件,利用單片機(jī)靈活的編程設(shè)計(jì)和豐富的IO端口,及其控制的準(zhǔn)確性,實(shí)現(xiàn)基本的密碼鎖功能。在單片機(jī)的外圍電路外接輸
19、入鍵盤用于密碼的輸入和一些功能的控制,外接數(shù)碼管顯示器用于顯示作用。</p><p> 2.2.1 硬件方案設(shè)計(jì)</p><p> 本系統(tǒng)采用m2t板子,運(yùn)用到的主要硬件設(shè)備:</p><p> 1.IAP15F2K61S2芯片:采用宏晶公司最新STC15系列IAP15F2K61S2。</p><p> 2. CH452芯片:它是數(shù)碼
20、管顯示驅(qū)動(dòng)和鍵盤掃描控制芯片。</p><p> 3. 數(shù)碼管顯示器:顯示實(shí)時(shí)溫度。</p><p> 4. DS18B20溫控傳感器:讀出溫度并傳遞溫度信號(hào)。</p><p> 5. 蜂鳴器:用作警報(bào),提示溫度過高或者過低。</p><p> 6. LED燈:用于指示加熱還是未加熱狀態(tài)。</p><p>
21、在硬件設(shè)計(jì)過程中,充分利用各部分的功能,實(shí)現(xiàn)智能溫控系統(tǒng)。</p><p> 2.2.2 軟件方案設(shè)計(jì)</p><p> 本設(shè)計(jì)程序的采取C語言進(jìn)行編寫。</p><p><b> 硬件設(shè)計(jì)</b></p><p> 本設(shè)計(jì)的硬件設(shè)計(jì)包括單片機(jī)單元IAP15F2K61S2、顯示單元(實(shí)時(shí)溫度顯示 )、溫度傳感器D
22、S18B20單元、按鍵單元。</p><p> 3.1 單片機(jī)IAP15F2K61S2單元</p><p> 1.采用宏晶公司最新STC15系列IAP15F2K61S2芯片。ISP/IAP,在系統(tǒng)可編程/在應(yīng)用可編程,無需編程器,無需仿真器。可當(dāng)仿真器使用。</p><p> 2.增強(qiáng)型8051CPU,1T,單時(shí)鐘/機(jī)器周期,速度比普通8051快8-12倍&l
23、t;/p><p> 3.61K字節(jié)片內(nèi)片內(nèi)Flash程序存儲(chǔ)器,擦寫次數(shù)10萬次以上4.片內(nèi)大容量2048字節(jié)的SRAM</p><p> 5.大容量片內(nèi)EEPROM,擦寫次數(shù)10萬次數(shù)以上</p><p> 6.共8通道10位高速ADC,速度可達(dá)30萬次/秒,3路PWM還可當(dāng)3路D/A使用。</p><p> 7.共3通道捕獲/比較單元
24、(CCP/PWM/PCA)</p><p> 8.內(nèi)部高可靠復(fù)位,8級(jí)可選復(fù)位門檻電壓,徹底省掉外部復(fù)位電路</p><p> 9.內(nèi)部高精度R/C時(shí)鐘,內(nèi)部時(shí)鐘從5MHz~35MHz可選,相當(dāng)于普通8051的60MHz~420MHz</p><p> 10.兩組高速異步串行通信端口(可同時(shí)使用),可在5組管腳之間進(jìn)行切換,分時(shí)復(fù)用可當(dāng)5組串口使用。</
25、p><p> 11.一組高速異步串行通信端口SPI。</p><p> 12.各種接口擴(kuò)展齊全。</p><p> 13.一根優(yōu)質(zhì)USB線實(shí)現(xiàn)系統(tǒng)供電、程序下載、通信功能。</p><p> 引腳圖以及各引腳功能簡(jiǎn)單介紹如下:</p><p><b> VCC:供電電壓</b></p&
26、gt;<p><b> GND:接地;</b></p><p> P0口:P0口為一個(gè)8位漏級(jí)開路雙向I/O口,每個(gè)管腳可吸收8TTL門電流。當(dāng)P1口的管腳寫“1”時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FLASH編程時(shí),P0口作為原碼輸入口,當(dāng)FLASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部電位必須被拉高。</p&g
27、t;<p> P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入“1”后,電位被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。</p><p> P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P
28、2口被寫“1”時(shí),其管腳電位被內(nèi)部上拉電阻拉高,且作為輸入。作為輸入時(shí),P2口的管腳電位被外部拉低,將輸出電流,這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉的優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。</p><p>
29、 P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入時(shí),由于外部下拉為低電平,P3口將輸出電流(ILL),也是由于上拉的緣故。同時(shí)P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。</p><p> RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高平時(shí)間。</p><p>
30、; ALE / PROG :當(dāng)訪問外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的低位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令時(shí)ALE才起作用。另
31、外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。</p><p> PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取址期間,每個(gè)機(jī)器周期PSEN兩次有效。但在訪問內(nèi)部部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的PSEN信號(hào)將不出現(xiàn)。</p><p> EA/VPP:當(dāng)EA保持低電平時(shí),訪問外部ROM;注意加密方式1時(shí),EA將內(nèi)部鎖定為RESET;當(dāng)EA端保持高電平時(shí),訪問
32、內(nèi)部ROM。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p> XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。</p><p> XTAL2:來自反向振蕩器的輸出。</p><p><b> 3.2 顯示單元</b></p><p><b> 1.數(shù)碼管原理圖
33、</b></p><p> 2.數(shù)碼管顯示部分使用四個(gè)四位一體LED數(shù)碼管,LED顯示器是由LED發(fā)光二極管發(fā)展過來的一種顯示器件,是發(fā)光二極管的改型。LED是發(fā)光二極管的簡(jiǎn)稱,是一種將電能轉(zhuǎn)換成光能的設(shè)備。本身也是一種光源。LED顯示器是由發(fā)光二極管排列組成的顯示器件。它采用低電壓掃描驅(qū)動(dòng),具有:</p><p> 耗電少、使用壽命長(zhǎng)、成本低、故障少、視角大、可視距離遠(yuǎn)等
34、特點(diǎn)。此外,它的響應(yīng)時(shí)間短(一般不超過0.1us),亮度也比較高。它的缺點(diǎn)是工作電流比較大,每一段的工作電流在10mA左右。其中每位數(shù)碼管是由8個(gè)發(fā)光二極管演變而來,其中7個(gè)發(fā)光二極管構(gòu)成7筆字形,另一個(gè)構(gòu)成小數(shù)點(diǎn),稱為8段LED。8段LED數(shù)碼管是利用7個(gè)LED(發(fā)光二極管)外加一個(gè)小數(shù)點(diǎn)的LED組合而成的顯示設(shè)備,可以顯示0~9等10個(gè)數(shù)字和小數(shù)點(diǎn),使用非常廣泛。</p><p> 它的外觀圖如下所示:&l
35、t;/p><p> 運(yùn)用此類數(shù)碼管顯示密碼。</p><p> 3.3 溫度傳感器DS18B20單元</p><p> DS18B20是美國(guó)DSLLAS半導(dǎo)體公司推出的第一篇支持“一線總線”接口的溫度傳感器,它具有微型化、低功耗、高性能、抗干擾能力強(qiáng)、易配微處理器等優(yōu)點(diǎn),可直接將溫度轉(zhuǎn)化成串型數(shù)字信號(hào)供處理器處理。</p><p> 3.
36、3.1 DS18B20溫度傳感器特性</p><p> 適應(yīng)電壓范圍寬,電壓范圍在3.0~5.5V,在寄生電源方式下可有數(shù)據(jù)線供電。</p><p> 獨(dú)特的單線接口方式,它與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通信。</p><p> 支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測(cè)溫。</p&g
37、t;<p> 在使用中不需要任何外圍元件,全部傳感器元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。</p><p> 測(cè)溫范圍-55℃~+125℃,在-10℃~+85℃時(shí)精度為±0.5℃。</p><p> 可編程分辨率為9~12位,對(duì)應(yīng)的可分辨率溫度分別為0.5℃,0.25℃,0.125℃和0.0625℃,可實(shí)現(xiàn)高精度測(cè)溫。</p><
38、p> 在9位分辨率時(shí),最多在93.78ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字;12位分辨率時(shí),最多在750ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,顯示速度快。</p><p> 測(cè)量結(jié)果直接輸出數(shù)字溫度信號(hào),以“一線總線”串行送給CPU,同時(shí)可傳送CRC校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能力。</p><p> 負(fù)壓特性。電源極性接反時(shí),芯片不會(huì)因發(fā)熱而燒毀,但不能正常工作。</p><p>
39、;<b> 2.應(yīng)用范圍</b></p><p> 冷凍庫(kù)、糧倉(cāng)、儲(chǔ)罐、電信機(jī)房、電力機(jī)房、電纜線槽等測(cè)溫和控制領(lǐng)域。</p><p> 軸瓦、缸體、紡織、空調(diào)等狹小空間工業(yè)設(shè)備測(cè)溫和控制。</p><p> 汽車空調(diào)、冰箱、冷柜以及中低緯度干燥箱等。</p><p> 供熱、制冷管道熱量計(jì)量、中央空調(diào)分戶熱能
40、計(jì)量等。</p><p> 3.3.2 引腳介紹</p><p> 圖3.5 DS18B20實(shí)物圖</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編碼,訪問單總線上與該編碼相對(duì)應(yīng)的DS18B20并使之作出響應(yīng),為下一步對(duì)該DS18B20的讀/寫做準(zhǔn)備。</p><p> F0H—搜索ROM。用于確定掛接在同一總線上DS18B20的個(gè)數(shù),識(shí)別64位ROM地址,為操作個(gè)器件做好準(zhǔn)備。</p>&
43、lt;p> CCH—跳過ROM。忽略64為ROM地址,直接向18B20發(fā)溫度轉(zhuǎn)換命令,適用于一個(gè)從機(jī)工作。</p><p> ECH—告警搜索命令。執(zhí)行后只有溫度超過設(shè)定值上限或下限的芯片才做出響應(yīng)。</p><p> 以上這些指令設(shè)計(jì)的存儲(chǔ)器是64位光刻ROM,表3.2.2列出了它的含義。</p><p> 表3.2.2 64位光刻ROM各位定義&
44、lt;/p><p> 64位光刻ROM中的序列號(hào)是出廠前被光刻好的,它可以看做該DS18B20的地址序列碼。其各位排列順序是:開始8位為產(chǎn)品類型標(biāo)號(hào),接下來48位是該DS18B20自身的序列號(hào),最后8位是前面56位的CRC循環(huán)冗余校驗(yàn)碼(CR=X8+X5+X4+1)。光刻ROM的作用是使每一個(gè)DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一條總線上掛接多個(gè)DS18B20的目的。</p><p>
45、 下面介紹以上幾條指令的用法。當(dāng)主機(jī)需要對(duì)眾多在線DS18B20中的某一個(gè)進(jìn)行操作時(shí),首先應(yīng)將主機(jī)逐個(gè)與DS18B20掛接,讀出其序列號(hào);然后再將所有的DS18B20掛接到總線上,單片機(jī)發(fā)出匹配ROM命令(55H),緊接著主機(jī)提供的64位序列(包括DS18B20的48位序列號(hào))之后的操作就是針對(duì)該DS18B20的。</p><p> 如果主機(jī)只對(duì)一個(gè)DS18B20進(jìn)行操作,就不需要讀取ROM編碼以及匹配ROM編
46、碼了,只要用跳過ROM(CCH)命令,就可以進(jìn)行如下溫度轉(zhuǎn)換和讀取操作。</p><p> 44H—溫度轉(zhuǎn)換。啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換,12位轉(zhuǎn)換時(shí)最長(zhǎng)為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—復(fù)制暫存器。將RAM中第2,3字節(jié)的內(nèi)容復(fù)制到E2ROM中。</p><p> B8H—重調(diào)E2ROM中內(nèi)容回復(fù)到RAM中的第3,4字節(jié)。</p><p> B4H—讀供電方式。讀DS18B20的供電模式。寄生供電時(shí),DS18B20發(fā)送0;外接電源供電時(shí),DS18B20發(fā)送
48、1。</p><p> 以上這些指令涉及的存儲(chǔ)器為高速暫存器RAM和可電擦出E2ROM,見表3.2.3。</p><p> 表3.2.3 高速暫存器RAM</p><p> 高速暫存器RAM由9個(gè)字節(jié)的存儲(chǔ)器組成。第0~1字節(jié)是溫度的顯示位;第2和第3個(gè)字節(jié)是復(fù)制的TH和TL,同時(shí)第2和第3個(gè)字節(jié)的數(shù)字可以更新;第4個(gè)字節(jié)是配置寄存器,同時(shí)第4個(gè)字節(jié)的數(shù)字可
49、以更新;第5,6,7三個(gè)字節(jié)的保留的??呻姴脸鯡2ROM又包括溫度觸發(fā)器TH和TL,以及一個(gè)配置寄存器。</p><p> 表3.2.4列出了溫度數(shù)據(jù)在高速暫存器RAM的第0和第1個(gè)字節(jié)中的存儲(chǔ)格式。</p><p> 表3.2.4 溫度數(shù)據(jù)存儲(chǔ)格式</p><p> DS18B20在出廠時(shí)默認(rèn)配置為12位,其中最高位為符號(hào)位,即溫度值共11位,單片機(jī)在讀取
50、數(shù)據(jù)時(shí),一次會(huì)讀2字節(jié)共16位,讀完后將低11位的二進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù)后再乘以0.0625便為所測(cè)的實(shí)際溫度值。另外,還需要判斷溫度的正負(fù)。前5個(gè)數(shù)字為符號(hào)位,這5位同時(shí)變化,我們只需要判斷11位就可以了。前5位為1時(shí),讀取的溫度為負(fù)值,且測(cè)到的數(shù)值需要取反加1再乘以0.0625才可得到實(shí)際溫度值。前5位為0時(shí),讀取的溫度為正值,且溫度為正值時(shí),只要將測(cè)得的數(shù)值乘以0.0625即可得到實(shí)際溫度值。</p><p&g
51、t; 3.3.4 工作時(shí)序圖</p><p> ?、?初始化時(shí)序如圖3.8</p><p> 圖3.8 初始化時(shí)序</p><p> 先將數(shù)據(jù)線置高電平1。</p><p> 延時(shí)(該時(shí)間要求不是很嚴(yán)格,但是要盡可能短一點(diǎn))。</p><p> 數(shù)據(jù)線拉到低電平0。</p><p>
52、 延時(shí)750us(該時(shí)間范圍可以在480us~960us)。</p><p> 數(shù)據(jù)線拉到高電平1。</p><p> 延時(shí)等待。如果初始化成功則在15~60us內(nèi)產(chǎn)生一個(gè)有DS18B20返回的低電平0,據(jù)該狀態(tài)可以確定它的存在。但是應(yīng)注意,不能無限地等待,不然會(huì)使程序進(jìn)入死循環(huán),所以要進(jìn)行超時(shí)判斷。</p><p> 若CPU讀到數(shù)據(jù)線上的低電平0后,還要進(jìn)
53、行延時(shí),其延時(shí)的時(shí)間從發(fā)出高電平算起(第5)步的時(shí)間算起)最少要480us。</p><p> 將數(shù)據(jù)線再次拉到高電平1后結(jié)束。</p><p> ② DS18B20寫數(shù)據(jù)時(shí)序圖如圖3.9</p><p> 圖3.9 寫數(shù)據(jù)時(shí)序圖</p><p> 數(shù)據(jù)線先置低電平0。</p><p> 延時(shí)確定的時(shí)間為1
54、5us。</p><p> 按從低位到高位的順序發(fā)送數(shù)據(jù)(一次只發(fā)送一位)。</p><p> 延時(shí)時(shí)間為45us。</p><p> 將數(shù)據(jù)線拉高到高電平1。</p><p> 重復(fù)1)~5)步驟,直到發(fā)送完整個(gè)字節(jié)。</p><p> 最后將數(shù)據(jù)線拉高到1。</p><p> ?、?/p>
55、 DS18B20讀數(shù)據(jù)時(shí)序圖如圖3.10</p><p> 圖3.10 讀數(shù)據(jù)時(shí)序圖</p><p><b> 將數(shù)據(jù)線拉高到1。</b></p><p><b> 延時(shí)2us。</b></p><p><b> 將數(shù)據(jù)線拉低到0。</b></p>&l
56、t;p><b> 延時(shí)6us。</b></p><p><b> 將數(shù)據(jù)線拉高到1。</b></p><p><b> 延時(shí)4us。</b></p><p> 讀數(shù)據(jù)線的狀態(tài)位,并進(jìn)行數(shù)據(jù)處理。</p><p><b> 延時(shí)30us。</b&g
57、t;</p><p> 重復(fù)1)~7)步驟,直到讀取完一個(gè)字節(jié)。</p><p><b> 3.3 按鍵單元</b></p><p> 本次智能溫控系統(tǒng)設(shè)計(jì)的按鍵單元電路有四個(gè)按鍵,功能分別是:</p><p> K1鍵:模式選擇選擇</p><p> ① 模式一:智能控制溫度</
58、p><p> ② 模式二:選擇最高溫度調(diào)節(jié)</p><p> ?、?模式三:選擇最低溫度調(diào)節(jié)</p><p> K2鍵:加位鍵??蓪?duì)最高溫度和最低溫度進(jìn)行加調(diào)整。 </p><p> K3鍵:減位鍵??蓪?duì)最高溫度和最低溫度進(jìn)行減調(diào)整。</p><p> K4鍵:智能溫控鍵。</p><p>
59、<b> 第四章 軟件設(shè)計(jì)</b></p><p> 4.1 軟件開發(fā)工具的選擇</p><p> 要使單片機(jī)系統(tǒng)按照人的意圖辦事,需設(shè)法讓人與計(jì)算機(jī)對(duì)話,并聽從人的指揮。程序設(shè)計(jì)語言是實(shí)現(xiàn)人機(jī)交換信息的最基本工具,可分為機(jī)器語言、匯編語言和高級(jí)語言。</p><p> 機(jī)器語言用二進(jìn)制編碼表示每一條指令,是計(jì)算機(jī)能直接識(shí)別和
60、執(zhí)行的語言。用機(jī)器語言編寫的程序成為機(jī)器語言程序或者指令程序(機(jī)器碼程序)。因?yàn)闄C(jī)器只能識(shí)別和執(zhí)行這種機(jī)器碼程序,所以又稱它為目標(biāo)程序。用機(jī)器語言編寫程序不易記憶、不易查錯(cuò)、不易修改。</p><p> 為了克服機(jī)器語言的上述缺點(diǎn),可采用有一定含義的符號(hào),即指令助記符來表示,一般都采用某些有關(guān)的英文單詞的縮寫。這樣就出現(xiàn)了另一種程序語言—匯編語言。</p><p> 匯編語言是用助記符
61、、符號(hào)和數(shù)字等來表示指令的程序語言,容易理解和記憶,它與機(jī)器語言指令是一一對(duì)應(yīng)的。匯編語言不像高級(jí)語言(如BASIC)那樣通用型強(qiáng),而是屬于某種計(jì)算機(jī)所獨(dú)有,與計(jì)算機(jī)的內(nèi)部硬件結(jié)構(gòu)密切相關(guān)。用匯編語言編寫的程序稱為匯編語言程序。</p><p> 以上兩種語言都是低級(jí)語言。盡管匯編語言有不少優(yōu)點(diǎn),但它仍存在著機(jī)器語言的某些缺陷:與CPU的硬件結(jié)構(gòu)密切相關(guān),不同的CPU其匯編語言是不同的。這使得匯編語言程序不能移
62、植,使用不便;其次,要使用匯編語言進(jìn)行程序設(shè)計(jì)必須了解所使用CPU硬件的結(jié)構(gòu)與性能,對(duì)程序設(shè)計(jì)人員有較高的要求。為此,又出現(xiàn)了對(duì)單片機(jī)進(jìn)行編程的高級(jí)語言,如PL\M,C等。</p><p> Keil 4是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。用過匯編語言后再使用C來開發(fā),體會(huì)更加深刻。 &
63、lt;/p><p> Keil 4軟件提供豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到Keil 4生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)語言的優(yōu)勢(shì)。</p><p> 經(jīng)分析綜合得知,本課題采用C語言進(jìn)行編程。</p><p>
64、4.2 智能溫控系統(tǒng)軟件實(shí)現(xiàn)</p><p> 系統(tǒng)軟件設(shè)計(jì)主要包括系統(tǒng)程序和流程圖,根據(jù)整個(gè)系統(tǒng)的要求,完成溫度的測(cè)量與控制必須經(jīng)過以下幾個(gè)步驟:?jiǎn)纹瑱C(jī)接受傳感器的溫度信號(hào),并通過CH452數(shù)碼管驅(qū)動(dòng)數(shù)碼管顯示出來,單片機(jī)掃描鍵盤,接受控制信號(hào),并將溫度顯示出來,若溫度不在范圍內(nèi)則發(fā)出報(bào)警。</p><p> 系統(tǒng)主程序流程圖如圖4.1。</p><p>
65、4.2.1 初始化子程序</p><p> DS18B20初始化程序嚴(yán)格按照DS18B20的時(shí)序來編寫,微處理器開始發(fā)送一個(gè)復(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,讀取溫度的子是程序獨(dú)立分開,但工作原理一樣。</p><p> 以單個(gè)為例,首先調(diào)用DS18B20初始化子程序?qū)λM(jìn)行初始化,然后發(fā)跳過匹配ROM命令,接著發(fā)溫度轉(zhuǎn)換命令完成溫度轉(zhuǎn)換,該命令主要是完成溫度的A/D轉(zhuǎn)換,讀取溫度程序是在轉(zhuǎn)換結(jié)束后才能讀取當(dāng)前溫度值。其它兩片工作原理一樣。工作流程圖如圖4.3。</p><p> 圖4
67、.3 溫度轉(zhuǎn)換流程圖</p><p> 4.2.3 DS18B20寫子程序</p><p> 當(dāng)主機(jī)把數(shù)據(jù)線從高邏輯電平拉低至邏輯電平時(shí)產(chǎn)生寫時(shí)間片,有兩種類型的寫時(shí)間片,寫1時(shí)間片和寫0時(shí)間片,所有時(shí)間片必須有最短為60微妙的持續(xù)期。在各寫周期之間必須有最短為1us的恢復(fù)時(shí)間。在I/O口線高電平變?yōu)榈碗娖胶驞S18B20在15us到60us之間對(duì)I/O采樣,如果是高電平則寫1,低
68、電平寫0。流程圖如圖4.5所示。</p><p> 圖4.5 寫子程序流程圖</p><p> 4.2.4 DS18B20讀子程序</p><p> 從DS18B20讀數(shù)據(jù)時(shí)單片機(jī)產(chǎn)生讀時(shí)間片,當(dāng)主機(jī)把數(shù)據(jù)線從邏輯高電平拉到低電平時(shí)產(chǎn)生讀時(shí)間片,數(shù)據(jù)線必須保持在邏輯電平至少1微妙,來自DS18B20的輸出數(shù)據(jù)在讀時(shí)間段下降沿之后15微妙有效,因此為了讀出從讀時(shí)
69、間段開始算起15微妙的狀態(tài)單片機(jī)必須停止把I/O引腳驅(qū)動(dòng)拉低至低電平,在讀時(shí)間段結(jié)束時(shí)I/O引腳經(jīng)過外部的上拉電阻拉回至高電平,所有讀時(shí)間段的最短持續(xù)周期限為60微妙,各個(gè)讀時(shí)間片之間必須有最短為1微妙的恢復(fù)時(shí)間,把主機(jī)采樣時(shí)間定在15微妙期間的末尾系統(tǒng)時(shí)序關(guān)系就有最大的余地。</p><p> 單片機(jī)從DS18B20中讀取數(shù)據(jù)是一位一位的讀的,沒讀完一位的數(shù)據(jù)到單片機(jī)的特定單元A,A左移一次與B向或,直至DS
70、18B20的數(shù)據(jù)全部移到B中,到此單片機(jī)就對(duì)DS18B20完成了讀字節(jié)操作。讀數(shù)據(jù)流程圖如圖4.6所示。</p><p> 圖4.6 讀子程序流程圖</p><p><b> 第五章 系統(tǒng)調(diào)試</b></p><p> 在調(diào)試前,先對(duì)電路板進(jìn)行細(xì)致的檢查,通過萬用表的測(cè)量,觀察有無短路或斷路情況。加電后如果發(fā)現(xiàn)有些芯片迅速發(fā)熱,應(yīng)立即斷
71、電檢查電路。電源電路板應(yīng)有良好的穩(wěn)壓特性,保證系統(tǒng)各芯片的正常工作,為此,應(yīng)仔細(xì)測(cè)量電源板的各電壓輸出,檢驗(yàn)是否滿足系統(tǒng)設(shè)計(jì)要求。硬件調(diào)試離不開軟件的配合,通常需要做一些簡(jiǎn)單的測(cè)試程序來確定電路的工作情況,以此判斷問題所在。</p><p> 各模塊焊接完成后及時(shí)用萬用表進(jìn)行測(cè)量,測(cè)量應(yīng)連接的點(diǎn)是否正確短接。顯示模塊,可用歐姆表(內(nèi)部含電源)進(jìn)行測(cè)試,將表筆正極接數(shù)碼管共陽(yáng)端,負(fù)表筆依次接abcdefgh,觀察
72、數(shù)碼管是否正常顯示,如不正常,檢查焊接情況。上電后,測(cè)量各芯片引腳電壓,與理論值相比較,如不同,檢查硬件電路。</p><p><b> 第六章 心得與總結(jié)</b></p><p> 在工業(yè)生產(chǎn)和日常生活中,對(duì)溫度控制系統(tǒng)的要求,主要是保證溫度在一定溫度范圍內(nèi)變化,穩(wěn)定性好,不振蕩,對(duì)系統(tǒng)的快速性要求不高。在本次課設(shè)中簡(jiǎn)單分析了單片機(jī)溫度控制系統(tǒng)設(shè)計(jì)過程及實(shí)現(xiàn)方法
73、。本系統(tǒng)的測(cè)溫范圍為-55℃—125℃,溫度檢測(cè)系統(tǒng)根據(jù)用戶設(shè)定的溫度范圍完成一定范圍的溫度控制。本單片機(jī)的時(shí)鐘最高可達(dá)12M,I/O口可達(dá)32個(gè),高的時(shí)鐘頻率和豐富的I/O,都為我們實(shí)現(xiàn)電路功能提供了非常有利的條件。同時(shí)也因?yàn)殚_發(fā)環(huán)境友好,易用,方便,大大加快本系統(tǒng)設(shè)計(jì)開發(fā)。</p><p> 總結(jié)在本次設(shè)計(jì)中,我采用IAP15F2K61S2芯片為核心器件,設(shè)計(jì)出了可調(diào)節(jié)的智能溫控系統(tǒng),能夠?qū)崿F(xiàn)自動(dòng)溫控,手動(dòng)
74、調(diào)節(jié)最高溫度和最低溫度的功能,更加方便的智能調(diào)節(jié)。</p><p> 完成了實(shí)驗(yàn)要求的基本功能,初步學(xué)習(xí)了如何使用c語言編寫程序,實(shí)驗(yàn)設(shè)備模擬電梯運(yùn)行,實(shí)現(xiàn)了一些基本功能,以及實(shí)現(xiàn)一些簡(jiǎn)單功能有了更準(zhǔn)確的認(rèn)識(shí),更深刻的了解,加強(qiáng)了對(duì)理論課所學(xué)的理論知識(shí)的理解,了解了設(shè)計(jì)一個(gè)簡(jiǎn)單系統(tǒng)的基本流程,加深了對(duì)單片機(jī)的認(rèn)識(shí),從硬件到軟件,從設(shè)計(jì)到調(diào)試。常用編程設(shè)計(jì)思路技巧的掌握方面有一定加強(qiáng),但是還有不少問題需要改進(jìn)。對(duì)
75、系統(tǒng)的設(shè)計(jì),主要的思路和想法,編譯語言的易讀性,規(guī)范性,實(shí)驗(yàn)操作的簡(jiǎn)潔性等方面還有很大提高空間。</p><p> 在這次課設(shè)過程中,起初我只想讓板子實(shí)現(xiàn)溫度智能控制,軟件設(shè)置了溫控范圍為20-25度,但在后來一次一次的調(diào)試中我發(fā)現(xiàn),如果能讓板子實(shí)現(xiàn)溫控范圍可以人為設(shè)定,將更加豐富智能溫控系統(tǒng)的功能,于是經(jīng)過調(diào)制,最終得到了我所設(shè)想的全部功能。</p><p> 通過這次單片機(jī)的學(xué)習(xí),
76、我感覺我的理論知識(shí)和實(shí)踐能力都有了很顯著的提高,比如說編寫程序的時(shí)候遇到了一些問題,或者說寫的程序運(yùn)行不了,我就會(huì)查找大量的資料,找同學(xué)來幫助解決這些問題,用一些耿合適的指令來實(shí)現(xiàn)課題要求的功能,從寫程序到調(diào)試電路,我付出了很大的努力。同時(shí)也更深入的了解到單片機(jī)以及單片機(jī)編寫語言的博大精深。我在實(shí)踐中得到了很大快樂,我知道我的專業(yè)知識(shí)的掌握上還是遠(yuǎn)遠(yuǎn)不夠的,我還要更加努力去學(xué)習(xí),充實(shí)自己的理論知識(shí),提高自己的實(shí)踐能力。</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 // 復(fù)位</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 // 進(jìn)入睡眠狀態(tài)</p><p> #define CH452_LEFTMOV 0x0300 // 設(shè)置移動(dòng)方式-左移</p><p> #define CH452_LEFTCYC 0x0301 // 設(shè)置移動(dòng)方式-左
82、循環(huán)</p><p> #define CH452_RIGHTMOV 0x0302 // 設(shè)置移動(dòng)方式-右移</p><p> #define CH452_RIGHTCYC 0x0303 // 設(shè)置移動(dòng)方式-右循環(huán) </p><p> #define CH452_SELF_BCD 0x0380
83、 // 自定義BCD碼,需另加7位數(shù)據(jù)</p><p> #define CH452_SYSOFF 0x0400 // 關(guān)閉顯示、關(guān)閉鍵盤</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 // 設(shè)置默認(rèn)顯示方式,可另加3位掃描極限</p><p> #define C
85、H452_BCD 0x0580 // 設(shè)置BCD譯碼方式,可另加3位掃描極限</p><p> #define CH452_TWINKLE 0x0600 // 設(shè)置閃爍控制,需另加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ù)時(shí)鐘上升延激活</p><p> sbit shuchu=P3^1; //加熱標(biāo)志&
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復(fù)位</p><p> Delay_DS18B20(8); //稍做延時(shí)</p><p> DQ = 0; //單片機(jī)將DQ拉低</p><p> Delay_DS18B20(80); //精確延時(shí),大于480us</p&g
98、t;<p> DQ = 1; //拉高總線</p><p> Delay_DS18B20(14);</p><p> x = DQ; //稍做延時(shí)后,如果x=0則初始化成功,x=1則初始化失敗</p><p> Delay_DS18B20(20);</p><
99、;p><b> }</b></p><p> /**********************************延時(shí)子程序*****************************/</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> /************************************寫一個(gè)字節(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> /*****讀一個(gè)字節(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; // 給脈沖信號(hào)</p><p><b> dat>>=1;</b></p><p> DQ = 1; //
106、給脈沖信號(hào)</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); //跳過讀序號(hào)列號(hào)的操作</p><p> WriteOneChar(0x44); //啟動(dòng)溫度轉(zhuǎn)換</p><p> Init_DS18B20();</p><p> WriteOneChar(0xCC); //跳過讀序號(hào)列號(hào)的操作</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> /***************************寫命令時(shí)序************************************/</p><p> void ch452_write(uint command) //定義一無符號(hào)整型變量存儲(chǔ)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,顯示實(shí)時(shí)溫度</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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機(jī)的水溫控制系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)--基于單片機(jī)的水溫控制系統(tǒng)
- 課程設(shè)計(jì)--基于單片機(jī)的溫控風(fēng)扇的設(shè)計(jì)
- 課程設(shè)計(jì)--基于單片機(jī)的智能澆灌系統(tǒng)設(shè)計(jì)
- 單片機(jī)水溫控制系統(tǒng)課程設(shè)計(jì)
- 單片機(jī)智能溫控器課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)的秒表系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---基于單片機(jī)的溫度控制智能電風(fēng)扇
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)的賓館智能自動(dòng)門設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---基于單片機(jī)溫度測(cè)量系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-基于gsm的智能家居系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)智能家居系統(tǒng)
- 基于單片機(jī)的智能溫控電機(jī)系統(tǒng)設(shè)計(jì)0509
- 基于單片機(jī)的智能溫控風(fēng)扇設(shè)計(jì)論文
- 基于單片機(jī)的智能溫控風(fēng)扇設(shè)計(jì)論文
- 基于單片機(jī)的智能溫控風(fēng)扇設(shè)計(jì)論文
- 基于單片機(jī)的秒表設(shè)計(jì)單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-- 基于單片機(jī)的電梯控制系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)的水位控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)的水位控制系統(tǒng)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論