版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 《單片機原理與接口技術(shù)》課程設(shè)計</p><p> 題 目: 數(shù)字溫度計 </p><p> 學(xué)院(系): </p><p> 年級專業(yè): </p><p> 學(xué) 號:
2、 </p><p> 學(xué)生姓名: </p><p> 指導(dǎo)教師: </p><p><b> 課程設(shè)計任務(wù)書</b></p><p> 學(xué)生姓名: 專業(yè)班級:
3、</p><p> 指導(dǎo)教師: 工作單位: </p><p> 題 目: 基于51單片機的數(shù)字溫度計的設(shè)計 </p><p><b> 初始條件:</b></p><p> 運
4、用所學(xué)的單片機原理與接口技術(shù)知識和數(shù)字電路知識;</p><p> 51單片機應(yīng)用開發(fā)系統(tǒng)一套;</p><p> PC機及相關(guān)應(yīng)用軟件;</p><p> 要求完成的主要任務(wù):</p><p> 完成數(shù)字溫度計的設(shè)計和調(diào)試。 </p><p> 要求用DS18B20測量室溫,用四位八段數(shù)碼管顯示,并能設(shè)
5、置顯示精度。</p><p> 撰寫課程設(shè)計說明書。</p><p> 課程設(shè)計說明書要求:引言、設(shè)計要求、系統(tǒng)結(jié)構(gòu)、原理設(shè)計、各個模塊的設(shè)計與實現(xiàn)、軟件設(shè)計、調(diào)試過程、收獲、體會及總結(jié)、參考文獻(xiàn)、電路圖和源程序。說明書使用A4打印紙計算機打印或手寫,用Protel等繪圖軟件繪制電子線路圖紙。</p><p><b> 時間安排:</b>
6、</p><p> 第1天 下達(dá)課程設(shè)計任務(wù)書和日程安排,根據(jù)任務(wù)書查找資料;</p><p> 第2~3天 完成方案論證,單片機系統(tǒng)的設(shè)計;</p><p> 第4~6天 參考有關(guān)文獻(xiàn),完成程序的編寫; </p><p> 第7~10天 調(diào)試硬件系統(tǒng)和軟件程序;</p><p> 第11~12天 結(jié)果分析整
7、理、撰寫課程設(shè)計報告,驗收和答辯。</p><p> 指導(dǎo)教師簽名: 2010 年 6 月 10 日</p><p> 系主任(或責(zé)任教師)簽名: 2010 年 6 月 10 日</p><p> 摘要········
8、183;····································
9、··1</p><p> 一、引言······························
10、·················2</p><p> 二、總體方案設(shè)計與論證··············
11、;···················3</p><p> 1、方案一············
12、3;····························3</p><p> 2、方案二···
13、83;····································&
14、#183;4</p><p> 三、系統(tǒng)硬件選擇······························
15、83;········5</p><p> 1、單片機的選擇·······················
16、;············5</p><p> 2 89C51 引腳功能介紹:··················
17、;········· 6</p><p> 3、溫度傳感器的選擇·····················
18、3;·········8</p><p> 四.硬件電路設(shè)計······················
19、·················10</p><p> 1.溫度檢測電路··············&
20、#183;····················11</p><p> 2.顯示電路··········
21、3;····························12</p><p> 五、系統(tǒng)軟件設(shè)計···
22、;····································13&
23、lt;/p><p> 1.概述································
24、183;············13</p><p> 2.主程序流程圖··················
25、83;··················13</p><p> 3.C語言程序·············
26、;··························14</p><p> 六、設(shè)計體會·····
27、183;····································
28、·20</p><p> 附錄:參考文獻(xiàn)······························
29、183;··········21</p><p> 摘要:隨著時代的進(jìn)步和發(fā)展,單片機技術(shù)已經(jīng)普及到我們生活、工作、科研、各個領(lǐng)域,已經(jīng)成為一種比較成熟的技術(shù), 本文主要介紹了一個基于89C51單片機的測溫系統(tǒng),詳細(xì)描述了利用數(shù)字溫度傳感器DS18B20開發(fā)測溫系統(tǒng)的過程,重點對傳感器在單片機下的硬件連接,軟件編
30、程以及各模塊系統(tǒng)流程進(jìn)行了詳盡分析,對各部分的電路也一一進(jìn)行了介紹,該系統(tǒng)可以方便的實現(xiàn)實現(xiàn)溫度采集和顯示,并可根據(jù)需要任意設(shè)定上下限報警溫度,它使用起來相當(dāng)方便,具有精度高、量程寬、靈敏度高、體積小、功耗低等優(yōu)點,適合于我們?nèi)粘I詈凸?、農(nóng)業(yè)生產(chǎn)中的溫度測量,也可以當(dāng)作溫度處理模塊嵌入其它系統(tǒng)中,作為其他主系統(tǒng)的輔助擴展。DS18B20與AT89C51結(jié)合實現(xiàn)最簡溫度檢測系統(tǒng),該系統(tǒng)結(jié)構(gòu)簡單,抗干擾能力強,適合于惡劣環(huán)境下進(jìn)行現(xiàn)場溫度
31、測量,有廣泛的應(yīng)用前景。</p><p> 關(guān)鍵詞:單片機;溫度檢測;AT89C51;DS18B20;</p><p><b> 一、引言</b></p><p> 隨著科技的不斷發(fā)展,現(xiàn)代社會對各種信息參數(shù)的準(zhǔn)確度和精確度的要求都有了幾何級的增長,而如何準(zhǔn)確而又迅速的獲得這些參數(shù)就需要受制于現(xiàn)代信息基礎(chǔ)的發(fā)展水平。在三大信息信息采集(即
32、傳感器技術(shù))、信息傳輸(通信技術(shù))和信息處理(計算機技術(shù))中,傳感器屬于信息技術(shù)的前沿尖端產(chǎn)品,尤其是溫度傳感器技術(shù),在我國各領(lǐng)域已經(jīng)引用的非常廣泛,可以說是滲透到社會的每一個領(lǐng)域,人民的生活與環(huán)境的溫度息息相關(guān),在工業(yè)生產(chǎn)過程中需要實時測量溫度,在農(nóng)業(yè)生產(chǎn)中也離不開溫度的測量,因此研究溫度的測量方法和裝置具有重要的意義。</p><p> 測量溫度的關(guān)鍵是溫度傳感器,溫度傳感器的發(fā)展經(jīng)歷了三個發(fā)展階段:<
33、;/p><p> ?、賯鹘y(tǒng)的分立式溫度傳感器</p><p> ②模擬集成溫度傳感器</p><p> ?、壑悄芗蓽囟葌鞲衅鳌?lt;/p><p> 目前的智能溫度傳感器(亦稱數(shù)字溫度傳感器)是在20世紀(jì)90年代中期問世的,它是微電子技術(shù)、計算機技術(shù)和自動測試技術(shù)(ATE)的結(jié)晶,特點是能輸出溫度數(shù)據(jù)及相關(guān)的溫度控制量,適配各種微控制器(MCU
34、)。社會的發(fā)展使人們對傳感器的要求也越來越高,現(xiàn)在的溫度傳感器正在基于單片機的基礎(chǔ)上從模擬式向數(shù)字式,從集成化向智能化、網(wǎng)絡(luò)化的方向飛速發(fā)展,并朝著高精度、多功能、總線標(biāo)準(zhǔn)化、高可靠性及安全性、開發(fā)虛擬傳感器和網(wǎng)絡(luò)傳感器、研制單片測溫系統(tǒng)等高科技的方向迅速發(fā)展,本文將介紹智能集成溫度傳感器DS18B20的結(jié)構(gòu)特征及控制方法,并對以此傳感器,89C51單片機為控制器構(gòu)成的數(shù)字溫度測量裝置的工作原理及程序設(shè)計作了詳細(xì)的介紹。與傳統(tǒng)的溫度計相
35、比,其具有讀數(shù)方便,測溫范圍廣,測溫準(zhǔn)確,輸出溫度采用數(shù)字顯示,主要用于對測溫要求比較準(zhǔn)確的場所,或科研實驗室使用。該設(shè)計控制器使用ATMEL公司的AT89C51單片機,測溫傳感器使用DALLAS公司DS18B20,用液晶來實現(xiàn)溫度顯示。</p><p> 二、系統(tǒng)方案論證與比較</p><p> 該系統(tǒng)主要由溫度測量和數(shù)據(jù)采集兩部分電路組成,實現(xiàn)的方法有很多種,下面將列出兩種在日常生
36、活中和工農(nóng)業(yè)生產(chǎn)中經(jīng)常用到的實現(xiàn)方案。</p><p><b> 2. 1、方案一</b></p><p> 采用熱電偶溫差電路測溫,溫度檢測部分可以使用低溫?zé)崤迹瑹犭娕加蓛蓚€焊接在一起的異金屬導(dǎo)線所組成(熱電偶的構(gòu)成如圖 3.1),熱電偶產(chǎn)生的熱電勢由兩種金屬的接觸電勢和單一導(dǎo)體的溫差電勢組成。通過將參考結(jié)點保持在已知溫度并測量該電壓,便可推斷出檢測結(jié)點的溫度。
37、數(shù)據(jù)采集部分則使用帶有A/D 通道的單片機,在將隨被測溫度變化的電壓或電流采集過來,進(jìn)行A/D 轉(zhuǎn)換后,就可以用單片機進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測溫度顯示出來。熱電偶的優(yōu)點是工作溫度范圍非常寬,且體積小,但是它們也存在著輸出電壓小、容易遭受來自導(dǎo)線環(huán)路的噪聲影響以及漂移較高的缺點,并且這種設(shè)計需要用到A/D 轉(zhuǎn)換電路,感溫電路比較麻煩。</p><p> 圖 3.1熱電偶電路圖</p>
38、<p> 系統(tǒng)主要包括對A/D0809 的數(shù)據(jù)采集,自動手動工作方式檢測,溫度的顯示等,這幾項功能的信號通過輸入輸出電路經(jīng)單片機處理。此外還有復(fù)位電路,晶振電路,啟動電路等。故現(xiàn)場輸入硬件有手動復(fù)位鍵、A/D 轉(zhuǎn)換芯片,處理芯片為51 芯片,執(zhí)行機構(gòu)有4 位數(shù)碼管、報警器等。</p><p><b> 2. 2、方案二</b></p><p> 采
39、用數(shù)字溫度芯片DS18B20 測量溫度,輸出信號全數(shù)字化。便于單片機處理及控制,省去傳統(tǒng)的測溫方法的很多外圍電路。且該芯片的物理化學(xué)性很穩(wěn)定,它能用做工業(yè)測溫元件,此元件線形較好。在0—100 攝氏度時,最大線形偏差小于1 攝氏度。DS18B20 的最大特點之一采用了單總線的數(shù)據(jù)傳輸,由數(shù)字溫度計DS18B20和微控制器AT89C51構(gòu)成的溫度測量裝置,它直接輸出溫度的數(shù)字信號,可直接與計算機連接。這樣,測溫系統(tǒng)的結(jié)構(gòu)就比較簡單,體積也
40、不大。采用51 單片機控制,軟件編程的自由度大,可通過編程實現(xiàn)各種各樣的算術(shù)算法和邏輯控制,而且體積小,硬件實現(xiàn)簡單,安裝方便。既可以單獨對多DS18B20</p><p> 控制工作,還可以與PC 機通信上傳數(shù)據(jù),另外AT89S51 在工業(yè)控制上也有著廣泛的應(yīng)用,編程技術(shù)及外圍功能電路的配合使用都很成熟。</p><p> 該系統(tǒng)利用AT89C51芯片控制溫度傳感器DS18B20進(jìn)行
41、實時溫度檢測并顯示,能夠?qū)崿F(xiàn)快速測量環(huán)境溫度,并可以根據(jù)需要設(shè)定上下限報警溫度。該系統(tǒng)擴展性非常強,它可以在設(shè)計中加入時鐘芯片DS1302以獲取時間數(shù)據(jù),在數(shù)據(jù)處理同時顯示時間,并可以利用AT24C16芯片作為存儲器件,以此來對某些時間點的溫度數(shù)據(jù)進(jìn)行存儲,利用鍵盤來進(jìn)行調(diào)時和溫度查詢,獲得的數(shù)據(jù)可以通過MAX232芯片與計算機的RS232接口進(jìn)行串口通信,方便的采集和整理時間溫度數(shù)據(jù)。</p><p> 系統(tǒng)
42、框圖如圖 3.3所示</p><p> 圖 3.3 DS18B20溫度測溫系統(tǒng)框圖</p><p> 從以上兩種方案,容易看出方案一的測溫裝置可測溫度范圍寬、體積小,但是線性誤差較大。方案二的測溫裝置電路簡單、精確度較高、實現(xiàn)方便、軟件設(shè)計也比較簡單,故本次設(shè)計采用了方案二。</p><p><b> 三、系統(tǒng)器件選擇</b></p
43、><p> 3.1、 單片機的選擇</p><p> 對于單片機的選擇,可以考慮使用8031與8051系列,由于8031沒有內(nèi)部RAM,系統(tǒng)又需要大量內(nèi)存存儲數(shù)據(jù),因而不適用。AT89C51 是美國 ATMEL 公司生產(chǎn)的低功耗,高性能 CMOS8 位單片機,片內(nèi)含 4kbytes 的可編程的 Flash 只讀程序存儲器,兼容標(biāo)準(zhǔn) 8051 指令系統(tǒng)及引腳。它集 Flash 程序存儲器既可
44、在線編程(ISP),也可用傳統(tǒng)方法進(jìn)行編程,所以低價位 AT89C51單片機可為提供許多高性價比的應(yīng)用場合,可靈活應(yīng)用于各種控制領(lǐng)域,對于簡單的測溫系統(tǒng)已經(jīng)足夠。單片機AT89C51 具有低電壓供電和體積小等特點,四個端口只需要兩個口就能滿足電路系統(tǒng)的設(shè)計需要,很適合便攜手持式產(chǎn)品的設(shè)計使用系統(tǒng)可用二節(jié)電池供電。主要特性如下圖-1所示:</p><p> ●與MCS-51 兼容</p><p
45、> ●4K字節(jié)可編程閃爍存儲器</p><p> ●壽命:1000寫/擦循環(huán)</p><p> ●數(shù)據(jù)保留時間:10年</p><p> ●全靜態(tài)工作:0Hz-24Hz</p><p> ●三級程序存儲器鎖定</p><p> ●128*8位內(nèi)部RAM</p><p> ●3
46、2可編程I/O線</p><p> ●兩個16位定時器/計數(shù)器</p><p> ●5個中斷源 AT89C51單片機引腳如圖-1所示</p><p> ●可編程串行通道 </p><p> ●低功耗的閑置和掉電模式</p><p> ●片內(nèi)振蕩器和時鐘
47、電路 </p><p> 3.2 89C51 引腳功能介紹: </p><p> AT89C51 單片機為40 引腳雙列直插式封裝,其引腳排列和邏輯符號如圖-1 所示:</p><p> 各引腳功能簡單介紹如下:</p><p> ●VCC:供電電壓
48、 </p><p> ●GND:接地 </p><p> ●P0口:P0口為一個8位漏級開路雙向I/O口,每個管腳可吸收8TTL門電流。當(dāng)P1口的管腳寫“1”時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FLASH編程時,P0口作為原碼輸入口,當(dāng)FLA
49、SH進(jìn)行校驗時,P0輸出原碼,此時P0外部電位必須被拉高。</p><p> ●P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入“1”后,電位被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。</p><p> ●P2口:P2口為一個
50、內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳電位被內(nèi)部上拉電阻拉高,且作為輸入。作為輸入時,P2口的管腳電位被外部拉低,將輸出電流,這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉的優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和
51、校驗時接收高八位地址信號和控制信號。</p><p> ●P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入時,由于外部下拉為低電平,P3口將輸出電流(ILL),也是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口:</p><p> P3.0 RXD(串行輸入口)</p
52、><p> P3.1 TXD(串行輸出口)</p><p> P3.2 INT0(外部中斷0)</p><p> P3.3 INT1(外部中斷1)</p><p> P3.4 T0(記時器0外部輸入)</p><p> P3.5 T1(記時器1外部輸入)</p><p> P3.6 WR
53、 (外部數(shù)據(jù)存儲器寫選通)</p><p> P3.7 RD (外部數(shù)據(jù)存儲器讀選通)</p><p> 同時P3口同時為閃爍編程和編程校驗接收一些控制信號。</p><p> ●RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高</p><p><b> 平時間。</b></p>
54、<p> ●ALE / PROG :當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令
55、時ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。</p><p> ●PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取址期間,每個機器周期PSEN兩次有效。但在訪問內(nèi)部部數(shù)據(jù)存儲器時,這兩次有效的PSEN信號將不出現(xiàn)。</p><p> ●EA/VPP:當(dāng)EA保持低電平時,訪問外部ROM;注意加密方式1時,EA將內(nèi)部鎖定為RESET;當(dāng)
56、EA端保持高電平時,訪問內(nèi)部ROM。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p> ●XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。</p><p> ●XTAL2:來自反向振蕩器的輸出。</p><p> 3.3、溫度傳感器的選擇</p><p> 3.3.1. DS18B20 簡單介
57、紹:</p><p> DALLAS 最新單線數(shù)字溫度傳感器DS18B20是一種新型的“一線器件”,其體積更小、更適用于多種場合、且適用電壓更寬、更經(jīng)濟。DALLAS 半導(dǎo)體公司的數(shù)字化溫度傳感器DS18B20是世界上第一片支持“一線總線”接口的溫度傳感器。溫度測量范圍為-55~+125 攝氏度,可編程為9位~12 位轉(zhuǎn)換精度,測溫分辨率可達(dá)0.0625攝氏度,分辨率設(shè)定參數(shù)以及用戶設(shè)定的報警溫度存儲在EEPR
58、OM 中,掉電后依然保存。被測溫度用符號擴展的16位數(shù)字量方式串行輸出;其工作電源既可以在遠(yuǎn)端引入,也可以采用寄生電源方式產(chǎn)生;多個DS18B20可以并聯(lián)到3 根或2 根線上,CPU只需一根端口線就能與諸多DS18B20 通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路。因此用它來組成一個測溫系統(tǒng),具有線路簡單,在一根通信線,可以掛很多這樣的數(shù)字溫度計,十分方便。</p><p> DS18B20 的性
59、能特點如下:</p><p> ●獨特的單線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通訊</p><p> ●DS18B20支持多點組網(wǎng)功能,多個DS18B20可以并聯(lián)在唯一的三線上,實現(xiàn)組網(wǎng)多點測溫</p><p> ●DS18B20在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的
60、集成電路內(nèi)</p><p> ●適應(yīng)電壓范圍更寬,電壓范圍:3.0~5.5V,在寄生電源方式下可由數(shù)據(jù)線供電</p><p> ●溫范圍-55℃~+125℃,在-10~+85℃時精度為±0.5℃</p><p><b> ●零待機功耗</b></p><p> ●可編程的分辨率為9~12位,對應(yīng)的可分辨
61、溫度分別為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ù)字溫度信號,以"一線總線"串行傳送給CPU,同時可傳送CRC校驗碼,具有極強的抗干擾糾錯能力</p>
62、<p> ●負(fù)電壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作</p><p> 以上特點使DS18B20非常適用與多點、遠(yuǎn)距離溫度檢測系統(tǒng)。</p><p> DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。DS18B20的管腳排列、各種封裝形式如圖 4.2 所示,DQ 為數(shù)據(jù)輸入/輸出
63、引腳。開漏單總線接口引腳。當(dāng)被用著在寄生電源下,也可以向器件提供電源;GND為地信號;VDD為可選擇的VDD引腳。當(dāng)工作于寄生電源時,此引腳必須接地。其電路圖 4.3所示.。 </p><p> 圖 4.2 外部封裝形式 圖4.3 傳感器電路圖</p><p> 3.3.2 DS18B20使
64、用中的注意事項</p><p> DS18B20 雖然具有測溫系統(tǒng)簡單、測溫精度高、連接方便、占用口線少等優(yōu)點,但在實際應(yīng)用中也應(yīng)注意以下幾方面的問題:</p><p> ●DS18B20 從測溫結(jié)束到將溫度值轉(zhuǎn)換成數(shù)字量需要一定的轉(zhuǎn)換時間,這是必須保證的,不然會出現(xiàn)轉(zhuǎn)換錯誤的現(xiàn)象,使溫度輸出總是顯示85。</p><p> ●在實際使用中發(fā)現(xiàn),應(yīng)使電源電壓保
65、持在5V 左右,若電源電壓過低,會使所測得的溫度精度降低。</p><p> ●較小的硬件開銷需要相對復(fù)雜的軟件進(jìn)行補償,由于DS1820與微處理器間采用串行數(shù)據(jù)傳送,因此,在對DS1820進(jìn)行讀寫編程時,必須嚴(yán)格的保證讀寫時序,否則將無法讀取測溫結(jié)果。在使用PL/M、C等高級語言進(jìn)行系統(tǒng)程序設(shè)計時,對DS1820操作部分最好采用匯編語言實現(xiàn)。</p><p> ●在DS18B20的有
66、關(guān)資料中均未提及單總線上所掛DS18B20 數(shù)量問題,容易使人誤認(rèn)為可以掛任意多個DS18B20,在實際應(yīng)用中并非如此,當(dāng)單總線上所掛DS18B20 超過8 個時,就需要解決微處理器的總線驅(qū)動問題,這一點在進(jìn)行多點測溫系統(tǒng)設(shè)計時要加以注意。</p><p> ●在DS18B20測溫程序設(shè)計中,向DS18B20 發(fā)出溫度轉(zhuǎn)換命令后,程序總要等待DS18B20的返回信號,一旦某個DS18B20 接觸不好或斷線,當(dāng)程
67、序讀該DS18B20 時,將沒有返回信號,程序進(jìn)入死循環(huán),這一點在進(jìn)行DS18B20硬件連接和軟件設(shè)計時也要給予一定的重視。</p><p><b> 四.硬件電路設(shè)計</b></p><p> 本設(shè)計由DS18B20溫度傳感器芯片測量當(dāng)前的溫度并將轉(zhuǎn)換后的結(jié)果送入單片機。然后通過A89C51單片機驅(qū)動兩位共陽極8段LED數(shù)碼管顯示測量溫度值。如附錄中本設(shè)計硬件電
68、路圖所示,本電路主要有DS18B20溫度傳感器芯片,兩位共陽極數(shù)碼管,AT89C51單片機及相應(yīng)外圍電路組成。其中DS18B20采用“一線制”與單片機相連。</p><p> 4.1、溫度檢測電路</p><p> DS18B20 最大的特點是單總線數(shù)據(jù)傳輸方式,DS18B20 的數(shù)據(jù)I/O 均由同一條線來完成。DS18B20 的電源供電方式有2 種: 外部供電方式和寄生電源方式。工作
69、于寄生電源方式時, VDD 和GND 均接地, 他在需要遠(yuǎn)程溫度探測和空間受限的場合特別有用, 原理是當(dāng)1 W ire 總線的信號線DQ 為高電平時, 竊取信號能量給DS18B20 供電, 同時一部分能量給內(nèi)部電容充電, 當(dāng)DQ為低電平時釋放能量為DS18B20 供電。但寄生電源方式需要強上拉電路, 軟件控制變得復(fù)雜(特別是在完成溫度轉(zhuǎn)換和拷貝數(shù)據(jù)到E2PROM 時) , 同時芯片的性能也有所降低。外部電源供電方式是DS18B20最佳的
70、工作方式,工作穩(wěn)定可靠,抗干擾能力強,而且電路也比較簡單,可以開發(fā)出穩(wěn)定可靠的多點溫度監(jiān)控系統(tǒng)。因此本設(shè)計采用外部供電方式。如下圖所示:</p><p> 溫度傳感器DS18B20的測量范圍為-55℃~+125℃,在-10℃~+85℃時精度為±0.5℃。因為本設(shè)計只用于測量環(huán)境溫度,所以只顯示0℃~+85℃。</p><p><b> 4.2、顯示電路</b&
71、gt;</p><p> 本設(shè)計顯示電路采用兩位共陽極LED數(shù)碼管來顯示測量得到的溫度值。LED數(shù)碼管能在低電壓下工作,而且體積小、重量輕、使用壽命長,因次本設(shè)計選用此數(shù)碼管作為顯示器件。</p><p> 一個LED數(shù)碼管只能顯示一位的字符,如果字符位數(shù)不止一位,可以用幾個數(shù)碼管組成,但要控制多位的顯示電路需要有字段控制和字位控制,字段控制是指控制所要顯示的字符是什么,控制電路應(yīng)將字
72、符的七段碼通過輸出口連接到LED的a~g引腳,是某些段點亮,某些段處于熄滅狀態(tài)。字位控制是指控制在多位顯示器中,哪幾位發(fā)光或那幾位不發(fā)光,字位控制則需要通過字位碼作用于LED數(shù)碼管的公共引腳,是某一位或某幾位的數(shù)碼管可以發(fā)光。</p><p> 數(shù)碼管顯示電路分為動態(tài)顯示和靜態(tài)顯示。</p><p> 靜態(tài)顯示方式是指每一個數(shù)碼管的字段控制是獨立的,每一個數(shù)碼管都需要配置一個8位輸出口
73、來輸出該字位的七段碼。因此需要顯示多位時需要多個輸出口,通常片內(nèi)并口不夠用,需要在片外擴展。</p><p> 動態(tài)顯示又稱為掃描顯示方式,也就是在某一時刻只能讓一個字位處于選通狀態(tài),其他字位一律斷開,同時在字段線上發(fā)出該位要顯示的字段碼,這樣在某一時刻某一位數(shù)碼管就會被點亮,并顯示出相應(yīng)的字符。下一時刻改變所顯示的字位和字段碼,點亮另一個數(shù)碼管,顯示另一個字符。繞后一次掃描輪流點亮其他數(shù)碼管,只要掃描速度快,
74、利用人眼的視覺殘留效應(yīng),會使人感覺到幾位數(shù)碼管都在穩(wěn)定的顯示。</p><p> 本設(shè)計采用數(shù)碼管動態(tài)顯示,電路如下圖所示:</p><p> 顯示部分電路 圖-6</p><p> 圖中由單片機P1口串接74HC245驅(qū)動兩位共陽極數(shù)碼管,上拉電阻排為10K。由P2.0和P2.1通過PNP型三極管Q1,Q2驅(qū)動其字位。三極管發(fā)射極接高電平,當(dāng)P2.0或P2.
75、1為低電平時使三極管導(dǎo)通選通數(shù)碼管的某一位。</p><p><b> 五、系統(tǒng)軟件設(shè)計</b></p><p><b> 5.1、 概述</b></p><p> 整個系統(tǒng)的功能是由硬件電路配合軟件來實現(xiàn)的,當(dāng)硬件基本定型后,軟件的功能也就基本定下來了。從軟件的功能不同可分為兩大類:一是監(jiān)控軟件(主程序),它是整個
76、控制系統(tǒng)的核心,專門用來協(xié)調(diào)各執(zhí)行模塊和操作者的關(guān)系。二是執(zhí)行軟件(子程序),它是用來完成各種實質(zhì)性的功能如測量、計算、顯示、通訊等。每一個執(zhí)行軟件也就是一個小的功能執(zhí)行模塊。這里將各執(zhí)行模塊一一列出,并為每一個執(zhí)行模塊進(jìn)行功能定義和接口定義。各執(zhí)行模塊規(guī)劃好后,就可以規(guī)劃監(jiān)控程序了。首先要根據(jù)系統(tǒng)的總體功能選擇一種最合適的監(jiān)控程序結(jié)構(gòu),然后根據(jù)實時性的要求,合理地安排監(jiān)控軟件和各執(zhí)行模塊之間地調(diào)度關(guān)系。</p><
77、p> 5.2.總程序流程圖</p><p><b> 5.3.C語言程序</b></p><p> #include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義</p><p> #include<math.h></p><p>
78、#include<INTRINS.H></p><p> #define uchar unsigned char</p><p> #define uint unsigned int;</p><p> /******************************************************************/<
79、;/p><p> /* 定義端口 */</p><p> /******************************************************************/</p><p> sbit seg1=P2^0;</p&
80、gt;<p> sbit seg2=P2^1;</p><p> sbit seg3=P2^2;</p><p> sbit s1=P3^0;</p><p> sbit DQ=P1^3;//ds18b20 端口</p><p> sfr dataled=0x80;//顯示數(shù)據(jù)端口</p><p&g
81、t; /******************************************************************/</p><p> /* 全局變量 */</p><p> /*************************************
82、*****************************/</p><p> uint temp;</p><p> uchar flag_get,count,num,minute,second,x;</p><p> uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};&
83、lt;/p><p> //7段數(shù)碼管段碼表共陽</p><p> uchar str[6];</p><p> /******************************************************************/</p><p> /* 函數(shù)聲明
84、 */</p><p> /******************************************************************/</p><p> void delay1(uchar MS);</p><p> unsigned int ReadTemperature(voi
85、d);</p><p> void Init_DS18B20(void);</p><p> unsigned char ReadOneChar(void);</p><p> void WriteOneChar(unsigned char dat);</p><p> void delay(unsigned int i);</
86、p><p> /******************************************************************/</p><p> /* 主函數(shù) */</p><p> /**********************
87、********************************************/</p><p><b> main()</b></p><p><b> {</b></p><p> unsigned char TempH,TempL;</p><p> TMOD|=0x01;/
88、/定時器設(shè)置</p><p><b> TH0=0xef;</b></p><p><b> TL0=0xf0;</b></p><p><b> IE=0x82;</b></p><p><b> TR0=1;</b></p>&l
89、t;p> P2=0x00; </p><p><b> count=0;</b></p><p><b> x=0;</b></p><p><b> while(1)</b></p><p><b> {</b></p>
90、<p><b> if(!s1)</b></p><p> {delay(300);</p><p><b> if(!s1)</b></p><p><b> { x++;}</b></p><p><b> if(x==2)</b>
91、</p><p><b> { x=0;}</b></p><p><b> } </b></p><p> str[5]=0x39; //顯示C符號</p><p> str[1]=tab[TempH/100]; //百位溫度</p><p>
92、 str[2]=tab[(TempH%100)/10]; //十位溫度</p><p> str[3]=tab[(TempH%100)%10]|0x80; //個位溫度,帶小數(shù)點</p><p> str[4]=tab[TempL];</p><p> if(flag_get==1) //定時讀取當(dāng)前溫度</p><p>&
93、lt;b> {</b></p><p> temp=ReadTemperature();</p><p> if(temp&0x8000)</p><p><b> {</b></p><p> str[0]=0x40;//負(fù)號標(biāo)志</p><p> temp
94、=~temp; // 取反加1</p><p><b> temp +=1;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> str[0]=0;</b></p>&
95、lt;p> TempH=temp>>4;</p><p> TempL=temp&0x0F;</p><p> TempL=TempL*6/10;//小數(shù)近似處理</p><p> flag_get=0;</p><p><b> }</b></p><p>&
96、lt;b> }</b></p><p><b> }</b></p><p> /******************************************************************/</p><p> /* 定時器中斷
97、 */</p><p> /******************************************************************/</p><p> void tim(void) interrupt 1 using 1//中斷,用于數(shù)碼管掃描和溫度檢測間隔</p><p><b>
98、{</b></p><p> TH0=0xef;//定時器重裝值</p><p><b> TL0=0xf0;</b></p><p><b> num++;</b></p><p> if (num==50)</p><p><b> {nu
99、m=0;</b></p><p> flag_get=1;//標(biāo)志位有效</p><p><b> second++;</b></p><p> if(second>=60)</p><p> {second=0;</p><p> minute++; </p&
100、gt;<p><b> }</b></p><p><b> }</b></p><p><b> if(x==0)</b></p><p><b> {</b></p><p><b> count++;</b&g
101、t;</p><p> if(count==1)</p><p><b> {P2=0;</b></p><p> dataled=str[0];}//數(shù)碼管掃描</p><p> if(count==2)</p><p><b> {P2=1;</b></p
102、><p> dataled=str[1];}</p><p> if(count==3)</p><p><b> { P2=2;</b></p><p> dataled=str[2];</p><p><b> }</b></p><p>
103、 if(count==4)</p><p><b> { P2=3;</b></p><p> dataled=str[3];</p><p><b> }</b></p><p> if(count==5)</p><p><b> { P2=4;<
104、;/b></p><p> dataled=str[4];</p><p><b> }</b></p><p> if(count==6)</p><p><b> { P2=5;</b></p><p> dataled=str[5];</p>
105、<p><b> count=0;}</b></p><p><b> }</b></p><p><b> if(x==1)</b></p><p><b> {</b></p><p><b> count++;<
106、;/b></p><p> if(count==1)</p><p> {str[4]=0;}</p><p> if(count==2)</p><p><b> { P2=4;</b></p><p> dataled=str[5];</p><p>&
107、lt;b> }</b></p><p> if(count==3)</p><p><b> {P2=0;</b></p><p> dataled=str[0];}</p><p> if(count==4)</p><p><b> { P2=1;<
108、;/b></p><p> dataled=str[1];</p><p><b> }</b></p><p> if(count==5)</p><p><b> { P2=2;</b></p><p> dataled=str[2];</p>
109、<p><b> }</b></p><p> if(count==6)</p><p><b> { P2=3;</b></p><p> dataled=str[3];</p><p><b> count=0;}</b></p>&l
110、t;p><b> }</b></p><p><b> }</b></p><p> /******************************************************************/</p><p> /* 延時函數(shù)
111、 */</p><p> /******************************************************************/</p><p> void delay(unsigned int i)//延時函數(shù)</p><p><b> {</b>&
112、lt;/p><p> while(i--);</p><p><b> }</b></p><p> /******************************************************************/</p><p> /* 初始化
113、 */</p><p> /******************************************************************/</p><p> void Init_DS18B20(void)</p><p><b> {</b></
114、p><p> unsigned char x=0;</p><p> DQ = 1; //DQ復(fù)位</p><p> delay(8); //稍做延時</p><p> DQ = 0; //單片機將DQ拉低</p><p> delay(80); //精確延時 大于 480us</p>
115、<p> DQ = 1; //拉高總線</p><p> delay(10);</p><p> x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗</p><p><b> delay(5);</b></p><p><b> }</b>&
116、lt;/p><p> /******************************************************************/</p><p> /* 讀一個字節(jié) */</p><p> /********************
117、**********************************************/</p><p> unsigned char ReadOneChar(void)</p><p><b> {</b></p><p> unsigned char i=0;</p><p> unsigned cha
118、r dat = 0;</p><p> for (i=8;i>0;i--)</p><p><b> {</b></p><p> DQ = 0; // 給脈沖信號</p><p><b> dat>>=1;</b></p><p> DQ = 1
119、; // 給脈沖信號</p><p><b> if(DQ)</b></p><p> dat|=0x80;</p><p><b> delay(5);</b></p><p><b> }</b></p><p> return(dat);
120、</p><p><b> }</b></p><p> /******************************************************************/</p><p> /* 寫一個字節(jié) */
121、</p><p> /******************************************************************/</p><p> void WriteOneChar(unsigned char dat)</p><p><b> {</b></p><p> unsi
122、gned char i=0;</p><p> for (i=8; i>0; i--)</p><p><b> {</b></p><p><b> DQ = 0;</b></p><p> DQ = dat&0x01;</p><p><b&g
123、t; delay(5);</b></p><p><b> DQ = 1;</b></p><p><b> dat>>=1;</b></p><p><b> }</b></p><p><b> delay(5);</b&g
124、t;</p><p><b> }</b></p><p> /******************************************************************/</p><p> /* 讀取溫度
125、 */</p><p> /******************************************************************/</p><p> unsigned int ReadTemperature(void)</p><p><b> {</b></p><p> uns
126、igned char a=0;</p><p> unsigned int b=0;</p><p> unsigned int t=0;</p><p> Init_DS18B20();</p><p> WriteOneChar(0xCC); // 跳過讀序號列號的操作</p><p> WriteOne
127、Char(0x44); // 啟動溫度轉(zhuǎn)換</p><p> delay(200);</p><p> Init_DS18B20();</p><p> WriteOneChar(0xCC); //跳過讀序號列號的操作 </p><p> WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
128、</p><p> a=ReadOneChar(); //低位</p><p> b=ReadOneChar(); //高位</p><p><b> b<<=8;</b></p><p><b> t=a+b;</b></p><p> ret
129、urn(t);</p><p><b> }</b></p><p><b> 六、設(shè)計體會</b></p><p> 溫度傳感器DS18B20外形像一個小三極管,硬件連接非常簡單,應(yīng)用非常方便。它不僅能測量溫度,而且也是一個ADC轉(zhuǎn)換器,它能將測得的溫度信號直接轉(zhuǎn)換成數(shù)字信號輸入到單片機。硬件開銷較小,相對需要復(fù)雜
130、的軟件進(jìn)行補償,DS18B20軟件編程比較復(fù)雜,但是可以把復(fù)位、讀和寫3個基本操作的子程序看成是3個固定的基本模塊。</p><p> 從這次的課程設(shè)計中,我真真正正的意識到,在以后的學(xué)習(xí)中,要理論聯(lián)系實際,把我們所學(xué)的理論知識用到實際當(dāng)中,學(xué)習(xí)單機片機更是如此,程序只有在經(jīng)常的寫與讀的過程中才能提高,這就是我在這次課程設(shè)計中的最大收獲。</p><p> 最后,還要感謝我的指導(dǎo)老師和
131、熱心的同學(xué),在他們的幫助下我的畢業(yè)設(shè)計才能順利完成,謝謝你們!</p><p><b> 參考文獻(xiàn)</b></p><p> [1]孫育才.《單片微型計算機及其應(yīng)用》.東南大學(xué)出版社.2004</p><p> [2]沈德金 陳粵初.《單片機接口電路與應(yīng)用程序?qū)嵗?北京航天航空大學(xué)出版社.1990. </p><p&
132、gt; [3]潘新民 王燕芳.《微型計算機控制技術(shù)》.電子工業(yè)出版社2003 </p><p> [4]李朝青.單片機原理及接口技術(shù)(簡明修訂版).杭州:北京航空航天大學(xué)出版社,1998</p><p> [5]李廣弟.單片機基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,1994</p><p> [6]閻石.數(shù)字電子技術(shù)基礎(chǔ)(第三版). 北京:高等教育出版社,
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 溫度計課程設(shè)計---基于51單片機數(shù)字溫度計設(shè)計
- 數(shù)字溫度計課程設(shè)計---基于51單片機數(shù)字溫度計設(shè)計
- 基于51單片機的數(shù)字溫度計課程設(shè)計
- 課程設(shè)計--基于51單片機的數(shù)字溫度計的設(shè)計
- 基于51單片機數(shù)字溫度計設(shè)計報告課程設(shè)計
- 基于51單片機的溫度計課程設(shè)計
- 單片機課程設(shè)計-- 基于單片機的數(shù)字溫度計設(shè)計
- 51單片機課程設(shè)計數(shù)字溫度計報告
- 基于單片機的數(shù)字溫度計課程設(shè)計
- 基于單片機的數(shù)字溫度計課程設(shè)計
- 單片機課程設(shè)計--基于單片機的數(shù)字溫度計的設(shè)計
- 基于單片機數(shù)字溫度計課程設(shè)計
- 單片機課程設(shè)計---基于單片機的數(shù)字溫度計設(shè)計
- 課程設(shè)計--基于單片機數(shù)字溫度計設(shè)計
- protel課程設(shè)計--基于51單片機的溫度計
- 單片機課程設(shè)計--數(shù)字溫度計
- 單片機課程設(shè)計--數(shù)字溫度計
- 單片機課程設(shè)計-數(shù)字溫度計
- 單片機課程設(shè)計—數(shù)字溫度計
- 單片機數(shù)字溫度計課程設(shè)計
評論
0/150
提交評論