課程設計--基于51單片機的數(shù)字溫度計的設計_第1頁
已閱讀1頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  《單片機原理與接口技術》課程設計</p><p>  題 目: 數(shù)字溫度計 </p><p>  學院(系): </p><p>  年級專業(yè): </p><p>  學 號:

2、 </p><p>  學生姓名: </p><p>  指導教師: </p><p><b>  課程設計任務書</b></p><p>  學生姓名: 專業(yè)班級:

3、</p><p>  指導教師: 工作單位: </p><p>  題 目: 基于51單片機的數(shù)字溫度計的設計 </p><p><b>  初始條件:</b></p><p>  運

4、用所學的單片機原理與接口技術知識和數(shù)字電路知識;</p><p>  51單片機應用開發(fā)系統(tǒng)一套;</p><p>  PC機及相關應用軟件;</p><p>  要求完成的主要任務:</p><p>  完成數(shù)字溫度計的設計和調試。 </p><p>  要求用DS18B20測量室溫,用四位八段數(shù)碼管顯示,并能設

5、置顯示精度。</p><p>  撰寫課程設計說明書。</p><p>  課程設計說明書要求:引言、設計要求、系統(tǒng)結構、原理設計、各個模塊的設計與實現(xiàn)、軟件設計、調試過程、收獲、體會及總結、參考文獻、電路圖和源程序。說明書使用A4打印紙計算機打印或手寫,用Protel等繪圖軟件繪制電子線路圖紙。</p><p><b>  時間安排:</b>

6、</p><p>  第1天 下達課程設計任務書和日程安排,根據任務書查找資料;</p><p>  第2~3天 完成方案論證,單片機系統(tǒng)的設計;</p><p>  第4~6天 參考有關文獻,完成程序的編寫; </p><p>  第7~10天 調試硬件系統(tǒng)和軟件程序;</p><p>  第11~12天 結果分析整

7、理、撰寫課程設計報告,驗收和答辯。</p><p>  指導教師簽名: 2010 年 6 月 10 日</p><p>  系主任(或責任教師)簽名: 2010 年 6 月 10 日</p><p>  摘要········&#

8、183;····································

9、··1</p><p>  一、引言······························

10、·················2</p><p>  二、總體方案設計與論證··············

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>  四.硬件電路設計······················

19、·················10</p><p>  1.溫度檢測電路··············&

20、#183;····················11</p><p>  2.顯示電路··········

21、3;····························12</p><p>  五、系統(tǒng)軟件設計···

22、;····································13&

23、lt;/p><p>  1.概述································&#

24、183;············13</p><p>  2.主程序流程圖··················

25、83;··················13</p><p>  3.C語言程序·············

26、;··························14</p><p>  六、設計體會·····&#

27、183;····································

28、·20</p><p>  附錄:參考文獻······························&#

29、183;··········21</p><p>  摘要:隨著時代的進步和發(fā)展,單片機技術已經普及到我們生活、工作、科研、各個領域,已經成為一種比較成熟的技術, 本文主要介紹了一個基于89C51單片機的測溫系統(tǒng),詳細描述了利用數(shù)字溫度傳感器DS18B20開發(fā)測溫系統(tǒng)的過程,重點對傳感器在單片機下的硬件連接,軟件編

30、程以及各模塊系統(tǒng)流程進行了詳盡分析,對各部分的電路也一一進行了介紹,該系統(tǒng)可以方便的實現(xiàn)實現(xiàn)溫度采集和顯示,并可根據需要任意設定上下限報警溫度,它使用起來相當方便,具有精度高、量程寬、靈敏度高、體積小、功耗低等優(yōu)點,適合于我們日常生活和工、農業(yè)生產中的溫度測量,也可以當作溫度處理模塊嵌入其它系統(tǒng)中,作為其他主系統(tǒng)的輔助擴展。DS18B20與AT89C51結合實現(xiàn)最簡溫度檢測系統(tǒng),該系統(tǒng)結構簡單,抗干擾能力強,適合于惡劣環(huán)境下進行現(xiàn)場溫度

