智能型數字溫度計的設計_第1頁
智能型數字溫度計的設計_第2頁
智能型數字溫度計的設計_第3頁
智能型數字溫度計的設計_第4頁
智能型數字溫度計的設計_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PAGEword文檔可自由復制編輯word文檔可自由復制編輯本科生畢業(yè)設計(論文)題目:智能型數字溫度計的設計學生姓名:系別:機械與電氣工程系專業(yè)年級:2011級電氣工程及其自動化專業(yè)指導教師:摘要本文設計了一種多點溫度數據進行采集顯示系統(tǒng),并對該系統(tǒng)的設計思路和整體框架進行了分析。簡要說明了系統(tǒng)的硬件構成,具體闡述了系統(tǒng)的軟件流程。系統(tǒng)硬件以低功耗、高性能的單片機AT89C51為核心,采用多個單總線數字溫度傳感器DSl8B20用于采集數據,并使用易于編程的LCD1602液晶屏用于顯示。系統(tǒng)軟件采用匯編語言和C語言混合編程實現。單片機首先選取特定的傳感器,并從中讀取溫度數據,然后處理數據,最后將溫度送入液晶屏顯示。程序設計完成后進行了調試,所設計的程序完全滿足要求,可以投入實際應用。關鍵詞:溫度;AT89C51;DS18B20;液晶屏1602

