版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 單片機(jī)課程設(shè)計報告書</p><p> ?。ɑ趩纹瑱C(jī)的溫度控制系統(tǒng))</p><p> 學(xué)院(系): 電子與信息工程學(xué)院 </p><p> 年級專業(yè): 電子信息工程 </p><p> 學(xué) 號: 201215256101 </p><
2、;p> 學(xué)生姓名: 張 三 </p><p> 指導(dǎo)教師: 羅 剛 </p><p> 教師職稱: 教 授
3、
4、 </p><p> 成 績:
5、 </p><p> 制作日期 2014 年 12月 20 日</p><p><b> 目錄</b></p><p> 摘要................................................................1</p><p> 引言..........
6、......................................................2</p><p> 第一章系統(tǒng)設(shè)計......................................................2</p><p> 1.1 設(shè)計任務(wù)................................................
7、.....2</p><p> 1.2 設(shè)計目的.....................................................2</p><p> 1.3 設(shè)計思路.....................................................2</p><p> 第二章 硬件系統(tǒng)設(shè)計.........
8、........................................4</p><p> 2.1系統(tǒng)方框圖.....................................................4</p><p> 2.2各部分及其實(shí)現(xiàn)的功能..........................................4</p><
9、;p> 第三章軟件設(shè)計.....................................................16</p><p> 3.1程序流程圖....................................................16</p><p> 3.2 溫度傳感器流程圖程圖............................
10、.............17</p><p> 第四章仿真與調(diào)試...................................................18</p><p> 4.1 軟件電路故障與解決辦法.......................................18</p><p> 4.2 軟件調(diào)試方法.........
11、........................................18</p><p> 4.3 仿真后,部分顯示成果.........................................19</p><p> 第五章設(shè)計總結(jié).....................................................22</p>&
12、lt;p> 第六章 參考文獻(xiàn)....................................................23</p><p> 附錄一.............................................................24</p><p> 附錄二.................................
13、............................25</p><p> 附錄三.............................................................36</p><p> 基于單片機(jī)STC89C51的溫度顯示系統(tǒng)的設(shè)計</p><p> 重慶三峽學(xué)院電子與信息工程學(xué)院 12電子信息工程(職教師資)&l
14、t;/p><p><b> 摘要:</b></p><p> 以AT89C51單片機(jī)為核心,的數(shù)字溫度測量及自動控制系統(tǒng)的設(shè)計,該溫度控制器可以實(shí)時顯示和設(shè)定溫度,實(shí)現(xiàn)對溫度的自動控制。其組成部分為:AT89S51單片機(jī)、DS18B20智能數(shù)字溫度傳感器、鍵盤與顯示電路、溫度控制電路。高精度的DS18B20溫度傳感器作為溫度檢測元件,LED數(shù)碼管并行動態(tài)顯示作為顯示電
15、路,單片機(jī)通過對信號進(jìn)行相應(yīng)處理,從而實(shí)現(xiàn)對所測溫度進(jìn)行控制。當(dāng)溫度比設(shè)定溫度小時,當(dāng)溫度大于等于設(shè)定溫度時,控制器斷開電加熱設(shè)備。此外,文中還介紹了該溫度控制器的軟件設(shè)計部分,主要模塊包括:數(shù)碼管顯示程序、按鍵處理程序、溫度信號處理程序。主程序通過調(diào)用各個上述子程序來完成所有的溫度控制器功能。在此基礎(chǔ)上本文還提出了系統(tǒng)軟硬件抗干擾措施和系統(tǒng)軟硬件及整機(jī)調(diào)試方案。 該溫度控制器具有控制方便、簡單的特點(diǎn),可以實(shí)現(xiàn)對溫度的高精度控制
16、,并且可以提高被控系統(tǒng)的技術(shù)指標(biāo)。 關(guān)鍵詞:單片機(jī) ;溫度傳感器 ;寄存器; </p><p><b> 引言</b></p><p> 隨著電子技術(shù),特別是隨大規(guī)模集成電路的產(chǎn)生而出現(xiàn)的微型計算機(jī)技術(shù)的飛速發(fā)展,人類生活發(fā)生了根本性的改變。如果說微型計算機(jī)的出現(xiàn)使現(xiàn)代科學(xué)研究得到了質(zhì)的飛躍,那么可以毫不夸張地說,單片機(jī)技術(shù)的出現(xiàn)則是給現(xiàn)代工業(yè)測控領(lǐng)域帶來了
17、一次新的技術(shù)革命。目前,單片機(jī)以其體積小、重量輕、抗干擾能力強(qiáng)、對環(huán)境要求不高、高可靠性、高性能價格比、開發(fā)較為容易,在工業(yè)控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng)、智能化儀器儀表、辦公自動化等諸多領(lǐng)域得到極為廣泛的應(yīng)用,并已走人家庭,從洗衣機(jī)、微波爐到音響、汽車,到處都可見到單片機(jī)的蹤影。因此,單片機(jī)技術(shù)開發(fā)和應(yīng)用水平已逐步成為一個國家工業(yè)發(fā)展水平的標(biāo)志之一。本課題研究的內(nèi)容就是以單片機(jī)AT89c51為主要控制元件,通過溫度傳感器DS18B20實(shí)現(xiàn)對溫
18、度的測量,并通過數(shù)碼管直接顯示所測溫度。</p><p><b> 第1章 系統(tǒng)設(shè)計</b></p><p><b> 1.1 設(shè)計任務(wù)</b></p><p> ?。?)、采用DS18B20作為溫度傳感器進(jìn)行溫度檢測。</p><p> ?。?)、對采集溫度進(jìn)行顯示(顯示溫度分辨率0.1℃
19、);采集溫度數(shù)值應(yīng)采用數(shù)字濾波措施,保證顯示數(shù)據(jù)穩(wěn)定。</p><p> ?。?)、設(shè)計相應(yīng)的溫度控制電路,根據(jù)測得的溫度情況對加熱器進(jìn)行控制,將溫度保持在設(shè)定溫度。</p><p> ?。?)、通過按鍵設(shè)置溫度上下限,超限通過LED、蜂鳴器報警。</p><p><b> 1.2 設(shè)計目的</b></p><p>
20、 (1)、通過課程設(shè)計,使我們能夠深入理解單片機(jī)系統(tǒng)的工作原理,接口電路的設(shè)計及調(diào)試方法,培養(yǎng)綜合運(yùn)用所學(xué)理論知識分析和解決實(shí)際問題的能力。</p><p> (2)、使用單片機(jī)AT89c51為主要控制元件,通過溫度傳感器DS18B20實(shí)現(xiàn)對溫度的測量,并通過LCD1602直接顯示所測溫度。</p><p> (3)、用keil軟件進(jìn)行編程與調(diào)試,利用Proteus 7 Profes
21、sional軟件進(jìn)行繪制硬件電路圖且進(jìn)行仿真。</p><p><b> 1.3 設(shè)計思路</b></p><p><b> ?。?) 方案論證</b></p><p> 本溫度控制系統(tǒng)的設(shè)計是使用單片機(jī)來控制,溫度傳感器DS18B20實(shí)現(xiàn)對溫度的測量,數(shù)碼管直接顯示實(shí)現(xiàn)。而選擇這一方法后還要進(jìn)行各個芯片的選擇。以下
22、是我在這次設(shè)計中所用的方案。</p><p><b> ?。?) 芯片的選擇</b></p><p> 采用AT89C51芯片,其為高性能CMOS 8位單片機(jī),該芯片內(nèi)含有4k bytes的可反復(fù)擦寫的只讀程序存儲器(PEROM)、128 bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM)、 32位可編程I/O口線、2個16位定時/計數(shù)器、6個中斷源、可編程串行UART通道及
23、低功耗空閑和掉電模式。因此,我們選用AT89C51。</p><p> (3) 溫度傳感器模塊的選擇方案和論證</p><p> 采用溫度傳感器DS18B20實(shí)現(xiàn)對溫度的測量。</p><p> (4) 升溫模塊和降溫模塊的選擇和論證</p><p><b> ?。?) 最終方案</b></p>&l
24、t;p> 綜上方案所述,對此次溫度控制系統(tǒng)的方案選定為: 以基于51單片機(jī)控制,將DS18b20溫度傳感器實(shí)時溫度轉(zhuǎn)化,并通過數(shù)碼管對溫度實(shí)行實(shí)時顯示,將設(shè)定溫度,通過按鍵調(diào)節(jié)溫度報警區(qū)域,實(shí)現(xiàn)對溫度在0℃-128℃控制的自動化。實(shí)驗(yàn)結(jié)果表明此結(jié)構(gòu)完全可行,溫度偏差可達(dá)0.1℃以內(nèi)。</p><p> 第2章 硬件系統(tǒng)的設(shè)計</p><p> 2.1 系統(tǒng)方框圖,見圖2.1。
25、</p><p> 根據(jù)需求,我們將系統(tǒng)分為六個模塊,信息處理模塊,溫度采集模塊、功能按鍵模塊、報警電路模塊,LED溫度顯示模,存儲模塊。</p><p> 圖2.1 系統(tǒng)方框圖</p><p> 2.2各部分及其實(shí)現(xiàn)的功能</p><p> (1)中央控制芯片STC89C51</p><p> STC89C
26、51是一種低功耗、高性能的片內(nèi)含有4KB快閃可編程/擦除只讀存儲器(FPEROM-Flash Programmable and Eraseable Read Only Memory)的8位CMOS微控制器,使用高密度、非易失存儲技術(shù)制造,并且與80C51引腳和指令系統(tǒng)完全兼容。主要性能: 與MCS-51 微控制器產(chǎn)品系列兼容。 片內(nèi)有4KB可在線重復(fù)編程的快閃擦寫存儲器 ;存儲數(shù)據(jù)保存時間為10年 ;寬工作電壓范圍:Vcc可為
27、2.7V到6V ;全靜態(tài)工作:可從0Hz至16MHz ;程序存儲器具有3級加密保護(hù) ;128*8位內(nèi)部RAM ;32條可編程I/O線 ,兩個16位定時器/計數(shù)器 ;中斷結(jié)構(gòu)具有5個中斷源和2個優(yōu)先級 ,可編程全雙工串行通道 ,空閑狀態(tài)維持低功耗和掉電狀態(tài)保存存儲內(nèi)容。</p><p> MCS-51的主要特點(diǎn)為:</p><p><b> ◆CPU為8位; </b>
28、;</p><p> ◆片內(nèi)帶振蕩器,頻率范圍為1.2~12MHz;</p><p> ◆片內(nèi)帶128字節(jié)的數(shù)據(jù)存儲器;(RAM) </p><p> ◆片內(nèi)帶4KB的Flash程序存儲器;(ROM)</p><p> ◆程序存儲器的尋址空間為64KB;(需要擴(kuò)展ROM) </p><p> ◆片外數(shù)據(jù)存儲器
29、的尋址空間為64KB;(需要擴(kuò)展RAM)</p><p> ◆128位(16字節(jié))用戶位尋址空間;(在128個字節(jié)中)</p><p> ◆18個字節(jié)特殊功能寄存器SFR(MCS————52子系列為21個); </p><p> ◆4個8位的并行I/O接口:P0、P1、P2、P3;</p><p> ◆2個優(yōu)先級別的個優(yōu)先級別的5個中
30、斷源;(高、低2個) </p><p> ◆有較強(qiáng)的位處理能力</p><p> ?。?)溫度傳感器DS18B20:</p><p> 1.DS18B20的性能特點(diǎn):</p><p> ①、采用單總線專用技術(shù),既可通過串行口線,也可通過其它I/O口線與微機(jī)接口,無須經(jīng)過其它變換,直接輸出被測溫度值(9位二進(jìn)制數(shù),含符號位)。</p
31、><p> ?、凇y溫范圍為-55℃-+125℃,測量分辨率為0.0625℃</p><p> ③、內(nèi)含64位經(jīng)過激光修正的只讀存儲器ROM</p><p> ?、?、適配各種單片機(jī)或系統(tǒng)機(jī)</p><p> ?、荨⒂脩艨煞謩e設(shè)定各路溫度的上、下限</p><p> ⑥內(nèi)含寄生電源。口較少,可節(jié)省大量的引線和邏輯電路。&
32、lt;/p><p> 2.DS18B20的內(nèi)部結(jié)構(gòu) DS18B20內(nèi)部結(jié)構(gòu)如圖2.2.1所示,主要由4部分組成:64位ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。DS18B20的管腳排列如圖2.2.2所示,DQ為數(shù)字信號輸入/輸出端;GND為電源地;VDD為外接供電電源輸入端(在寄生電源接線方式時接地)。 ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序
33、列碼,每個DS18B20的64位序列號均不相同。64位ROM的排的循環(huán)冗余校驗(yàn)碼(CRC=X8+X5+X4+1)。ROM的作用是使每一個DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個DS18B20的目的。</p><p><b> 圖2.2.</b></p><p> 圖2.3 DS18B20的管腳排列</p><p>
34、3、溫度值高字節(jié) 高低溫報警觸發(fā)器TH和TL、配置寄存器均由一個字節(jié)的EEPROM組成,使用一個存儲器功能命令可對TH、TL或配置寄存器寫入。其中配置寄存器的格式如下: </p><p> R1、R0決定溫度轉(zhuǎn)換的精度位數(shù):R1R0=“00”,9位精度,最大轉(zhuǎn)換時間為93.75ms;R1R0=“01”,10位精度,最大轉(zhuǎn)換時間為187.5ms;R1R0=“10”,11位精度,最大轉(zhuǎn)換時間為375ms;
35、R1R0=“11”,12位精度,最大轉(zhuǎn)換時間為750ms;未編程時默認(rèn)為12位精度。 高速暫存器是一個9字節(jié)的存儲器。開始兩個字節(jié)包含被測溫度的數(shù)字量信息;第3、4、5字節(jié)分別是TH、TL、配置寄存器的臨時拷貝,每一次上電復(fù)位時被刷新;第6、7、8字節(jié)未用,表現(xiàn)為全邏輯1;第9字節(jié)讀出的是前面所有8個字節(jié)的CRC碼,可用來保證通信正確。 </p><p> 4.DS18B20的工作時序 DS
36、18B20的一線工作協(xié)議流程是:初始化→ROM操作指令→存儲器操作指令→數(shù)據(jù)傳輸。其工作時序包括初始化時序、寫時序和讀時序,如圖2.2.3(a)(b)(c)所示。 </p><p><b> ?。╝)初始化時序</b></p><p><b> ?。╞)寫時序</b></p><p> (c)讀時序 圖2.4 DS
37、18B20的工作時序圖</p><p> 5.DS18B20高速暫存器共9個存儲單元,如表所示:</p><p> 4.1 以12位轉(zhuǎn)化為例說明溫度高低字節(jié)存放形式及計算:12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個高低兩個8位的RAM中,二進(jìn)制中的前面5位是符號位。如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,
38、測到的數(shù)值需要取反加1再乘于0.0625才能得到實(shí)際溫度。 </p><p> 4.2 DS18B20有六條控制命令,如表所示:</p><p> 2.3 主要電路及功能</p><p> 1.單片機(jī)的復(fù)位電路及時鐘電路</p><p> 單片機(jī)的時鐘電路有1個12M 的晶振和兩個20PF 的小電容組成,它們決定了單片機(jī)的工作時間精
39、度為1 微秒。AT89C51單片機(jī)作為整個硬件系統(tǒng)的核心,它既是協(xié)調(diào)整機(jī)工作的控制器,又是數(shù)據(jù)處理器。該單片機(jī)為51系列增強(qiáng)型8位單片機(jī),它有32個I/O口,片內(nèi)含4K FLASH工藝的程序存儲器,便于用電的方式瞬間擦除和改寫,而且價格便宜,其外部晶振為12MHz,一個指令周期為1μS。使用該單片機(jī)完全可以完成設(shè)計任務(wù),其最小系統(tǒng)主要包括:復(fù)位電路、震蕩電路。</p><p><b> 圖2.5單片機(jī)
40、模塊</b></p><p><b> 2.顯示電路</b></p><p> 四位數(shù)碼管有8位控碼和4個段控碼。數(shù)碼管分共陰極和共陽極。而我們采用的是共陽極的數(shù)碼管作為溫度控制器的顯示電路。則需要將陽極接在電源上。 </p><p> 圖2.6 顯示電路</p><p><b> 3.溫
41、度傳感器電路</b></p><p> 溫度檢測控制模擬電路圖DS18B20原件及其連線如圖溫度此傳感器上顯示的溫度同步顯示到液晶顯示器上,并有加溫,減溫按鈕。</p><p> 圖2.7溫度檢測控制模擬電路</p><p> 存儲器AT24C02</p><p> (1)AT24C02是一個2K位串行CMOS E2PRO
42、M, 內(nèi)部含有256個8位字節(jié),CATALYST公司的先進(jìn)CMOS技術(shù)實(shí)質(zhì)上減少了器件的功耗。AT24C02有一個8字節(jié)頁寫緩沖器。該器件通過IIC總線接口進(jìn)行操作,有一個專門的寫保護(hù)功能。</p><p><b> 功能描述</b></p><p> AT24C02支持I2C,總線數(shù)據(jù)傳送協(xié)議I2C,總線協(xié)議規(guī)定任何將數(shù)據(jù)傳送到總線的器件作為發(fā)送器。任何從總線接
43、收數(shù)據(jù)的器件為接收器。數(shù)據(jù)傳送是由產(chǎn)生串行時鐘和所有起始停止信號的主器件控制的。主器件和從器件都可以作為發(fā)送器或接收器,但由主器件控制傳送數(shù)據(jù)(發(fā)送或接收)的模式,由于A0、A1和A2可以組成000~111八種情況,即通過器件地址輸入端A0、A1和A2可以實(shí)現(xiàn)將最多8個AT24C02器件連接到總線上,通過進(jìn)行不同的配置進(jìn)行選擇器件。</p><p> 圖2.8 AT24c02</p><p&
44、gt; 5. 溫度上下限調(diào)節(jié)系統(tǒng)</p><p> 通過按鍵控制鍵選著調(diào)節(jié)對象,通過上升下降調(diào)節(jié)值大小,控制開關(guān),升溫開關(guān),降溫開關(guān),設(shè)置開關(guān)分別為,k1,k2,k3,開始顯示的是當(dāng)前溫度,K1開關(guān),用來控制進(jìn)入溫度上限,下限的調(diào)節(jié)界面。按k1,一次進(jìn)入三個界面。按K2為加1開關(guān),按一下,加1,k3減1開關(guān),按一下,減1。</p><p> 圖2.9 上下限調(diào)節(jié)電路</p>
45、;<p><b> 7. 報警電路系統(tǒng)</b></p><p> 通過LED指示燈的閃爍以及蜂鳴器的鳴叫實(shí)現(xiàn)報警,如果溫度超過上限高溫指示燈亮,蜂鳴器鳴叫,低于下限低溫指示燈亮,蜂鳴器鳴叫。</p><p> 圖2.10報警電路 </p><p> 第三章 軟件系統(tǒng)的設(shè)計</p><p>&
46、lt;b> 3.1程序流程圖</b></p><p> 溫度低于低溫下限,低溫報警</p><p> 3.2、AT24C02存取數(shù)據(jù)流程圖</p><p> 3.3 溫度傳感器流程圖</p><p> 第四章 仿真與調(diào)試</p><p> 4.1 軟件電路故障與解決辦法</p>
47、;<p> 1.以斷點(diǎn)或連續(xù)方式運(yùn)行時,目標(biāo)測試系統(tǒng)沒有按照規(guī)定的功能進(jìn)行操作或什么結(jié)果也沒有,可能是由于程序轉(zhuǎn)移到意外之處或在某處死循環(huán)所造成的。</p><p> 2.不響應(yīng)中斷Cpu不響應(yīng)中斷或者是不響應(yīng)某一個中斷這種錯誤的現(xiàn)象是連續(xù)運(yùn)行時不執(zhí)行中斷程序的操作。當(dāng)斷點(diǎn)在中斷入口或者中斷服務(wù)程序中時碰不到斷點(diǎn)。錯誤可能由中斷寄存器(IE、IP)的初值設(shè)置不當(dāng),使CPU沒有開放中斷或者不許某個
48、中斷源請求,或者對片內(nèi)的定時器、串行口等特殊功能的寄存器和I/O接口程序有錯誤,造成中斷沒有被激活。又或者某一中斷程序不是RET指令作為返回主程序的指令,CPU雖然已經(jīng)返回到主程序但內(nèi)部中斷狀態(tài)寄存器沒有被消除,從而不影響中斷,或者外部中斷源的硬件故障使得外部中斷請求無效。</p><p> 4.2 軟件調(diào)試方法</p><p> 軟件調(diào)試所使用的方法有:計算程序的調(diào)試方法、I/O處理
49、程序的調(diào)試法、綜合調(diào)試法等。</p><p> 1、計算程序的調(diào)試方法:</p><p> 計算程序的錯誤是一種靜態(tài)的固定的錯誤,因此主要用單拍或者斷點(diǎn)運(yùn)行方法來調(diào)試。根據(jù)計算程序的功能,事先準(zhǔn)備好一組測試數(shù)據(jù)。調(diào)試時,用仿真器寫命令。將命令數(shù)據(jù)寫入計算程序的緩沖單元,然后從計算程序開始運(yùn)行到結(jié)束,運(yùn)行結(jié)果與計算的正確數(shù)據(jù)做比較,如果對有的測試數(shù)據(jù)進(jìn)行測試沒有發(fā)現(xiàn)錯誤,則該計算程序調(diào)試
50、成功。如果發(fā)現(xiàn)結(jié)果不正確,改用單步運(yùn)行的方法找出錯誤所在。如果是計算錯誤,則需要修改重新設(shè)計程序,如果是局部的指令錯誤,修改局部程序就可以了。如果是用于測試的數(shù)據(jù)沒有全部覆蓋實(shí)際計算的原始數(shù)據(jù)的類型,調(diào)試沒有發(fā)現(xiàn)錯誤可能在系統(tǒng)運(yùn)行中暴露出來。</p><p> 2、I/O接口處理程序的調(diào)試:</p><p> 對于A/D轉(zhuǎn)換器一類的I/O接口處理程序是實(shí)時處理程序,因此一般用全速斷點(diǎn)運(yùn)
51、行方式或連續(xù)運(yùn)行方法進(jìn)行調(diào)試。</p><p><b> 3.綜合調(diào)試:</b></p><p> 在完成了各個程序模塊的調(diào)試工作之后,就可以進(jìn)行系統(tǒng)的綜合調(diào)試。綜合調(diào)試采用全速運(yùn)行或斷點(diǎn)運(yùn)行方式,這個階段的主要工作是檢測系統(tǒng)里面遺留的錯誤以及提高系統(tǒng)的動態(tài)性能和精度。在綜合調(diào)試階段,應(yīng)該注意系統(tǒng)的晶振頻率工作,使系統(tǒng)全速運(yùn)行目標(biāo)程序,實(shí)現(xiàn)預(yù)定功能技術(shù)指標(biāo)之后,就
52、可以將軟件固化,然后在運(yùn)行固化的目標(biāo)程序,成功后目標(biāo)系統(tǒng)就可以脫機(jī)運(yùn)行。</p><p> 4.3 仿真后,部分顯示成果:</p><p> 圖4.3調(diào)節(jié)溫度上下限</p><p> 4.1 調(diào)節(jié)溫度上線</p><p> 4.2 調(diào)節(jié)溫度下線</p><p> 圖4.3. 顯示當(dāng)前溫度 </p&
53、gt;<p> 圖4.4 溫度高于溫度上限,高溫報警燈亮,蜂鳴器鳴叫 </p><p> 圖4.5 溫度低于低溫下限,低溫報警燈亮,蜂鳴器鳴叫</p><p><b> 設(shè)計總結(jié)</b></p><p> 這種溫度報警器結(jié)構(gòu)簡單。工作時,溫度測量范圍為0~250ºC。當(dāng)溫度達(dá)到預(yù)定值時,立刻發(fā)出報警信號,從而防
54、止因溫度升高或過低而帶來的不必要的損失。 通過本次工程設(shè)計,又使我學(xué)到了許多書本上無法學(xué)到的知識,也使也深該體會到單片機(jī)技術(shù)應(yīng)用領(lǐng)域的廣泛,不僅使我對學(xué)過的單片機(jī)知識有了很多的鞏固,同時也對單片機(jī)這一門課程產(chǎn)生了更大的興趣。在做本次工程設(shè)計的過程中,我感觸最深的當(dāng)屬查閱大量的設(shè)計資料了。為了讓自己的設(shè)計更加完善,查閱這方面的設(shè)計資料是十分必要的,同時也是必不可少的。我們是在做單片機(jī)工程設(shè)計,但我們不是藝術(shù)家,他們可以拋開實(shí)際盡情在幻想的
55、世界里翱翔,而我們一切都要有據(jù)可依,有理可尋,不切實(shí)際的構(gòu)想永遠(yuǎn)只能是構(gòu)想,永遠(yuǎn)無法升級為設(shè)計。 </p><p> 其次,我學(xué)會了在網(wǎng)絡(luò)上查找有關(guān)本設(shè)計的各硬件的資源,其中包括:AT89C51單片機(jī)及其引腳說明、ADC0808引腳圖及其引腳功能等,為本次工程設(shè)計提供了一定的資料。經(jīng)過這次的設(shè)計,為我們以后畢業(yè)設(shè)計的制作也奠定了一定的基礎(chǔ)</p><p><b> 參考文獻(xiàn)
56、</b></p><p> [1]謝輝主編.單片機(jī)原理及應(yīng)用.化學(xué)工業(yè)出版社.2010年8月,第一版</p><p> [2]曹巧媛主編.單片機(jī)原理及應(yīng)用(第二版).北京電子工業(yè)出版社,2002</p><p> [3]何力民編.單片機(jī)高級教程.北京航空大學(xué)出版社,2000</p><p> [4]陳強(qiáng)等.傳感器技術(shù)與應(yīng)用
57、.高等教育出版社,2010</p><p> [5]王錦標(biāo),方崇智.過程計算機(jī)控制.清華大學(xué)出版社,1997:36~40</p><p> [6]胡壽松.自動控制原理,北京:國防工業(yè)出版社,2000:103—124</p><p> [7]劉伯春.智能PID調(diào)節(jié)器的設(shè)計及應(yīng)用、電子自動化,1995:(3):20~25</p><p>
58、 [8]周景潤,張麗娜.基于proteus的電路及單片機(jī)系統(tǒng)設(shè)計與仿真[M].北京:航空航天大學(xué)出版社,2006</p><p> [9]王忠飛,胥芳.MCS—51單片機(jī)原理及嵌入式系統(tǒng)應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2007</p><p> [10]趙娜,趙剛,于珍珠等.基于51單片機(jī)的溫度測量系統(tǒng)[J].微計算機(jī)信息,2007,1—2</p><p&
59、gt;<b> 附錄:</b></p><p><b> 附錄一</b></p><p><b> 系統(tǒng)整體流程圖:</b></p><p><b> 附錄二</b></p><p><b> 程序代碼:</b></p
60、><p> ;-------------------------------------------------</p><p> #include<reg52.h> </p><p> #define ui unsigned int</p><p> #define uc unsigned char //宏定義<
61、/p><p> sbit SET=P3^1; //定義調(diào)整鍵</p><p> sbit DEC=P3^2; //定義減少鍵</p><p> sbit ADD=P3^3; //定義增加鍵</p><p> sbit BEEP=P3^6; //定義蜂鳴器</p><p&g
62、t; sbit ALAM=P1^2;//定義燈光報警</p><p> sbit DQ =P3^7; //定義DS18B20總線I/O</p><p> sbit SCL=P1^6;</p><p> sbit SDA=P1^7;</p><p> sbit DIAN=P0^5; //小數(shù)點(diǎn)
63、</p><p> bit bdata shanshuo_st; //閃爍間隔標(biāo)志</p><p> bit bdata beep_st; //蜂鳴器間隔標(biāo)志 </p><p> uc x=0; //計數(shù)器</p><p> ui bai,shi,ge;</p><
64、p> uc set_st=0; //狀態(tài)標(biāo)志</p><p> char shangxian,xiaxian;</p><p> //uc code LEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};</p><p> uc code LEDData[
65、]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B};</p><p> //============================================================================================</p><p&g
66、t; //====================================DS18B20=================================================</p><p> //============================================================================================</
67、p><p> /*****延時子程序*****/</p><p> void Delay_DS18B20(int num)</p><p><b> {</b></p><p> while(num--) ;</p><p><b> }</b></p>
68、<p> void delay()//5微秒延時函數(shù)</p><p><b> { ;; }</b></p><p> void start() //開始信號</p><p><b> {</b></p><p><b> SDA=1;</b></
69、p><p><b> delay();</b></p><p><b> SCL=1;</b></p><p><b> delay();</b></p><p><b> SDA=0;</b></p><p><b>
70、; delay();</b></p><p><b> }</b></p><p> void stop() //終止信號</p><p><b> {</b></p><p><b> SDA=0;</b></p><p>&
71、lt;b> delay();</b></p><p><b> SCL=1;</b></p><p><b> delay();</b></p><p><b> SDA=1;</b></p><p><b> delay();</b
72、></p><p><b> }</b></p><p> void respons() //應(yīng)答</p><p><b> {</b></p><p><b> uc i;</b></p><p><b> SCL=1;&l
73、t;/b></p><p><b> delay();</b></p><p> while((SDA==1)&&(i<250))i++;//如果SDA為低應(yīng)答有效,或者超過一定時間默認(rèn)應(yīng)答有效</p><p><b> SCL=0;</b></p><p><
74、;b> delay();</b></p><p><b> }</b></p><p> void init24c04()//I2C總線初始化</p><p><b> {</b></p><p><b> SDA=1;</b></p>
75、<p><b> delay();</b></p><p><b> SCL=1;</b></p><p><b> delay();</b></p><p><b> }</b></p><p> void write_byte(u
76、c date)//寫操作</p><p><b> {</b></p><p> uc i,temp;</p><p> temp=date;</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p>&l
77、t;p> temp=temp<<1;</p><p><b> SCL=0;</b></p><p><b> delay();</b></p><p><b> SDA=CY;</b></p><p><b> delay();</
78、b></p><p><b> SCL=1;</b></p><p><b> delay();</b></p><p><b> }</b></p><p><b> SCL=0;</b></p><p><b
79、> delay();</b></p><p><b> SDA=1;</b></p><p><b> delay();</b></p><p><b> }</b></p><p> uc read_byte()//讀操作</p>&
80、lt;p><b> {</b></p><p><b> uc i,k;</b></p><p><b> SCL=0;</b></p><p><b> delay();</b></p><p><b> SDA=1;</
81、b></p><p><b> delay();</b></p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p><b> SCL=1;</b></p><p><b>
82、delay();</b></p><p> k=(k<<1)|SDA;</p><p><b> SCL=0;</b></p><p><b> delay();</b></p><p><b> }</b></p><p
83、><b> return k;</b></p><p><b> }</b></p><p> void write_add(uc address,uc date)//往任意地址存數(shù)據(jù)</p><p><b> {</b></p><p><b> s
84、tart();</b></p><p> write_byte(0xa0);//0xa0代表寫入</p><p> respons();</p><p> write_byte(address);</p><p> respons();</p><p> write_byte(date);<
85、/p><p> respons();</p><p><b> stop();</b></p><p><b> }</b></p><p> uc read_add(uc address)//讀隨意地址內(nèi)容</p><p><b> {</b>&
86、lt;/p><p><b> uc date;</b></p><p><b> start();</b></p><p> write_byte(0xa0);//0xa0代表寫入</p><p> respons();</p><p> write_byte(addr
87、ess);</p><p> respons();</p><p><b> start();</b></p><p> write_byte(0xa1);//0xa1代表讀出</p><p> respons();</p><p> date=read_byte();</p>
88、;<p><b> stop();</b></p><p> return date;//返回值</p><p><b> }</b></p><p> /*****初始化DS18B20*****/</p><p> void Init_DS18B20(void)</p
89、><p><b> {</b></p><p><b> uc w=0;</b></p><p> DQ = 1; //DQ復(fù)位</p><p> Delay_DS18B20(8); //稍做延時</p><p> DQ = 0;
90、//單片機(jī)將DQ拉低</p><p> Delay_DS18B20(78); //精確延時,大于480us</p><p> DQ = 1; //拉高總線</p><p> Delay_DS18B20(14);</p><p> w = DQ; //稍做延時后,如果x=0則初始化成功,x=1則初
91、始化失敗</p><p> Delay_DS18B20(20);</p><p><b> }</b></p><p> /*****讀一個字節(jié)*****/</p><p> unsigned char ReadOneChar(void)</p><p><b> {</
92、b></p><p><b> uc i=0;</b></p><p> uc dat = 0;</p><p> for (i=8;i>0;i--)</p><p><b> {</b></p><p> DQ = 0; // 給脈沖信號<
93、;/p><p><b> dat>>=1;</b></p><p> DQ = 1; // 給脈沖信號</p><p><b> if(DQ)</b></p><p> dat|=0x80;</p><p> Delay_DS18B20(4);<
94、;/p><p><b> }</b></p><p> return(dat);</p><p><b> }</b></p><p> /*****寫一個字節(jié)*****/</p><p> void WriteOneChar(uc dat)</p>&l
95、t;p><b> {</b></p><p><b> uc i=0;</b></p><p> for (i=8; i>0; i--)</p><p><b> {</b></p><p><b> DQ = 0;</b></
96、p><p> DQ = dat&0x01;</p><p> Delay_DS18B20(5);</p><p><b> DQ = 1;</b></p><p><b> dat>>=1;</b></p><p><b> }</b
97、></p><p><b> }</b></p><p> /*****讀取溫度*****/</p><p> ui ReadTemperature(void)</p><p><b> {</b></p><p><b> ui b=0;</
98、b></p><p><b> ui t=0;</b></p><p><b> ui a=0;</b></p><p> float tt=0;</p><p> Init_DS18B20();</p><p> WriteOneChar(0xCC); /
99、/跳過讀序號列號的操作</p><p> WriteOneChar(0x44); //啟動溫度轉(zhuǎn)換</p><p> Init_DS18B20();</p><p> WriteOneChar(0xCC); //跳過讀序號列號的操作</p><p> WriteOneChar(0xBE); //讀取溫度寄存器</p>
100、<p> a=ReadOneChar(); //讀低8位</p><p> b=ReadOneChar(); //讀高8位</p><p><b> t=b;</b></p><p><b> t<<=8;</b></p><p><b>
101、 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> }</b></p><p> //=============
102、========================================================================</p><p> //=====================================================================================</p><p> //=============
103、========================================================================</p><p> /*****延時子程序*****/</p><p> void Delay(ui num)</p><p><b> {</b></p><p> w
104、hile( --num );</p><p><b> }</b></p><p> /*****初始化定時器0*****/</p><p> void InitTimer(void)</p><p><b> {</b></p><p> TMOD=0x01;&l
105、t;/p><p><b> TH0=0x3c;</b></p><p> TL0=0xb0; //50ms(晶振12M)</p><p><b> }</b></p><p> /*****讀取溫度*****/</p><p> void check_wendu
106、(void)</p><p><b> {</b></p><p><b> ui f;</b></p><p> f=ReadTemperature()-5; //獲取溫度值并減去DS18B20的溫漂誤差</p><p> if(f<0)f=0;</p><
107、;p> if(f>999)f=999;</p><p> bai=f/100; //計算得到百位數(shù)字</p><p> shi=(f%100)/10; //計算得到十位數(shù)字</p><p> ge=(f%100)%10; //計算得到個位數(shù)位</p><p><b
108、> }</b></p><p> /*****顯示開機(jī)初始化等待畫面*****/</p><p> void Disp_init(void) </p><p><b> {</b></p><p> P0 = ~0x80; //顯示----</p><p&g
109、t; P2 = 0x7F;</p><p> Delay(200);</p><p> P2 = 0xDF;</p><p> Delay(200); </p><p> P2 = 0xF7;</p><p> Delay(200);</p><p> P2 = 0xFD;&l
110、t;/p><p> Delay(200);</p><p> P2 = 0xFF; //關(guān)閉顯示</p><p><b> }</b></p><p> /*****顯示溫度子程序*****/</p><p> void Disp_Temperature(void)
111、//顯示溫度</p><p><b> {</b></p><p> P0 = ~0x98; //顯示C</p><p> P2 = 0x7F;</p><p> Delay(400);</p><p> P2 = 0xff; //關(guān)閉顯示</p>
112、<p> P0=~LEDData[ge]; //顯示個位</p><p> P2 = 0xDF;</p><p> Delay(400);</p><p> P2 = 0xff; //關(guān)閉顯示</p><p> P0 =~LEDData[shi]; //顯示十位</p><
113、p> DIAN = 0; //顯示小數(shù)點(diǎn)</p><p> P2 = 0xF7;</p><p> Delay(400);</p><p> P2 = 0xff; //關(guān)閉顯示</p><p> P0 =~LEDData[bai]; //顯示百位</p><p>
114、 P2 = 0xFD;</p><p> Delay(400);</p><p> P2 = 0xff; //關(guān)閉顯示</p><p><b> }</b></p><p> /*****顯示報警溫度子程序*****/</p><p> void Disp_alarm(u
115、c baojing)</p><p><b> {</b></p><p> P0 =~0x98; //顯示C</p><p> P2 = 0x7F; //01111111</p><p> Delay(200);</p><p> P2 = 0xff;
116、//關(guān)閉顯示</p><p> P0 =~LEDData[baojing%10]; //顯示十位</p><p> P2 = 0xDF; //1101</p><p> Delay(200);</p><p> P2 = 0xff; //關(guān)閉顯示</p><p> P0 =~LEDDat
117、a[baojing/10]; //顯示百位</p><p> P2 = 0xF7;//11110111</p><p> Delay(200);</p><p> P2 = 0xff; //關(guān)閉顯示</p><p> if(set_st==1)P0 =~0xCE;</p><p> el
118、se if(set_st==2)P0 =~0x1A; //上限H、下限L標(biāo)示</p><p> P2 = 0xFD;</p><p> Delay(200);</p><p> P2 = 0xff; //關(guān)閉顯示</p><p><b> }</b></p><p> /
119、*****報警子程序*****/</p><p> void Alarm()</p><p><b> {</b></p><p> if(x>=10){beep_st=~beep_st;x=0;}</p><p> if((((bai*10+shi)>=shangxian)||((bai*10+sh
120、i)<xiaxian))&&beep_st==1)</p><p><b> {</b></p><p><b> BEEP=0;</b></p><p><b> ALAM=0;</b></p><p><b> }</b>
121、</p><p> else if((((bai*10+shi)>=shangxian)||((bai*10+shi)<xiaxian))&&beep_st==0)</p><p><b> {</b></p><p><b> BEEP=1;</b></p><p&g
122、t;<b> ALAM=1;</b></p><p><b> }</b></p><p> else if(((bai*10+shi)<shangxian)&&((bai*10+shi)>=xiaxian))</p><p><b> {</b></p>
123、;<p><b> BEEP=1;</b></p><p><b> ALAM=1;</b></p><p><b> }</b></p><p><b> }</b></p><p> /*****主函數(shù)*****/</p&
124、gt;<p> void main(void)</p><p><b> {</b></p><p><b> ui z;</b></p><p> InitTimer(); //初始化定時器</p><p> EA=1; //全局中斷開關(guān)</p>
125、<p><b> TR0=1;</b></p><p> ET0=1; //開啟定時器0</p><p> check_wendu();</p><p> check_wendu();</p><p> shangxian=read_add(10);</p><p&g
126、t; xiaxian=read_add(20);</p><p> for(z=0;z<300;z++)</p><p><b> {</b></p><p> Disp_init(); </p><p><b> }</b></p><p>&
127、lt;b> while(1)</b></p><p><b> {</b></p><p> if(SET==0)</p><p><b> {</b></p><p> Delay(2000);</p><p><b> do{}&l
128、t;/b></p><p> while(SET==0);</p><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
129、)</p><p><b> {</b></p><p> check_wendu();</p><p> Disp_Temperature();</p><p> Alarm(); //報警檢測</p><p><b> }</b></p&
溫馨提示
- 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è)計--基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計
- 單片機(jī)課程設(shè)計——基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計
- 單片機(jī)溫度控制系統(tǒng)課程設(shè)計
- 課程設(shè)計--單片機(jī)溫度控制系統(tǒng)
- 單片機(jī)課程設(shè)計--基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計
- 課程設(shè)計---基于單片機(jī)的溫度控制系統(tǒng)
- 單片機(jī)課程設(shè)計(溫度控制系統(tǒng))
- 單片機(jī)課程設(shè)計--溫度控制系統(tǒng)設(shè)計
- 單片機(jī)課程設(shè)計--數(shù)字溫度控制系統(tǒng)
- 單片機(jī)課程設(shè)計---基于at89s52 單片機(jī)的溫度控制系統(tǒng)
- 單片機(jī)課程設(shè)計---基于at89s52單片機(jī)的溫度控制系統(tǒng)
- 單片機(jī)課程設(shè)計-- 基于單片機(jī)的電梯控制系統(tǒng)
- 基于51單片機(jī)的溫度控制系統(tǒng)的設(shè)計課程設(shè)計
- 單片機(jī)課程設(shè)計--基于單片機(jī)的水位控制系統(tǒng)設(shè)計
- 單片機(jī)課程設(shè)計--基于單片機(jī)的水位控制系統(tǒng)設(shè)計
- 單片機(jī)課程設(shè)計報告--基于單片機(jī)的交通燈控制系統(tǒng)
- 單片機(jī)原理及系統(tǒng)課程設(shè)計報告(溫度濕度控制系統(tǒng))
- 課程設(shè)計---基于51單片機(jī)的多路溫度采集控制系統(tǒng)設(shè)計
- 單片機(jī)課程設(shè)計---基于單片機(jī)溫度測量系統(tǒng)設(shè)計
- 溫室大棚溫度調(diào)節(jié)控制系統(tǒng)(單片機(jī)課程設(shè)計)
評論
0/150
提交評論