31、測量,有廣泛的應用前景。</p><p>  關鍵詞:單片機;溫度檢測;AT89C51;DS18B20;</p><p><b>  一、引言</b></p><p>  隨著科技的不斷發(fā)展,現(xiàn)代社會對各種信息參數(shù)的準確度和精確度的要求都有了幾何級的增長,而如何準確而又迅速的獲得這些參數(shù)就需要受制于現(xiàn)代信息基礎的發(fā)展水平。在三大信息信息采集(即

32、傳感器技術)、信息傳輸(通信技術)和信息處理(計算機技術)中,傳感器屬于信息技術的前沿尖端產品,尤其是溫度傳感器技術,在我國各領域已經引用的非常廣泛,可以說是滲透到社會的每一個領域,人民的生活與環(huán)境的溫度息息相關,在工業(yè)生產過程中需要實時測量溫度,在農業(yè)生產中也離不開溫度的測量,因此研究溫度的測量方法和裝置具有重要的意義。</p><p>  測量溫度的關鍵是溫度傳感器,溫度傳感器的發(fā)展經歷了三個發(fā)展階段:<

33、;/p><p> ?、賯鹘y(tǒng)的分立式溫度傳感器</p><p>  ②模擬集成溫度傳感器</p><p> ?、壑悄芗蓽囟葌鞲衅?。</p><p>  目前的智能溫度傳感器(亦稱數(shù)字溫度傳感器)是在20世紀90年代中期問世的,它是微電子技術、計算機技術和自動測試技術(ATE)的結晶,特點是能輸出溫度數(shù)據及相關的溫度控制量,適配各種微控制器(MCU

34、)。社會的發(fā)展使人們對傳感器的要求也越來越高,現(xiàn)在的溫度傳感器正在基于單片機的基礎上從模擬式向數(shù)字式,從集成化向智能化、網絡化的方向飛速發(fā)展,并朝著高精度、多功能、總線標準化、高可靠性及安全性、開發(fā)虛擬傳感器和網絡傳感器、研制單片測溫系統(tǒng)等高科技的方向迅速發(fā)展,本文將介紹智能集成溫度傳感器DS18B20的結構特征及控制方法,并對以此傳感器,89C51單片機為控制器構成的數(shù)字溫度測量裝置的工作原理及程序設計作了詳細的介紹。與傳統(tǒng)的溫度計相

35、比,其具有讀數(shù)方便,測溫范圍廣,測溫準確,輸出溫度采用數(shù)字顯示,主要用于對測溫要求比較準確的場所,或科研實驗室使用。該設計控制器使用ATMEL公司的AT89C51單片機,測溫傳感器使用DALLAS公司DS18B20,用液晶來實現(xiàn)溫度顯示。</p><p>  二、系統(tǒng)方案論證與比較</p><p>  該系統(tǒng)主要由溫度測量和數(shù)據采集兩部分電路組成,實現(xiàn)的方法有很多種,下面將列出兩種在日常生

36、活中和工農業(yè)生產中經常用到的實現(xiàn)方案。</p><p><b>  2. 1、方案一</b></p><p>  采用熱電偶溫差電路測溫,溫度檢測部分可以使用低溫熱偶,熱電偶由兩個焊接在一起的異金屬導線所組成(熱電偶的構成如圖 3.1),熱電偶產生的熱電勢由兩種金屬的接觸電勢和單一導體的溫差電勢組成。通過將參考結點保持在已知溫度并測量該電壓,便可推斷出檢測結點的溫度。

37、數(shù)據采集部分則使用帶有A/D 通道的單片機,在將隨被測溫度變化的電壓或電流采集過來,進行A/D 轉換后,就可以用單片機進行數(shù)據的處理,在顯示電路上,就可以將被測溫度顯示出來。熱電偶的優(yōu)點是工作溫度范圍非常寬,且體積小,但是它們也存在著輸出電壓小、容易遭受來自導線環(huán)路的噪聲影響以及漂移較高的缺點,并且這種設計需要用到A/D 轉換電路,感溫電路比較麻煩。</p><p>  圖 3.1熱電偶電路圖</p>

38、<p>  系統(tǒng)主要包括對A/D0809 的數(shù)據采集,自動手動工作方式檢測,溫度的顯示等,這幾項功能的信號通過輸入輸出電路經單片機處理。此外還有復位電路,晶振電路,啟動電路等。故現(xiàn)場輸入硬件有手動復位鍵、A/D 轉換芯片,處理芯片為51 芯片,執(zhí)行機構有4 位數(shù)碼管、報警器等。</p><p><b>  2. 2、方案二</b></p><p>  采