AbstractThisarticledesignsanewmultipletemperaturecollectinganddisplaysystem,andmakesdetaileddesigningideasandgeneralframeofmuti-temperaturecollectionandtransmissionsystem.Itelaboratesthesoftwareandexpoundsthehardwarebriefly.Systemhardwarewithlow-power,high-performanceAT89C51microcontrollerasthecore,theuseofmultiple1-wiredigitaltemperaturesensorsDSl8B20fordatacollectionanduseLCD1602whichiseasyprogrammingfordisplay.SystemsoftwareusinghybridprogrammingofassemblylanguageandClanguage.First,MCUselectsaspecificsensorandreadstemperaturedata,thenprocessthedata,andfinallysendthetemperatureintotheLCDtodisplay.Theprogramhasbeendebuggedafterdesignation.Theprogramcancomeuptotheexpectationcompletely,whichcanbeusedinpracticalapplication.Keywords:Temperature;AT89C51;DS18B20;LCD1602PAGEword文檔可自由復制編輯目錄HYPERLINK第一章系統(tǒng)硬件設計 51.1系統(tǒng)的總體結構 51.2溫度采集端硬件電路設計 51.2.1數字式溫度傳感器DSl8B20 51.2.2溫度采集端硬件連接圖 71.3液晶顯示電路設計 71.3.1液晶顯示器 71.3.2LCD1602液晶顯示電路連接圖 9第二章溫度采集程序設計 102.1DS18B20的時序 102.1.1DS18B20的復位時序 102.1.2DS18B20的讀寫時序 112.2DS18B20內部結構和指令 122.2.1DS18B20內部結構 122.2.2DS18B20的指令表 132.3溫度測量程序 142.3.1選擇DS18B20函數 142.3.2獲取DS18B20序列號程序 152.3.3DS18B20測溫程序 16第三章液晶顯示屏(LCD)顯示程序設計 183.1LCD接口定義及操作時序 183.1.1LCD接口定義 183.1.2LCD操作時序 193.2LCD內部結構及指令 203.2.1LCD液晶模塊內部結構 203.2.2LCD指令表和內部顯示地址 213.3LCD初始化及讀寫數據 233.3.1LCD初始化 233.3.2判斷LCD1602是否處于忙狀態(tài) 243.3.3寫指令或顯示數據到LCD 253.4LCD1602顯示程序設計 283.4.1設定顯示位置 283.4.2液晶顯示程序 29HYPERLINK\l"_第四章_系統(tǒng)測試"第四章系統(tǒng)測試 31HYPERLINK\l"_4.1__工具介紹"4.1工具介紹 31HYPERLINK\l"_4.1.1_軟件設計的調試環(huán)境"4.1.1軟件設計的調試環(huán)境 31HYPERLINK\l"_4.1.2_程序仿真環(huán)境"4.1.2程序仿真環(huán)境 31HYPERLINK\l"_4.2_程序仿真結果"4.2程序仿真結果 32HYPERLINK\l"_4.2.1__LCD測試程序"4.2.1程序仿真環(huán)境 32HYPERLINK\l"_4.2.2__單DS18B20溫度傳感器溫度測試程序"4.2.2單DS18B20溫度傳感器溫度測試程序 32HYPERLINK\l"_4.2.3__DS18B20傳感器ID讀取程序"4.2.3S18B20傳感器ID讀取程序 33HYPERLINK\l"_4.2.4__單總線多個DS18B20顯示程序"4.2.4單總線多個DS18B20顯示程序 34HYPERLINK\l"_總結"總結 35HYPERLINK\l"致謝"致謝 36HYPERLINK\l"_參考文獻"參考文獻 37前言隨著現代信息技術的飛速發(fā)展和傳統(tǒng)工業(yè)改造的逐步實現,能夠獨立工作的溫度檢測和顯示系統(tǒng)應用于諸多領域。溫度作為一個重要的物理量,隨著工業(yè)的不斷發(fā)展,對溫度測量的要求越來越高,而且測量的范圍也越來越廣,對溫度的檢測技術的要求也越來越高。隨著微電子技術、計算機技術和自動測試技術的發(fā)展,人們開發(fā)出將溫度傳感器和數字電路集成在一起的新型數字式集成溫度傳感器。傳統(tǒng)的溫度檢測以熱敏電阻為溫度敏感元件。熱敏電阻的成本低,但需后續(xù)信號處理電路,而且可靠性相對較差。測溫準確度低,檢測系統(tǒng)也有一定的誤差。與傳統(tǒng)的溫度計相比,這里設計的數字溫度計具有讀數方便,測溫范圍廣,測溫精確,數字顯示,適用范圍寬等特點。此次設計采用低功耗、高性能單片機AT89C51、單總線數字式測溫器件DS18B20以及LCD1602液晶顯示器構成測溫系統(tǒng)。通過DSl8820直接讀取被測溫度值,進行數據轉換,該器件的物理化學性能穩(wěn)定,線性度較好,最大線性偏差小于0.1。該器件可直接向單片機傳輸數字信號,便于單片機處理及控制。另外,該溫度計還能直接采用測溫器件測量溫度。從而簡化數據傳輸與處理過程。第1章系統(tǒng)硬件設計1.1系統(tǒng)的總體結構本論文提出的多點溫度采集,由溫度傳感器、微處理器和溫度顯示模塊組成,微處理器命令溫度傳感器采集數據,然后從傳感器中讀取數據,數據經過處理后送入溫度顯示模塊進行顯示。系統(tǒng)硬件結構圖如圖1.1。圖1.1系統(tǒng)硬件結構圖1.2溫度采集硬件電路設計1.2.1數字式溫度傳感器DSl8B20DSl8B20是美國DALLAS公司推出的數字式溫度傳感器,全部傳感組件及轉換電路集成在一個三極管的集成電路中。目前常用的微機與外設之間進行數據傳輸的串行總線主要有I2C總線、SPI總線和SCI總線[5-6]。這些總線至少需要兩條或兩條以上的信號線。近年來,美國DALLAS半導體公司開發(fā)了一種新技術即單總線技術。它采用單根信號線完成數據的雙向傳輸,并且可以通過該信號線為單總線器件提供電源。它具有節(jié)省I/0口線資源、結構簡單、成本低廉、便于總線擴展和維護等諸多優(yōu)點,適用于遠距離、多點測試、集中控制、現場缺電等場合。信息經過單線接口送入DSl8B20或從DSl8B20送出,因此從中央處理器到DSl8B20僅需連接一條線。讀、寫和完成溫度變換所需的電源可以由數據線本身提供,而不需要外部電源。DSl8B20支持“一線總線”接口,測量溫度范圍為-55℃~+125℃,在-10℃~+85℃范圍內,精度為±0.5℃[1]?,F場溫度直接以“單總線”的數字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現場溫度測量,如:環(huán)境控制、設備或過程控制、測溫類消費電子產品等。=1\*Arabic1.DSl8B20特性:(1)先進的單總線數據通信。(2)全數字溫度轉換及輸出。(3)最高12位分辨率,精度可達土0.5攝氏度。(4)12位分辨率時的最大工作周期為750毫秒。(5)全數字溫度轉換及輸出。(6)測溫范圍從-55℃~+125℃,增量值為0.5℃。(7)可選擇寄生工作方式。(8)檢測溫度范圍為–55°C~+125°C(–67°F~+257°F)(9)內置EEPROM,限溫報警功能。(10)64位光刻ROM,內置產品序列號,方便多機掛接。(11)多樣封裝形式,適應不同硬件系統(tǒng)。=2\*Arabic2.DS18B20內部結構主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。DS18B20的引腳排列如下:(1)DQ為數字信號輸入/輸出端。(2)GND為電源地。(3)VDD為外接供電電源輸入端(在寄生電源接線方式時接地)。3.DS18B20使用中注意事項:DSl8B20雖然具有測溫系統(tǒng)簡單、測溫精度高、連接方便、占用口線少等優(yōu)點,但在實際應用中也應注意以下幾方面的問題:(1)較小的硬件開銷需要相對復雜的軟件進行補償,由于DSl8B20與微處理器間采用串行數據傳送,因此,在對DSl8B20進行讀寫編程時,必須嚴格的保證讀寫時序,否則將無法讀取測溫結果。在使用PL/M、C等高級語言進行系統(tǒng)程序設計時,對DSl8B20操作部分最好采用匯編語言實現。(2)在DSl8B20的有關資料中均未提及單總線上所掛DSl8B20數量問題,容易使人誤認為可以掛任意多個DSl8B20,在實際應用中并非如此。當單總線上所掛DSl8B20超過8個時,就需要解決微處理器的總線驅動問題,這一點在進行多點測溫系統(tǒng)設計時要加以注意。(3)連接DSl8B20的總線電纜是有長度限制的。當將總線電纜改為雙絞線帶屏蔽電纜時,正常通訊距離可達150m,當采用每米絞合次數更多的雙絞線帶屏蔽電纜時,正常通訊距離進一步加長。這種情況主要是由總線分布電容使信號波形產生畸變造成的。因此,在用DSl8B20進行長距離測溫系統(tǒng)設計時要充分考慮總線分布電容和阻抗匹配問題。(4)在DSl8B20測溫程序設計中,向DSl8B20發(fā)出溫度轉換命令后,程序總要等待DSl8B20的返回信號,一旦某個DSl8B20接觸不好或斷線,當程序讀該DSl8B20時,將沒有返回信號,程序進入死循環(huán)。1.2.2溫度采集端硬件連接圖系統(tǒng)的溫度采集端完成多點溫度采集,使用數字式溫度傳感器DS18B20。由于DS18B20具有單總線特點,可以在單片機的一個I/O口上并接多個溫度傳感器,節(jié)省I/0口線。硬件連接圖如圖1.2所示。圖1.2溫度采集端硬件連接原理圖1.3液晶顯示電路設計1.3.1液晶顯示器液晶顯示模塊具有體積小,功耗低,顯示內容豐富,超薄輕巧等優(yōu)點,在袖珍式儀表和低功耗應用系統(tǒng)中得到廣泛的應用。目前字符型液晶顯示模塊已經是單片機應用設計中最常用的信息顯示器件。本設計選用的是LCDl602液晶顯示模塊,它可以顯示兩行,每行16個字符,采用單+5V電源供電,外圍電路配置簡單,價格便宜,具有很高的性價比[7]。在單片機系統(tǒng)中應用液晶顯示器作為輸出器件有以下幾個優(yōu)點:顯示質量高、數字式接口、體積小、重量輕、功耗小。=1\*Arabic1.液晶顯示原理液晶顯示的原理是利用液晶的物理特性,通過電壓對其顯示區(qū)域進行控制,有電就有顯示,這樣即可以顯示出圖形。液晶顯示器具有厚度薄、適用于大規(guī)模集成電路直接驅動、易于實現全彩色顯示的特點,目前已經被廣泛應用在便攜式電腦、數字攝像機等眾多領域。=2\*Arabic2.液晶顯示器的分類液晶顯示的分類方法有很多種,通??砂雌滹@示方式分為段式、字符式、點陣式等。除了黑白顯示外,液晶顯示器還有多灰度有彩色顯示等。如果根據驅動方式來分,可以分為靜態(tài)驅動(Static)、單純矩陣驅動(SimpleMatrix)和主動矩陣驅動(ActiveMatrix)三種。=3\*Arabic3.液晶顯示器圖形的顯示原理(1)線段的顯示點陣圖形式液晶由M×N個顯示單元組成,假設LCD顯示屏有64行,每行有128列,每8列對應1字節(jié)的8位,即每行由16字節(jié),共16×8=128個點組成,屏上64×16個顯示單元與顯示RAM區(qū)1024字節(jié)相對應,每一字節(jié)的內容和顯示屏上相應位置的亮暗對應。例如屏的第一行的亮暗由RAM區(qū)的000H——00FH的16字節(jié)的內容決定,當(000H)=FFH時,則屏幕的左上角顯示一條短亮線,長度為8個點;當(3FFH)=FFH時,則屏幕的右下角顯示一條短亮線;當(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H時,則在屏幕的頂部顯示一條由8段亮線和8條暗線組成的虛線。這就是LCD顯示的基本原理。(2)字符的顯示用LCD顯示一個字符時比較復雜,因為一個字符由6×8或8×8點陣組成,既要找到和顯示屏幕上某幾個位置對應的顯示RAM區(qū)的8字節(jié),還要使每字節(jié)的不同位為“1”,其它的為“0”,為“1”的點亮,為“0”的不亮。這樣一來就組成某個字符。但由于內帶字符發(fā)生器的控制器來說,顯示字符就比較簡單了,可以讓控制器工作在文本方式,根據在LCD上開始顯示的行列號及每行的列數找出顯示RAM對應的地址,設立光標,在此送上該字符對應的代碼即可。1.3.2LCD1602液晶顯示電路連接圖V0:液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產生鬼影,使用時可以通過一個10K的電位器調整對比度。RS:寄存器選擇,高電平時選擇數據寄存器,低電平時選擇指令寄存器。R/W:讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時,可以寫入指令或者顯示地址,當RS為高電平,R/W為低電平時可以寫入數據。E:使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行行命令。液晶顯示電路連接圖如圖1.3。圖1.3LCD1602與單片機的硬件連接圖LCD1602的數據總線接到單片機的P3口,RS、R/W和E分別由單片機的P1.5、P1.6和P1.7控制。液晶LCD1602連線方便,編程簡單,適于在單片機應用設計。第2章溫度采集程序設計2.1DS18B20的時序由于DS18B20采用的是1-Wire總線協(xié)議方式,即在一根數據線實現數據的雙向傳輸,而對AT89C51單片機來說,硬件上并不支持單總線協(xié)議,因此,我們必須采用軟件的方法來模擬單總線的協(xié)議時序來完成對DS18B20芯片的訪問。由于DS18B20是在一根I/O線上讀寫數據,因此,對讀寫的數據位有著嚴格的時序要求。DS18B20有嚴格的通信協(xié)議來保證各位數據傳輸的正確性和完整性。該協(xié)議定義了幾種信號的時序:初始化時序、讀時序、寫時序。所有時序都是將主機作為主設備,單總線器件作為從設備。而每一次命令和數據的傳輸都是從主機主動啟動寫時序開始,如果要求單總線器件回送數據,在進行寫命令后,主機需啟動讀時序完成數據接收。數據和命令的傳輸都是低位在先。2.1.1DS18B20的復位時序DS18B20的復位時序如圖2.1所示,主機發(fā)出復位脈沖,DS18B20的單總線即(DQ)接收到高電平,最少480us,最多960us。主機將DQ拉低,延時大于480us,然后DS18B20發(fā)出應答脈沖,DQ為0復位成功,否則失敗,繼續(xù)復位。主機發(fā)出復位脈沖min:480us主機發(fā)出復位脈沖min:480usmax:960us主機接收所需最短時間480usDS18B20發(fā)出應答脈沖15~60usDQGND圖2.1DS18B20的復位時序2.1.2DS18B20的讀寫時序對于DS18B20的讀時序分為讀0時序和讀1時序兩個過程,如圖2.2所示。DS18B20的讀時隙是從主機把單總線拉低之后,在15us之內就得釋放單總線,以讓DS18B20把數據傳輸到單總線上。DS18B20在完成一個讀時序過程,至少需要60us才能完成。主機讀0或讀1時隙主機讀0或讀1時隙DQGND主CPU采樣>1us15us15us30us圖2.2DS18B20的讀時序對于DS18B20的寫時序仍然分為寫0時序和寫1時序兩個過程如圖2.3和2.4。DS18B20寫0時序和寫1時序的要求不同,當要寫0時序時,單總線要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確地采樣IO總線上的“0”電平,當要寫1時序時,單總線被拉低之后,在15us之內就得釋放單總線。主機寫0時隙主機寫0時隙60~120usDQGNDDS18B20采樣>1us15us15us30us>1us圖2.3DS18B20的寫0時序主機寫1時隙60~120us主機寫1時隙60~120usDQGNDDS18B20采樣區(qū)>1us15us15us30us圖2.4DS18B20寫1時序2.2DS18B20內部結構和指令2.2.1DS18B20內部結構DS18B20內部結構主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器[14]。光刻ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位(28H)是產品類型標號,接著的48位是該DS18B20自身的序列號,最后8位是前面56位的循環(huán)冗余校驗碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個DS18B20都各不相同,這樣就可以實現一根總線上掛接多個DS18B20的目的。DS18B20中的溫度傳感器可完成對溫度的測量,以12位轉化為例:用16位符號擴展的二進制補碼讀數形式提供,以0.0625℃/LSB形式表達,其中S為符號位。見表2.1。表2.1溫度值存放格式LSBytebit7bit6bit5bit4bit3bit2bit1bit0MSBytebit15bit14bit13bit12bit11bit10bit9bit8SSSSS12位轉化后得到的12位數據,存儲在18B20的兩個8比特的RAM中,二進制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數值需要取反加1再乘于0.0625即可得到實際溫度。DS18B20溫度傳感器的內部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的EEPRAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結構寄存器。用戶還可根據實際情況設定非易失性溫度報警上下限值TH和TL。DS18B20檢測到溫度值經轉換為數字量后,自動存入存儲器中,并與設定值TH或TL進行比較,當測量溫度超出給定范圍時,就輸出報警信號,并自動識別是高溫超限還是低溫超限。高速暫存存儲器包含了8個連續(xù)字節(jié),前兩個字節(jié)是測得的溫度信息,第一個字節(jié)的內容是溫度的低八位,第二個字節(jié)是溫度的高八位。第三個和第四個字節(jié)是TH、TL的易失性拷貝,第五個字節(jié)是結構寄存器的易失性拷貝,這三個字節(jié)的內容在每一次上電復位時被刷新。第六、七、八個字節(jié)用于內部計算。第九個字節(jié)是冗余檢驗字節(jié)。2.2.2DS18B20的指令表在編程過程中需要給單總線寫入命令,如常用的啟動溫度轉換,讀出DS18B20的序列號,匹配ROM以選定溫度傳感器。表2.2和表2.3中是常用的ROM和RAM指令。表2.2ROM指令表指令約定代碼功

能讀ROM33H讀DS1820ROM中的編碼(即64位地址)符合ROM55H發(fā)出此命令之后,接著發(fā)出64位ROM編碼,訪問單總線上與該編碼相對應的DS1820使之作出響應,為下一步對該DS1820的讀寫作準備。搜索ROM0F0H用于確定掛接在同一總線上DS1820的個數和識別64位ROM地址。為操作各器件作好準備。跳過ROM0CCH忽略64位ROM地址,直接向DS1820發(fā)溫度變換命令。適用于單片工作。告警搜索命令0ECH執(zhí)行后只有溫度超過設定值上限或下限的片子才做出響應。表2.3RAM指令表指令約定代碼功

能溫度變換44H啟動DS1820進行溫度轉換,轉換時最長為500ms(典型為200ms)。結果存入內部9字節(jié)RAM中。讀暫存器0BEH內部RAM中9字節(jié)的內容寫暫存器4EH發(fā)出向內部RAM的3、4字節(jié)寫上、下限溫度數據命令,緊跟該命令之后,是傳送兩字節(jié)的數據。復制暫存器48H將RAM中第3、4字節(jié)的內容復制到EEPROM中。2.3溫度測量程序2.3.1選擇DS18B20函數每一個DS18B20在出廠時就有一個特有的序列號,所以在訪問它的時候,會進行序列號的匹配,匹配正確,可以對它進行讀寫,否則不可以。如果在一定的條件下,寫入SkipROM命令(寫入0xcc),默認情況下跳過匹配過程。當單總線上接多個DSl8B20時,用各個芯片的ID號選中特定的芯片進行操作。如果己經獲得ID號,則先發(fā)送尋求匹配命令(OX55H),再發(fā)送ID號,選中特定的DSl8B20。ucharcodeid[4][8]={{…},/*保存已有18b20ID*/{…},};/********************************************選擇ds18b20********************************************/voidselectedDq(ucharselect){uchari;if(select>3)writeByte(0xcc);//默認狀況下SkipROMelse{writeByte(0x55);//matchROMfor(i=0;i<8;i++){writeByte(id[select][i]);//將選中的DS18B20序列號寫入}}}2.3.2獲取DS18B20序列號程序如果還沒有獲得特定DSl8B20的ID號,先只接一個DSl8B20,發(fā)送讀序列號命令(OX33H),然后讀取DSl8B20返回的該芯片自身的lD號,將讀出的多個DSl8B20芯片的ID號順序保存到單片機EEPROM的指定位置。在進行溫度采集與無線傳輸系統(tǒng)設計之前,先把4個DS18B20的序列號讀出,方便后面的調試需要。通過單片機開發(fā)板與計算機連接,使用串口調試助手這個界面將序列號讀出。voidmain(void){uchari;uintj;resetDQ();//ds18b20復位writeByte(0x33);//寫ReadRom命令for(i=0;i<8;i++)//讀取id{ids[i]=readByte();}SCON=0x40;//串口方式1PCON=0;//SMOD=0REN=1;//允許接收TMOD=0x20;//定時器1定時方式2TH1=0xe8;//11.059MHz1200波特率TL1=0xe8;TR1=1;//啟動定時器while(1){for(i=0;i<8;i++){SBUF=ids[i];//DS18B20的序列號通過串行調試讀出while(TI==0);TI=0;}for(j=0;j<50000;j++);}}2.3.3DS18B20測溫程序應用DS18B20的溫度采集電路進行溫度測量時,先對總線復位,發(fā)送轉換命令0x44,等待轉換結束,再對總線復位,然后發(fā)讀溫度命令0xbe,讀出溫度值低字節(jié)、高字節(jié),并將兩字節(jié)合成一個整型變量。測溫流程圖見圖2.5。開始開始總線復位延時選擇DS18B20發(fā)轉換命令總線復位延時發(fā)讀溫度命令讀溫度值低字節(jié)讀溫度值高字節(jié)兩字節(jié)合成一個整形變量返回溫度值結束圖2.5DS18B20測溫流程圖resetDQ();//總線復位_nop_();//延時selectedDq(selected);writeByte(0x44);//發(fā)轉換命令resetDQ();//總線復位selectedDq(selected);writeByte(0xbe);//發(fā)讀溫度命令tempdata[0]=readByte();//讀溫度值的低字節(jié)tempdata[1]=readByte();//讀溫度值的高字節(jié)temp=tempdata[1];//溫度值高字節(jié)先賦給temptemp<<=8;//temp左移8位,高字節(jié)放在高8位temp=temp|tempdata[0];//兩字節(jié)合成一個整型變量returntemp;//返回溫度值 第三章液晶顯示屏(LCD)顯示程序設計3.1LCD接口定義及操作時序3.1.1LCD接口定義LCD1602采用標準的14腳(無背光)或16腳(帶背光)接口,設計采用16腳(帶背光)LCD,各引腳接口如表3.1所示:表3.1引腳接口表編號符號引腳編號符號引腳1VSS電源地9D2數據2VDD電源正極10D3數據3VL液晶顯示偏壓11D4數據4RS數據/命令選擇12D5數據5R/W讀/寫選擇13D6數據6E使能信號14D7數據7D0數據15BLA背光源正極8D1數據16BLK背光源負極第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度。第4腳:RS為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。因此當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數據。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數據線。第15腳:背光源正極。第16腳:背光源負極。在使用過程中,首先注意引腳的位置,不同的型號位置不同,可能造成使用不便,其次,注意檢查引腳的排列方向,包括引腳整體的排列方向以及與控制器相連時數據線的方向是否正確。3.1.2LCD操作時序本設計選用的是LCDl602液晶顯示模塊,外圍電路配置簡單,編程時需要明確LCD的操作時序。LCD操作時序見表3.2:表3.2LCD操作時序表讀狀態(tài)輸入RS=L,R/W=H,E=H輸出D0—D7=狀態(tài)字寫指令輸入RS=L,R/W=L,D0—D7=指令碼,E=高脈沖輸出無讀數據輸入RS=H,R/W=H,E=H輸出D0—D7=數據寫數據輸入RS=H,R/W=L,D0—D7=數據,E=高脈沖輸出無R/W為讀寫信號線,低電平時進行寫操作。因此當RS=0和R/W=0時可以寫入指令或者顯示地址,當RS=1和R/W=0時可以寫入數據。LCD寫操作時序如圖3.1:圖3.1LCD寫操作時序R/W為高電平時進行讀操作。當RS=0,R/W=1時可以讀狀態(tài)信號,當RS=1和R/W=0時可以讀出數據。LCD讀操作時序如圖3.2:圖3.2LCD讀操作時序3.2LCD內部結構及指令3.2.1LCD液晶模塊內部結構模塊組件內部主要由LCD顯示屏、控制器、列驅動和偏壓產生電路構成。LCD顯示屏為common和segment交叉形成的點陣。列驅動器與控制器配套使用,它接收來自控制器的振蕩、幀同步輸出、串行輸出的數據和移位及鎖存脈沖,產生列segment交流掃描驅動信號。控制器接收來自MPU的指令和數據,控制著整個模塊的工作,由CGTOM、CGRAM和DDRAM等字符存儲區(qū)域、以及與MPU和列驅動器的I/O接口、指令寄存和譯碼機構、地址計數器等部分組成。在控制器的控制下,模塊通過數據總線DB0~DB7和E、R/W、RS三個輸入控制端與MPU接口。這三根控制線按照規(guī)定的時序相互協(xié)調作用,使控制器通過數據總線DB接收MPU發(fā)送來的指令和數據,從CGROM中找到欲顯示字符的字符碼,送入DDRAM,在LCD顯示屏上與DDRAM存儲單元對應的規(guī)定位置顯示出該字符??刂破鬟€可以根據MPU的指令,實現字符的顯示、閃爍和移位等顯示效果??刂破髦饕芍噶罴拇嫫鱅R、數據寄存器DR、忙標志BF、地址計數器AC、DDRAM、CGROM、CGRAM以及時序發(fā)生電路組成:指令寄存器IR和數據寄存器DR本模塊內部具有兩個8位寄存器:指令寄存器IR和數據寄存器DR。用戶可以通過RS和R/W輸入信號的組合選擇指定的寄存器,進行相應的操作,組合見表3.3表3.3組合選擇方式ERSR/W說明101分別將狀態(tài)標志BF和地址計數器AC內容讀到DB7和DB6~DB01-0下降沿00將DB0~DB7的指令代碼寫入指令寄存器中111將數據寄存器內的數據讀到DB0~DB7,模塊的內部操作自動將DDRAM或者CGRAM中的數據送入數據寄存器中1-0下降沿10將DB0~DB7的數據寫入數據寄存器內,模塊的內部操作自動將數據寫到DDRAM或者CGRAM中忙標志位BF忙標志位BF=1時,表明模塊正在進行內部操作,此時不接受任何外部指令和數據。當RS=0、R/W=1以及E為高電平時,BF輸出到DB7。每次操作之前最好先進行狀態(tài)字檢測,只有在確認BF=0之后,MPU才能訪問模塊。地址計數器ACAC地址計數器是DDRAM或者CGRAM的地址指針。隨著IR中指令碼的寫入,指令碼中攜帶的地址信息自動送入AC中,并行做出AC作為DDRAM的地址指針還是CGRAM的地址指針的選擇。AC具有自動加1或者減1的功能。當DR與DDRAM或者CGRAM之間完成一次數據傳送后,AC自動會加1或減1。在RS=0、R/W=1以及E為高電平時,AC的內容送到DB6~DB0。3.2.2LCD指令表和內部顯示地址1602液晶模塊內部的控制器共有11條控制指令,如表3.4所示:表3.4控制命令表序號指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標返回000000001*3置輸入模式00000001I/DS4顯示開/關控制0000001DCB5光標或字符移位000001S/CR/L**6置功能00001DLNF**7置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址8置數據存貯器地址001顯示數據存貯器地址9讀忙標志或地址01BF計數器地址10寫數到CGRAM或DDRAM)10要寫的數據內容11從CGRAM或DDRAM讀數11讀出的數據內容1602液晶模塊的讀寫操作、屏幕和光標的操作都是通過指令編程來實現的。(說明:1為高電平、0為低電平)指令1:清顯示,指令碼01H,光標復位到地址00H位置。指令2:光標復位,光標返回到地址00H。指令3:光標和顯示模式設置I/D:光標移動方向,高電平右移,低電平左移S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。指令4:顯示開關控制。D:控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示C:控制光標的開與關,高電平表示有光標,低電平表示無光標B:控制光標是否閃爍,高電平閃爍,低電平不閃爍。指令5:光標或顯示移位S/C:高電平時移動顯示的文字,低電平時移動光標。指令6:功能設置命令DL:高電平時為4位總線,低電平時為8位總線N:低電平時為單行顯示,高電平時雙行顯示F:低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符。指令7:字符發(fā)生器RAM地址設置。指令8:DDRAM地址設置。指令9:讀忙信號和光標地址BF:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數據,如果為低電平表示不忙。指令10:寫數據。指令11:讀數據。液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,圖3.3是1602的內部顯示地址。圖3.3LCD1602內部顯示地址例如第二行第一個字符的地址是40H,那么是否直接寫入40H就可以將光標定位在第二行第一個字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位D7恒定為高電平1所以實際寫入的數據應該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在對液晶模塊的初始化中要先設置其顯示模式,在液晶模塊顯示字符時光標是自動右移的,無需人工干預。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。3.3LCD初始化及讀寫數據3.3.1LCD初始化LCD的初始化設定LCD的功能和顯示模式以及輸入模式,流程圖如圖3.4。voidinitLCD1602(void){wrLCDCmd(CLEAR);/*清屏*/delay_11us(200);/*延時>1.64ms*/wrLCDCmd(FUNC);/*功能設置*/delay_11us(5);/*延時>40us*/wrLCDCmd(DISP);/*顯示設置*/delay_11us(5);/*延時>40us*/wrLCDCmd(MODE);/*輸入模式設置AC自動加1*/delay_11us(5);/*延時>40us*/wrLCDCmd(CLEAR);/*清屏*/delay_11us(200);/*延時>1.64ms*/}開始開始清屏延時>1.64ms輸入模式設置AC自動加1延時>40us清屏延時>1.64ms結束功能設置延時>40us顯示設置延時>40us圖3.4LCD初始化設定流程圖3.3.2判斷LCD1602是否處于忙狀態(tài)bitisLCDBusy(void){bitisBusy;LCD_RS=0;/*控制寄存器選擇*/LCD_RW=1;/*讀操作*/LCD_EN=1;/*高電平讀*/delay_11us(1);isBusy=LCD_BF;/*讀LCD的BF位*/LCD_EN=0;/*LCD使能端賦0*/returnisBusy;/*返回isBusy的值*/}判斷LCD1602是否處于忙狀態(tài)流程圖如圖3.5。開始開始RS=0,選指令寄存器RW=1,讀操作LCD_EN=1,讀讀LCD的BF位LCD_EN=0返回isBusy的值結束圖3.5判斷LCD1602是否處于忙狀態(tài)流程圖3.3.3寫指令或顯示數據到LCDvoidwrLCDCmd(ucharcmd){while(isLCDBusy());/*LCD空閑時執(zhí)行下一句*/LCD_RS=0;/*控制寄存器選擇*/LCD_RW=0;/*寫操作*/LCD_EN=0;/*LCD使能端賦0*/LCD_DB=cmd;/*輸出命令*/delay_11us(1);LCD_EN=1;/*LCD使能*/delay_11us(2);LCD_EN=0;/*下降沿寫數據*/}寫指令數據到LCD,等其空閑時,選擇命令寄存器,操作為寫操作,EN為0,輸出命令,LCD使能,等下降沿到來寫數據。流程圖見圖3.6。開始開始LCD忙?RS=0,選指令寄存器RW=0,寫操作LCD_EN=0輸出命令,指令數據LCD_EN=1,使能EN=0,下降沿寫數據結束NY圖3.6寫指令數據到LCD流程圖voidwrLCDDat(uchardat){while(isLCDBusy());/*LCD空閑時執(zhí)行下一句*/LCD_RS=1;/*數據寄存器選擇*/LCD_RW=0;/*寫操作*/LCD_EN=0;/*LCD使能端賦0*/LCD_DB=dat;/*輸出命令*/delay_11us(1);LCD_EN=1;/*LCD使能*/delay_11us(2);LCD_EN=0;/*下降沿寫數據*/}寫顯示數據到LCD流程圖見圖3.7。開始開始LCD忙?RS=1,選數據寄存器RW=0,寫操作LCD_EN=0輸出命令,顯示數據LCD_EN=1,使能EN=0,下降沿寫數據結束NY圖3.7寫顯示數據到LCD流程圖3.4LCD1602顯示程序設計3.4.1設定顯示位置voidsetAddrLCD(ucharpos){wrLCDCmd(pos|0x80);/*數據指針=80+地址變量*/delay_11us(5);/*延時>40us*/}注意:因為寫入顯示地址時要求最高位D7恒定為高電平1,所以實際寫入的數據應該是地址變量+10000000B(80H)。3.4.2液晶顯示程序LCD顯示內容,先設置顯示位置,即可將欲顯示的內容顯示在屏幕上。依次,先設第一行,然后第二行。LCD顯示流程圖見圖3.8。voiddispLCD(void){ucharm;setAddrLCD(0x00);/*設置第一行*/for(m=0;m<DISPLONG0;m++){wrLCDDat(myLine0[m]);}setAddrLCD(0x40);/*設置第二行*/for(m=0;m<DISPLONG1;m++){wrLCDDat(myLine1[m]);}}開始開始LCD初始化延時>1.64ms結束設置第一行顯示位置顯示第一行設置第二行顯示位置顯示第二行圖3.8LCD顯示流程圖

第四章系統(tǒng)測試4.1工具介紹在單片機系統(tǒng)的開發(fā)中通常用到兩個工具:Keil和Protues。前者用于編寫單片機程序,并編譯連接生成目標文件。而Protues則模擬了MCU的運行,比較直觀的顯示程序的運行結果。4.1.1軟件設計的調試環(huán)境KeilC51是美國KeilSoftware公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結構性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。用過匯編語言后再使用C來開發(fā),體會更加深刻[13]。KeilC51軟件提供豐富的庫函數和功能強大的集成開發(fā)調試工具,全Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到KeilC51生成的目標代碼效率非常之高,多數語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現高級語言的優(yōu)勢。KeilC51單片機軟件開發(fā)系統(tǒng)的整體結構中uVision與Ishell分別是C51forWindows和forDos的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及A51編譯器編譯生成目標文件(.OBJ)。目標文件可由LIB51創(chuàng)建生成庫文件,也可以與庫文件一起經L51連接定位生成絕對目標文件(.ABS)。ABS文件由OH51轉換成標準的Hex文件,以供調試器dScope51或tScope51使用進行源代碼級調試,也可由仿真器使用直接對目標板進行調試,也可以直接寫入程序存貯器如EPROM中。4.1.2程序仿真環(huán)境Protues軟件是英國Labcenterelectronics公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機及外圍器件。它是目前最好的仿真單片機及外圍器件的工具。雖然目前國內推廣剛起步,但已受到單片機愛好者、從事單片機教學的教師、致力于單片機開發(fā)應用的科技工作者的青睞。Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代碼調試到單片機與外圍電路協(xié)同仿真,一鍵切換到PCB設計,真正實現了從概念到產品的完整設計。是目前世

溫馨提示

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

評論

0/150

提交評論