39、用數(shù)字溫度芯片DS18B20 測量溫度,輸出信號全數(shù)字化。便于單片機處理及控制,省去傳統(tǒng)的測溫方法的很多外圍電路。且該芯片的物理化學性很穩(wěn)定,它能用做工業(yè)測溫元件,此元件線形較好。在0—100 攝氏度時,最大線形偏差小于1 攝氏度。DS18B20 的最大特點之一采用了單總線的數(shù)據傳輸,由數(shù)字溫度計DS18B20和微控制器AT89C51構成的溫度測量裝置,它直接輸出溫度的數(shù)字信號,可直接與計算機連接。這樣,測溫系統(tǒng)的結構就比較簡單,體積也

40、不大。采用51 單片機控制,軟件編程的自由度大,可通過編程實現(xiàn)各種各樣的算術算法和邏輯控制,而且體積小,硬件實現(xiàn)簡單,安裝方便。既可以單獨對多DS18B20</p><p>  控制工作,還可以與PC 機通信上傳數(shù)據,另外AT89S51 在工業(yè)控制上也有著廣泛的應用,編程技術及外圍功能電路的配合使用都很成熟。</p><p>  該系統(tǒng)利用AT89C51芯片控制溫度傳感器DS18B20進行

41、實時溫度檢測并顯示,能夠實現(xiàn)快速測量環(huán)境溫度,并可以根據需要設定上下限報警溫度。該系統(tǒng)擴展性非常強,它可以在設計中加入時鐘芯片DS1302以獲取時間數(shù)據,在數(shù)據處理同時顯示時間,并可以利用AT24C16芯片作為存儲器件,以此來對某些時間點的溫度數(shù)據進行存儲,利用鍵盤來進行調時和溫度查詢,獲得的數(shù)據可以通過MAX232芯片與計算機的RS232接口進行串口通信,方便的采集和整理時間溫度數(shù)據。</p><p>  系統(tǒng)

42、框圖如圖 3.3所示</p><p>  圖 3.3 DS18B20溫度測溫系統(tǒng)框圖</p><p>  從以上兩種方案,容易看出方案一的測溫裝置可測溫度范圍寬、體積小,但是線性誤差較大。方案二的測溫裝置電路簡單、精確度較高、實現(xiàn)方便、軟件設計也比較簡單,故本次設計采用了方案二。</p><p><b>  三、系統(tǒng)器件選擇</b></p

43、><p>  3.1、 單片機的選擇</p><p>  對于單片機的選擇,可以考慮使用8031與8051系列,由于8031沒有內部RAM,系統(tǒng)又需要大量內存存儲數(shù)據,因而不適用。AT89C51 是美國 ATMEL 公司生產的低功耗,高性能 CMOS8 位單片機,片內含 4kbytes 的可編程的 Flash 只讀程序存儲器,兼容標準 8051 指令系統(tǒng)及引腳。它集 Flash 程序存儲器既可

44、在線編程(ISP),也可用傳統(tǒng)方法進行編程,所以低價位 AT89C51單片機可為提供許多高性價比的應用場合,可靈活應用于各種控制領域,對于簡單的測溫系統(tǒng)已經足夠。單片機AT89C51 具有低電壓供電和體積小等特點,四個端口只需要兩個口就能滿足電路系統(tǒng)的設計需要,很適合便攜手持式產品的設計使用系統(tǒng)可用二節(jié)電池供電。主要特性如下圖-1所示:</p><p>  ●與MCS-51 兼容</p><p

45、>  ●4K字節(jié)可編程閃爍存儲器</p><p>  ●壽命:1000寫/擦循環(huán)</p><p>  ●數(shù)據保留時間:10年</p><p>  ●全靜態(tài)工作:0Hz-24Hz</p><p>  ●三級程序存儲器鎖定</p><p>  ●128*8位內部RAM</p><p>  ●3

46、2可編程I/O線</p><p>  ●兩個16位定時器/計數(shù)器</p><p>  ●5個中斷源 AT89C51單片機引腳如圖-1所示</p><p>  ●可編程串行通道 </p><p>  ●低功耗的閑置和掉電模式</p><p>  ●片內振蕩器和時鐘

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門電流。當P1口的管腳寫“1”時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據存儲器,它可以被定義為數(shù)據/地址的第八位。在FLASH編程時,P0口作為原碼輸入口,當FLA

49、SH進行校驗時,P0輸出原碼,此時P0外部電位必須被拉高。</p><p>  ●P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入“1”后,電位被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。</p><p>  ●P2口:P2口為一個

50、內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳電位被內部上拉電阻拉高,且作為輸入。作為輸入時,P2口的管腳電位被外部拉低,將輸出電流,這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉的優(yōu)勢,當對外部八位地址數(shù)據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和

51、校驗時接收高八位地址信號和控制信號。</p><p>  ●P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入時,由于外部下拉為低電平,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ù)據存儲器寫選通)</p><p>  P3.7 RD (外部數(shù)據存儲器讀選通)</p><p>  同時P3口同時為閃爍編程和編程校驗接收一些控制信號。</p><p>  ●RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高</p><p><b>  平時間。</b></p>

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

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

56、EA端保持高電平時,訪問內部ROM。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p>  ●XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。</p><p>  ●XTAL2:來自反向振蕩器的輸出。</p><p>  3.3、溫度傳感器的選擇</p><p>  3.3.1. DS18B20 簡單介

57、紹:</p><p>  DALLAS 最新單線數(shù)字溫度傳感器DS18B20是一種新型的“一線器件”,其體積更小、更適用于多種場合、且適用電壓更寬、更經濟。DALLAS 半導體公司的數(shù)字化溫度傳感器DS18B20是世界上第一片支持“一線總線”接口的溫度傳感器。溫度測量范圍為-55~+125 攝氏度,可編程為9位~12 位轉換精度,測溫分辨率可達0.0625攝氏度,分辨率設定參數(shù)以及用戶設定的報警溫度存儲在EEPR

58、OM 中,掉電后依然保存。被測溫度用符號擴展的16位數(shù)字量方式串行輸出;其工作電源既可以在遠端引入,也可以采用寄生電源方式產生;多個DS18B20可以并聯(lián)到3 根或2 根線上,CPU只需一根端口線就能與諸多DS18B20 通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路。因此用它來組成一個測溫系統(tǒng),具有線路簡單,在一根通信線,可以掛很多這樣的數(shù)字溫度計,十分方便。</p><p>  DS18B20 的性

59、能特點如下:</p><p>  ●獨特的單線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通訊</p><p>  ●DS18B20支持多點組網功能,多個DS18B20可以并聯(lián)在唯一的三線上,實現(xiàn)組網多點測溫</p><p>  ●DS18B20在使用中不需要任何外圍元件,全部傳感元件及轉換電路集成在形如一只三極管的

60、集成電路內</p><p>  ●適應電壓范圍更寬,電壓范圍:3.0~5.5V,在寄生電源方式下可由數(shù)據線供電</p><p>  ●溫范圍-55℃~+125℃,在-10~+85℃時精度為±0.5℃</p><p><b>  ●零待機功耗</b></p><p>  ●可編程的分辨率為9~12位,對應的可分辨

61、溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實現(xiàn)高精度測溫</p><p>  ●在9位分辨率時最多在93.75ms內把溫度轉換為數(shù)字,12位分辨率時最多在750ms內把溫度值轉換為數(shù)字,速度更快</p><p>  ●測量結果直接輸出數(shù)字溫度信號,以"一線總線"串行傳送給CPU,同時可傳送CRC校驗碼,具有極強的抗干擾糾錯能力</p>

62、<p>  ●負電壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作</p><p>  以上特點使DS18B20非常適用與多點、遠距離溫度檢測系統(tǒng)。</p><p>  DS18B20內部結構主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。DS18B20的管腳排列、各種封裝形式如圖 4.2 所示,DQ 為數(shù)據輸入/輸出

63、引腳。開漏單總線接口引腳。當被用著在寄生電源下,也可以向器件提供電源;GND為地信號;VDD為可選擇的VDD引腳。當工作于寄生電源時,此引腳必須接地。其電路圖 4.3所示.。 </p><p>  圖 4.2 外部封裝形式 圖4.3 傳感器電路圖</p><p>  3.3.2 DS18B20使

64、用中的注意事項</p><p>  DS18B20 雖然具有測溫系統(tǒng)簡單、測溫精度高、連接方便、占用口線少等優(yōu)點,但在實際應用中也應注意以下幾方面的問題:</p><p>  ●DS18B20 從測溫結束到將溫度值轉換成數(shù)字量需要一定的轉換時間,這是必須保證的,不然會出現(xiàn)轉換錯誤的現(xiàn)象,使溫度輸出總是顯示85。</p><p>  ●在實際使用中發(fā)現(xiàn),應使電源電壓保

65、持在5V 左右,若電源電壓過低,會使所測得的溫度精度降低。</p><p>  ●較小的硬件開銷需要相對復雜的軟件進行補償,由于DS1820與微處理器間采用串行數(shù)據傳送,因此,在對DS1820進行讀寫編程時,必須嚴格的保證讀寫時序,否則將無法讀取測溫結果。在使用PL/M、C等高級語言進行系統(tǒng)程序設計時,對DS1820操作部分最好采用匯編語言實現(xiàn)。</p><p>  ●在DS18B20的有

66、關資料中均未提及單總線上所掛DS18B20 數(shù)量問題,容易使人誤認為可以掛任意多個DS18B20,在實際應用中并非如此,當單總線上所掛DS18B20 超過8 個時,就需要解決微處理器的總線驅動問題,這一點在進行多點測溫系統(tǒng)設計時要加以注意。</p><p>  ●在DS18B20測溫程序設計中,向DS18B20 發(fā)出溫度轉換命令后,程序總要等待DS18B20的返回信號,一旦某個DS18B20 接觸不好或斷線,當程

67、序讀該DS18B20 時,將沒有返回信號,程序進入死循環(huán),這一點在進行DS18B20硬件連接和軟件設計時也要給予一定的重視。</p><p><b>  四.硬件電路設計</b></p><p>  本設計由DS18B20溫度傳感器芯片測量當前的溫度并將轉換后的結果送入單片機。然后通過A89C51單片機驅動兩位共陽極8段LED數(shù)碼管顯示測量溫度值。如附錄中本設計硬件電

68、路圖所示,本電路主要有DS18B20溫度傳感器芯片,兩位共陽極數(shù)碼管,AT89C51單片機及相應外圍電路組成。其中DS18B20采用“一線制”與單片機相連。</p><p>  4.1、溫度檢測電路</p><p>  DS18B20 最大的特點是單總線數(shù)據傳輸方式,DS18B20 的數(shù)據I/O 均由同一條線來完成。DS18B20 的電源供電方式有2 種: 外部供電方式和寄生電源方式。工作

69、于寄生電源方式時, VDD 和GND 均接地, 他在需要遠程溫度探測和空間受限的場合特別有用, 原理是當1 W ire 總線的信號線DQ 為高電平時, 竊取信號能量給DS18B20 供電, 同時一部分能量給內部電容充電, 當DQ為低電平時釋放能量為DS18B20 供電。但寄生電源方式需要強上拉電路, 軟件控制變得復雜(特別是在完成溫度轉換和拷貝數(shù)據到E2PROM 時) , 同時芯片的性能也有所降低。外部電源供電方式是DS18B20最佳的

70、工作方式,工作穩(wěn)定可靠,抗干擾能力強,而且電路也比較簡單,可以開發(fā)出穩(wěn)定可靠的多點溫度監(jiān)控系統(tǒng)。因此本設計采用外部供電方式。如下圖所示:</p><p>  溫度傳感器DS18B20的測量范圍為-55℃~+125℃,在-10℃~+85℃時精度為±0.5℃。因為本設計只用于測量環(huán)境溫度,所以只顯示0℃~+85℃。</p><p><b>  4.2、顯示電路</b&

71、gt;</p><p>  本設計顯示電路采用兩位共陽極LED數(shù)碼管來顯示測量得到的溫度值。LED數(shù)碼管能在低電壓下工作,而且體積小、重量輕、使用壽命長,因次本設計選用此數(shù)碼管作為顯示器件。</p><p>  一個LED數(shù)碼管只能顯示一位的字符,如果字符位數(shù)不止一位,可以用幾個數(shù)碼管組成,但要控制多位的顯示電路需要有字段控制和字位控制,字段控制是指控制所要顯示的字符是什么,控制電路應將字

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、來輸出該字位的七段碼。因此需要顯示多位時需要多個輸出口,通常片內并口不夠用,需要在片外擴展。</p><p>  動態(tài)顯示又稱為掃描顯示方式,也就是在某一時刻只能讓一個字位處于選通狀態(tài),其他字位一律斷開,同時在字段線上發(fā)出該位要顯示的字段碼,這樣在某一時刻某一位數(shù)碼管就會被點亮,并顯示出相應的字符。下一時刻改變所顯示的字位和字段碼,點亮另一個數(shù)碼管,顯示另一個字符。繞后一次掃描輪流點亮其他數(shù)碼管,只要掃描速度快,

74、利用人眼的視覺殘留效應,會使人感覺到幾位數(shù)碼管都在穩(wěn)定的顯示。</p><p>  本設計采用數(shù)碼管動態(tài)顯示,電路如下圖所示:</p><p>  顯示部分電路 圖-6</p><p>  圖中由單片機P1口串接74HC245驅動兩位共陽極數(shù)碼管,上拉電阻排為10K。由P2.0和P2.1通過PNP型三極管Q1,Q2驅動其字位。三極管發(fā)射極接高電平,當P2.0或P2.

75、1為低電平時使三極管導通選通數(shù)碼管的某一位。</p><p><b>  五、系統(tǒng)軟件設計</b></p><p><b>  5.1、 概述</b></p><p>  整個系統(tǒng)的功能是由硬件電路配合軟件來實現(xiàn)的,當硬件基本定型后,軟件的功能也就基本定下來了。從軟件的功能不同可分為兩大類:一是監(jiān)控軟件(主程序),它是整個

76、控制系統(tǒng)的核心,專門用來協(xié)調各執(zhí)行模塊和操作者的關系。二是執(zhí)行軟件(子程序),它是用來完成各種實質性的功能如測量、計算、顯示、通訊等。每一個執(zhí)行軟件也就是一個小的功能執(zhí)行模塊。這里將各執(zhí)行模塊一一列出,并為每一個執(zhí)行模塊進行功能定義和接口定義。各執(zhí)行模塊規(guī)劃好后,就可以規(guī)劃監(jiān)控程序了。首先要根據系統(tǒng)的總體功能選擇一種最合適的監(jiān)控程序結構,然后根據實時性的要求,合理地安排監(jiān)控軟件和各執(zhí)行模塊之間地調度關系。</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ù)據端口</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、/定時器設置</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) //定時讀取當前溫度</p><p>&

93、lt;b>  {</b></p><p>  temp=ReadTemperature();</p><p>  if(temp&0x8000)</p><p><b>  {</b></p><p>  str[0]=0x40;//負號標志</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;//標志位有效</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復位</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); // 啟動溫度轉換</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>  六、設計體會</b></p><p>  溫度傳感器DS18B20外形像一個小三極管,硬件連接非常簡單,應用非常方便。它不僅能測量溫度,而且也是一個ADC轉換器,它能將測得的溫度信號直接轉換成數(shù)字信號輸入到單片機。硬件開銷較小,相對需要復雜

130、的軟件進行補償,DS18B20軟件編程比較復雜,但是可以把復位、讀和寫3個基本操作的子程序看成是3個固定的基本模塊。</p><p>  從這次的課程設計中,我真真正正的意識到,在以后的學習中,要理論聯(lián)系實際,把我們所學的理論知識用到實際當中,學習單機片機更是如此,程序只有在經常的寫與讀的過程中才能提高,這就是我在這次課程設計中的最大收獲。</p><p>  最后,還要感謝我的指導老師和

131、熱心的同學,在他們的幫助下我的畢業(yè)設計才能順利完成,謝謝你們!</p><p><b>  參考文獻</b></p><p>  [1]孫育才.《單片微型計算機及其應用》.東南大學出版社.2004</p><p>  [2]沈德金 陳粵初.《單片機接口電路與應用程序實例》.北京航天航空大學出版社.1990. </p><p&

132、gt;  [3]潘新民 王燕芳.《微型計算機控制技術》.電子工業(yè)出版社2003 </p><p>  [4]李朝青.單片機原理及接口技術(簡明修訂版).杭州:北京航空航天大學出版社,1998</p><p>  [5]李廣弟.單片機基礎[M].北京:北京航空航天大學出版社,1994</p><p>  [6]閻石.數(shù)字電子技術基礎(第三版). 北京:高等教育出版社,

溫馨提示

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

評論

0/150

提交評論