版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
PAGEword文檔可自由復(fù)制編輯word文檔可自由復(fù)制編輯本科生畢業(yè)設(shè)計(論文)題目:智能型數(shù)字溫度計的設(shè)計學生姓名:系別:機械與電氣工程系專業(yè)年級:2011級電氣工程及其自動化專業(yè)指導教師:摘要本文設(shè)計了一種多點溫度數(shù)據(jù)進行采集顯示系統(tǒng),并對該系統(tǒng)的設(shè)計思路和整體框架進行了分析。簡要說明了系統(tǒng)的硬件構(gòu)成,具體闡述了系統(tǒng)的軟件流程。系統(tǒng)硬件以低功耗、高性能的單片機AT89C51為核心,采用多個單總線數(shù)字溫度傳感器DSl8B20用于采集數(shù)據(jù),并使用易于編程的LCD1602液晶屏用于顯示。系統(tǒng)軟件采用匯編語言和C語言混合編程實現(xiàn)。單片機首先選取特定的傳感器,并從中讀取溫度數(shù)據(jù),然后處理數(shù)據(jù),最后將溫度送入液晶屏顯示。程序設(shè)計完成后進行了調(diào)試,所設(shè)計的程序完全滿足要求,可以投入實際應(yīng)用。關(guān)鍵詞:溫度;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文檔可自由復(fù)制編輯目錄HYPERLINK第一章系統(tǒng)硬件設(shè)計 51.1系統(tǒng)的總體結(jié)構(gòu) 51.2溫度采集端硬件電路設(shè)計 51.2.1數(shù)字式溫度傳感器DSl8B20 51.2.2溫度采集端硬件連接圖 71.3液晶顯示電路設(shè)計 71.3.1液晶顯示器 71.3.2LCD1602液晶顯示電路連接圖 9第二章溫度采集程序設(shè)計 102.1DS18B20的時序 102.1.1DS18B20的復(fù)位時序 102.1.2DS18B20的讀寫時序 112.2DS18B20內(nèi)部結(jié)構(gòu)和指令 122.2.1DS18B20內(nèi)部結(jié)構(gòu) 122.2.2DS18B20的指令表 132.3溫度測量程序 142.3.1選擇DS18B20函數(shù) 142.3.2獲取DS18B20序列號程序 152.3.3DS18B20測溫程序 16第三章液晶顯示屏(LCD)顯示程序設(shè)計 183.1LCD接口定義及操作時序 183.1.1LCD接口定義 183.1.2LCD操作時序 193.2LCD內(nèi)部結(jié)構(gòu)及指令 203.2.1LCD液晶模塊內(nèi)部結(jié)構(gòu) 203.2.2LCD指令表和內(nèi)部顯示地址 213.3LCD初始化及讀寫數(shù)據(jù) 233.3.1LCD初始化 233.3.2判斷LCD1602是否處于忙狀態(tài) 243.3.3寫指令或顯示數(shù)據(jù)到LCD 253.4LCD1602顯示程序設(shè)計 283.4.1設(shè)定顯示位置 283.4.2液晶顯示程序 29HYPERLINK\l"_第四章_系統(tǒng)測試"第四章系統(tǒng)測試 31HYPERLINK\l"_4.1__工具介紹"4.1工具介紹 31HYPERLINK\l"_4.1.1_軟件設(shè)計的調(diào)試環(huán)境"4.1.1軟件設(shè)計的調(diào)試環(huán)境 31HYPERLINK\l"_4.1.2_程序仿真環(huán)境"4.1.2程序仿真環(huán)境 31HYPERLINK\l"_4.2_程序仿真結(jié)果"4.2程序仿真結(jié)果 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"_總結(jié)"總結(jié) 35HYPERLINK\l"致謝"致謝 36HYPERLINK\l"_參考文獻"參考文獻 37前言隨著現(xiàn)代信息技術(shù)的飛速發(fā)展和傳統(tǒng)工業(yè)改造的逐步實現(xiàn),能夠獨立工作的溫度檢測和顯示系統(tǒng)應(yīng)用于諸多領(lǐng)域。溫度作為一個重要的物理量,隨著工業(yè)的不斷發(fā)展,對溫度測量的要求越來越高,而且測量的范圍也越來越廣,對溫度的檢測技術(shù)的要求也越來越高。隨著微電子技術(shù)、計算機技術(shù)和自動測試技術(shù)的發(fā)展,人們開發(fā)出將溫度傳感器和數(shù)字電路集成在一起的新型數(shù)字式集成溫度傳感器。傳統(tǒng)的溫度檢測以熱敏電阻為溫度敏感元件。熱敏電阻的成本低,但需后續(xù)信號處理電路,而且可靠性相對較差。測溫準確度低,檢測系統(tǒng)也有一定的誤差。與傳統(tǒng)的溫度計相比,這里設(shè)計的數(shù)字溫度計具有讀數(shù)方便,測溫范圍廣,測溫精確,數(shù)字顯示,適用范圍寬等特點。此次設(shè)計采用低功耗、高性能單片機AT89C51、單總線數(shù)字式測溫器件DS18B20以及LCD1602液晶顯示器構(gòu)成測溫系統(tǒng)。通過DSl8820直接讀取被測溫度值,進行數(shù)據(jù)轉(zhuǎn)換,該器件的物理化學性能穩(wěn)定,線性度較好,最大線性偏差小于0.1。該器件可直接向單片機傳輸數(shù)字信號,便于單片機處理及控制。另外,該溫度計還能直接采用測溫器件測量溫度。從而簡化數(shù)據(jù)傳輸與處理過程。第1章系統(tǒng)硬件設(shè)計1.1系統(tǒng)的總體結(jié)構(gòu)本論文提出的多點溫度采集,由溫度傳感器、微處理器和溫度顯示模塊組成,微處理器命令溫度傳感器采集數(shù)據(jù),然后從傳感器中讀取數(shù)據(jù),數(shù)據(jù)經(jīng)過處理后送入溫度顯示模塊進行顯示。系統(tǒng)硬件結(jié)構(gòu)圖如圖1.1。圖1.1系統(tǒng)硬件結(jié)構(gòu)圖1.2溫度采集硬件電路設(shè)計1.2.1數(shù)字式溫度傳感器DSl8B20DSl8B20是美國DALLAS公司推出的數(shù)字式溫度傳感器,全部傳感組件及轉(zhuǎn)換電路集成在一個三極管的集成電路中。目前常用的微機與外設(shè)之間進行數(shù)據(jù)傳輸?shù)拇锌偩€主要有I2C總線、SPI總線和SCI總線[5-6]。這些總線至少需要兩條或兩條以上的信號線。近年來,美國DALLAS半導體公司開發(fā)了一種新技術(shù)即單總線技術(shù)。它采用單根信號線完成數(shù)據(jù)的雙向傳輸,并且可以通過該信號線為單總線器件提供電源。它具有節(jié)省I/0口線資源、結(jié)構(gòu)簡單、成本低廉、便于總線擴展和維護等諸多優(yōu)點,適用于遠距離、多點測試、集中控制、現(xiàn)場缺電等場合。信息經(jīng)過單線接口送入DSl8B20或從DSl8B20送出,因此從中央處理器到DSl8B20僅需連接一條線。讀、寫和完成溫度變換所需的電源可以由數(shù)據(jù)線本身提供,而不需要外部電源。DSl8B20支持“一線總線”接口,測量溫度范圍為-55℃~+125℃,在-10℃~+85℃范圍內(nèi),精度為±0.5℃[1]?,F(xiàn)場溫度直接以“單總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:環(huán)境控制、設(shè)備或過程控制、測溫類消費電子產(chǎn)品等。=1\*Arabic1.DSl8B20特性:(1)先進的單總線數(shù)據(jù)通信。(2)全數(shù)字溫度轉(zhuǎn)換及輸出。(3)最高12位分辨率,精度可達土0.5攝氏度。(4)12位分辨率時的最大工作周期為750毫秒。(5)全數(shù)字溫度轉(zhuǎn)換及輸出。(6)測溫范圍從-55℃~+125℃,增量值為0.5℃。(7)可選擇寄生工作方式。(8)檢測溫度范圍為–55°C~+125°C(–67°F~+257°F)(9)內(nèi)置EEPROM,限溫報警功能。(10)64位光刻ROM,內(nèi)置產(chǎn)品序列號,方便多機掛接。(11)多樣封裝形式,適應(yīng)不同硬件系統(tǒng)。=2\*Arabic2.DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。DS18B20的引腳排列如下:(1)DQ為數(shù)字信號輸入/輸出端。(2)GND為電源地。(3)VDD為外接供電電源輸入端(在寄生電源接線方式時接地)。3.DS18B20使用中注意事項:DSl8B20雖然具有測溫系統(tǒng)簡單、測溫精度高、連接方便、占用口線少等優(yōu)點,但在實際應(yīng)用中也應(yīng)注意以下幾方面的問題:(1)較小的硬件開銷需要相對復(fù)雜的軟件進行補償,由于DSl8B20與微處理器間采用串行數(shù)據(jù)傳送,因此,在對DSl8B20進行讀寫編程時,必須嚴格的保證讀寫時序,否則將無法讀取測溫結(jié)果。在使用PL/M、C等高級語言進行系統(tǒng)程序設(shè)計時,對DSl8B20操作部分最好采用匯編語言實現(xiàn)。(2)在DSl8B20的有關(guān)資料中均未提及單總線上所掛DSl8B20數(shù)量問題,容易使人誤認為可以掛任意多個DSl8B20,在實際應(yīng)用中并非如此。當單總線上所掛DSl8B20超過8個時,就需要解決微處理器的總線驅(qū)動問題,這一點在進行多點測溫系統(tǒng)設(shè)計時要加以注意。(3)連接DSl8B20的總線電纜是有長度限制的。當將總線電纜改為雙絞線帶屏蔽電纜時,正常通訊距離可達150m,當采用每米絞合次數(shù)更多的雙絞線帶屏蔽電纜時,正常通訊距離進一步加長。這種情況主要是由總線分布電容使信號波形產(chǎn)生畸變造成的。因此,在用DSl8B20進行長距離測溫系統(tǒng)設(shè)計時要充分考慮總線分布電容和阻抗匹配問題。(4)在DSl8B20測溫程序設(shè)計中,向DSl8B20發(fā)出溫度轉(zhuǎn)換命令后,程序總要等待DSl8B20的返回信號,一旦某個DSl8B20接觸不好或斷線,當程序讀該DSl8B20時,將沒有返回信號,程序進入死循環(huán)。1.2.2溫度采集端硬件連接圖系統(tǒng)的溫度采集端完成多點溫度采集,使用數(shù)字式溫度傳感器DS18B20。由于DS18B20具有單總線特點,可以在單片機的一個I/O口上并接多個溫度傳感器,節(jié)省I/0口線。硬件連接圖如圖1.2所示。圖1.2溫度采集端硬件連接原理圖1.3液晶顯示電路設(shè)計1.3.1液晶顯示器液晶顯示模塊具有體積小,功耗低,顯示內(nèi)容豐富,超薄輕巧等優(yōu)點,在袖珍式儀表和低功耗應(yīng)用系統(tǒng)中得到廣泛的應(yīng)用。目前字符型液晶顯示模塊已經(jīng)是單片機應(yīng)用設(shè)計中最常用的信息顯示器件。本設(shè)計選用的是LCDl602液晶顯示模塊,它可以顯示兩行,每行16個字符,采用單+5V電源供電,外圍電路配置簡單,價格便宜,具有很高的性價比[7]。在單片機系統(tǒng)中應(yīng)用液晶顯示器作為輸出器件有以下幾個優(yōu)點:顯示質(zhì)量高、數(shù)字式接口、體積小、重量輕、功耗小。=1\*Arabic1.液晶顯示原理液晶顯示的原理是利用液晶的物理特性,通過電壓對其顯示區(qū)域進行控制,有電就有顯示,這樣即可以顯示出圖形。液晶顯示器具有厚度薄、適用于大規(guī)模集成電路直接驅(qū)動、易于實現(xiàn)全彩色顯示的特點,目前已經(jīng)被廣泛應(yīng)用在便攜式電腦、數(shù)字攝像機等眾多領(lǐng)域。=2\*Arabic2.液晶顯示器的分類液晶顯示的分類方法有很多種,通??砂雌滹@示方式分為段式、字符式、點陣式等。除了黑白顯示外,液晶顯示器還有多灰度有彩色顯示等。如果根據(jù)驅(qū)動方式來分,可以分為靜態(tài)驅(qū)動(Static)、單純矩陣驅(qū)動(SimpleMatrix)和主動矩陣驅(qū)動(ActiveMatrix)三種。=3\*Arabic3.液晶顯示器圖形的顯示原理(1)線段的顯示點陣圖形式液晶由M×N個顯示單元組成,假設(shè)LCD顯示屏有64行,每行有128列,每8列對應(yīng)1字節(jié)的8位,即每行由16字節(jié),共16×8=128個點組成,屏上64×16個顯示單元與顯示RAM區(qū)1024字節(jié)相對應(yīng),每一字節(jié)的內(nèi)容和顯示屏上相應(yīng)位置的亮暗對應(yīng)。例如屏的第一行的亮暗由RAM區(qū)的000H——00FH的16字節(jié)的內(nèi)容決定,當(000H)=FFH時,則屏幕的左上角顯示一條短亮線,長度為8個點;當(3FFH)=FFH時,則屏幕的右下角顯示一條短亮線;當(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H時,則在屏幕的頂部顯示一條由8段亮線和8條暗線組成的虛線。這就是LCD顯示的基本原理。(2)字符的顯示用LCD顯示一個字符時比較復(fù)雜,因為一個字符由6×8或8×8點陣組成,既要找到和顯示屏幕上某幾個位置對應(yīng)的顯示RAM區(qū)的8字節(jié),還要使每字節(jié)的不同位為“1”,其它的為“0”,為“1”的點亮,為“0”的不亮。這樣一來就組成某個字符。但由于內(nèi)帶字符發(fā)生器的控制器來說,顯示字符就比較簡單了,可以讓控制器工作在文本方式,根據(jù)在LCD上開始顯示的行列號及每行的列數(shù)找出顯示RAM對應(yīng)的地址,設(shè)立光標,在此送上該字符對應(yīng)的代碼即可。1.3.2LCD1602液晶顯示電路連接圖V0:液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產(chǎn)生鬼影,使用時可以通過一個10K的電位器調(diào)整對比度。RS:寄存器選擇,高電平時選擇數(shù)據(jù)寄存器,低電平時選擇指令寄存器。R/W:讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時,可以寫入指令或者顯示地址,當RS為高電平,R/W為低電平時可以寫入數(shù)據(jù)。E:使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行行命令。液晶顯示電路連接圖如圖1.3。圖1.3LCD1602與單片機的硬件連接圖LCD1602的數(shù)據(jù)總線接到單片機的P3口,RS、R/W和E分別由單片機的P1.5、P1.6和P1.7控制。液晶LCD1602連線方便,編程簡單,適于在單片機應(yīng)用設(shè)計。第2章溫度采集程序設(shè)計2.1DS18B20的時序由于DS18B20采用的是1-Wire總線協(xié)議方式,即在一根數(shù)據(jù)線實現(xiàn)數(shù)據(jù)的雙向傳輸,而對AT89C51單片機來說,硬件上并不支持單總線協(xié)議,因此,我們必須采用軟件的方法來模擬單總線的協(xié)議時序來完成對DS18B20芯片的訪問。由于DS18B20是在一根I/O線上讀寫數(shù)據(jù),因此,對讀寫的數(shù)據(jù)位有著嚴格的時序要求。DS18B20有嚴格的通信協(xié)議來保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性。該協(xié)議定義了幾種信號的時序:初始化時序、讀時序、寫時序。所有時序都是將主機作為主設(shè)備,單總線器件作為從設(shè)備。而每一次命令和數(shù)據(jù)的傳輸都是從主機主動啟動寫時序開始,如果要求單總線器件回送數(shù)據(jù),在進行寫命令后,主機需啟動讀時序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。2.1.1DS18B20的復(fù)位時序DS18B20的復(fù)位時序如圖2.1所示,主機發(fā)出復(fù)位脈沖,DS18B20的單總線即(DQ)接收到高電平,最少480us,最多960us。主機將DQ拉低,延時大于480us,然后DS18B20發(fā)出應(yīng)答脈沖,DQ為0復(fù)位成功,否則失敗,繼續(xù)復(fù)位。主機發(fā)出復(fù)位脈沖min:480us主機發(fā)出復(fù)位脈沖min:480usmax:960us主機接收所需最短時間480usDS18B20發(fā)出應(yīng)答脈沖15~60usDQGND圖2.1DS18B20的復(fù)位時序2.1.2DS18B20的讀寫時序?qū)τ贒S18B20的讀時序分為讀0時序和讀1時序兩個過程,如圖2.2所示。DS18B20的讀時隙是從主機把單總線拉低之后,在15us之內(nèi)就得釋放單總線,以讓DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩€上。DS18B20在完成一個讀時序過程,至少需要60us才能完成。主機讀0或讀1時隙主機讀0或讀1時隙DQGND主CPU采樣>1us15us15us30us圖2.2DS18B20的讀時序?qū)τ贒S18B20的寫時序仍然分為寫0時序和寫1時序兩個過程如圖2.3和2.4。DS18B20寫0時序和寫1時序的要求不同,當要寫0時序時,單總線要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確地采樣IO總線上的“0”電平,當要寫1時序時,單總線被拉低之后,在15us之內(nèi)就得釋放單總線。主機寫0時隙主機寫0時隙60~120usDQGNDDS18B20采樣>1us15us15us30us>1us圖2.3DS18B20的寫0時序主機寫1時隙60~120us主機寫1時隙60~120usDQGNDDS18B20采樣區(qū)>1us15us15us30us圖2.4DS18B20寫1時序2.2DS18B20內(nèi)部結(jié)構(gòu)和指令2.2.1DS18B20內(nèi)部結(jié)構(gòu)DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器[14]。光刻ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位(28H)是產(chǎn)品類型標號,接著的48位是該DS18B20自身的序列號,最后8位是前面56位的循環(huán)冗余校驗碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個DS18B20都各不相同,這樣就可以實現(xiàn)一根總線上掛接多個DS18B20的目的。DS18B20中的溫度傳感器可完成對溫度的測量,以12位轉(zhuǎn)化為例:用16位符號擴展的二進制補碼讀數(shù)形式提供,以0.0625℃/LSB形式表達,其中S為符號位。見表2.1。表2.1溫度值存放格式LSBytebit7bit6bit5bit4bit3bit2bit1bit0MSBytebit15bit14bit13bit12bit11bit10bit9bit8SSSSS12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個8比特的RAM中,二進制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實際溫度。DS18B20溫度傳感器的內(nèi)部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的EEPRAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結(jié)構(gòu)寄存器。用戶還可根據(jù)實際情況設(shè)定非易失性溫度報警上下限值TH和TL。DS18B20檢測到溫度值經(jīng)轉(zhuǎn)換為數(shù)字量后,自動存入存儲器中,并與設(shè)定值TH或TL進行比較,當測量溫度超出給定范圍時,就輸出報警信號,并自動識別是高溫超限還是低溫超限。高速暫存存儲器包含了8個連續(xù)字節(jié),前兩個字節(jié)是測得的溫度信息,第一個字節(jié)的內(nèi)容是溫度的低八位,第二個字節(jié)是溫度的高八位。第三個和第四個字節(jié)是TH、TL的易失性拷貝,第五個字節(jié)是結(jié)構(gòu)寄存器的易失性拷貝,這三個字節(jié)的內(nèi)容在每一次上電復(fù)位時被刷新。第六、七、八個字節(jié)用于內(nèi)部計算。第九個字節(jié)是冗余檢驗字節(jié)。2.2.2DS18B20的指令表在編程過程中需要給單總線寫入命令,如常用的啟動溫度轉(zhuǎn)換,讀出DS18B20的序列號,匹配ROM以選定溫度傳感器。表2.2和表2.3中是常用的ROM和RAM指令。表2.2ROM指令表指令約定代碼功
能讀ROM33H讀DS1820ROM中的編碼(即64位地址)符合ROM55H發(fā)出此命令之后,接著發(fā)出64位ROM編碼,訪問單總線上與該編碼相對應(yīng)的DS1820使之作出響應(yīng),為下一步對該DS1820的讀寫作準備。搜索ROM0F0H用于確定掛接在同一總線上DS1820的個數(shù)和識別64位ROM地址。為操作各器件作好準備。跳過ROM0CCH忽略64位ROM地址,直接向DS1820發(fā)溫度變換命令。適用于單片工作。告警搜索命令0ECH執(zhí)行后只有溫度超過設(shè)定值上限或下限的片子才做出響應(yīng)。表2.3RAM指令表指令約定代碼功
能溫度變換44H啟動DS1820進行溫度轉(zhuǎn)換,轉(zhuǎn)換時最長為500ms(典型為200ms)。結(jié)果存入內(nèi)部9字節(jié)RAM中。讀暫存器0BEH內(nèi)部RAM中9字節(jié)的內(nèi)容寫暫存器4EH發(fā)出向內(nèi)部RAM的3、4字節(jié)寫上、下限溫度數(shù)據(jù)命令,緊跟該命令之后,是傳送兩字節(jié)的數(shù)據(jù)。復(fù)制暫存器48H將RAM中第3、4字節(jié)的內(nèi)容復(fù)制到EEPROM中。2.3溫度測量程序2.3.1選擇DS18B20函數(shù)每一個DS18B20在出廠時就有一個特有的序列號,所以在訪問它的時候,會進行序列號的匹配,匹配正確,可以對它進行讀寫,否則不可以。如果在一定的條件下,寫入SkipROM命令(寫入0xcc),默認情況下跳過匹配過程。當單總線上接多個DSl8B20時,用各個芯片的ID號選中特定的芯片進行操作。如果己經(jīng)獲得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)設(shè)計之前,先把4個DS18B20的序列號讀出,方便后面的調(diào)試需要。通過單片機開發(fā)板與計算機連接,使用串口調(diào)試助手這個界面將序列號讀出。voidmain(void){uchari;uintj;resetDQ();//ds18b20復(fù)位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的序列號通過串行調(diào)試讀出while(TI==0);TI=0;}for(j=0;j<50000;j++);}}2.3.3DS18B20測溫程序應(yīng)用DS18B20的溫度采集電路進行溫度測量時,先對總線復(fù)位,發(fā)送轉(zhuǎn)換命令0x44,等待轉(zhuǎn)換結(jié)束,再對總線復(fù)位,然后發(fā)讀溫度命令0xbe,讀出溫度值低字節(jié)、高字節(jié),并將兩字節(jié)合成一個整型變量。測溫流程圖見圖2.5。開始開始總線復(fù)位延時選擇DS18B20發(fā)轉(zhuǎn)換命令總線復(fù)位延時發(fā)讀溫度命令讀溫度值低字節(jié)讀溫度值高字節(jié)兩字節(jié)合成一個整形變量返回溫度值結(jié)束圖2.5DS18B20測溫流程圖resetDQ();//總線復(fù)位_nop_();//延時selectedDq(selected);writeByte(0x44);//發(fā)轉(zhuǎn)換命令resetDQ();//總線復(fù)位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)顯示程序設(shè)計3.1LCD接口定義及操作時序3.1.1LCD接口定義LCD1602采用標準的14腳(無背光)或16腳(帶背光)接口,設(shè)計采用16腳(帶背光)LCD,各引腳接口如表3.1所示:表3.1引腳接口表編號符號引腳編號符號引腳1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負極第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度。第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。因此當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負極。在使用過程中,首先注意引腳的位置,不同的型號位置不同,可能造成使用不便,其次,注意檢查引腳的排列方向,包括引腳整體的排列方向以及與控制器相連時數(shù)據(jù)線的方向是否正確。3.1.2LCD操作時序本設(shè)計選用的是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=高脈沖輸出無讀數(shù)據(jù)輸入RS=H,R/W=H,E=H輸出D0—D7=數(shù)據(jù)寫數(shù)據(jù)輸入RS=H,R/W=L,D0—D7=數(shù)據(jù),E=高脈沖輸出無R/W為讀寫信號線,低電平時進行寫操作。因此當RS=0和R/W=0時可以寫入指令或者顯示地址,當RS=1和R/W=0時可以寫入數(shù)據(jù)。LCD寫操作時序如圖3.1:圖3.1LCD寫操作時序R/W為高電平時進行讀操作。當RS=0,R/W=1時可以讀狀態(tài)信號,當RS=1和R/W=0時可以讀出數(shù)據(jù)。LCD讀操作時序如圖3.2:圖3.2LCD讀操作時序3.2LCD內(nèi)部結(jié)構(gòu)及指令3.2.1LCD液晶模塊內(nèi)部結(jié)構(gòu)模塊組件內(nèi)部主要由LCD顯示屏、控制器、列驅(qū)動和偏壓產(chǎn)生電路構(gòu)成。LCD顯示屏為common和segment交叉形成的點陣。列驅(qū)動器與控制器配套使用,它接收來自控制器的振蕩、幀同步輸出、串行輸出的數(shù)據(jù)和移位及鎖存脈沖,產(chǎn)生列segment交流掃描驅(qū)動信號??刂破鹘邮諄碜訫PU的指令和數(shù)據(jù),控制著整個模塊的工作,由CGTOM、CGRAM和DDRAM等字符存儲區(qū)域、以及與MPU和列驅(qū)動器的I/O接口、指令寄存和譯碼機構(gòu)、地址計數(shù)器等部分組成。在控制器的控制下,模塊通過數(shù)據(jù)總線DB0~DB7和E、R/W、RS三個輸入控制端與MPU接口。這三根控制線按照規(guī)定的時序相互協(xié)調(diào)作用,使控制器通過數(shù)據(jù)總線DB接收MPU發(fā)送來的指令和數(shù)據(jù),從CGROM中找到欲顯示字符的字符碼,送入DDRAM,在LCD顯示屏上與DDRAM存儲單元對應(yīng)的規(guī)定位置顯示出該字符??刂破鬟€可以根據(jù)MPU的指令,實現(xiàn)字符的顯示、閃爍和移位等顯示效果。控制器主要由指令寄存器IR、數(shù)據(jù)寄存器DR、忙標志BF、地址計數(shù)器AC、DDRAM、CGROM、CGRAM以及時序發(fā)生電路組成:指令寄存器IR和數(shù)據(jù)寄存器DR本模塊內(nèi)部具有兩個8位寄存器:指令寄存器IR和數(shù)據(jù)寄存器DR。用戶可以通過RS和R/W輸入信號的組合選擇指定的寄存器,進行相應(yīng)的操作,組合見表3.3表3.3組合選擇方式ERSR/W說明101分別將狀態(tài)標志BF和地址計數(shù)器AC內(nèi)容讀到DB7和DB6~DB01-0下降沿00將DB0~DB7的指令代碼寫入指令寄存器中111將數(shù)據(jù)寄存器內(nèi)的數(shù)據(jù)讀到DB0~DB7,模塊的內(nèi)部操作自動將DDRAM或者CGRAM中的數(shù)據(jù)送入數(shù)據(jù)寄存器中1-0下降沿10將DB0~DB7的數(shù)據(jù)寫入數(shù)據(jù)寄存器內(nèi),模塊的內(nèi)部操作自動將數(shù)據(jù)寫到DDRAM或者CGRAM中忙標志位BF忙標志位BF=1時,表明模塊正在進行內(nèi)部操作,此時不接受任何外部指令和數(shù)據(jù)。當RS=0、R/W=1以及E為高電平時,BF輸出到DB7。每次操作之前最好先進行狀態(tài)字檢測,只有在確認BF=0之后,MPU才能訪問模塊。地址計數(shù)器ACAC地址計數(shù)器是DDRAM或者CGRAM的地址指針。隨著IR中指令碼的寫入,指令碼中攜帶的地址信息自動送入AC中,并行做出AC作為DDRAM的地址指針還是CGRAM的地址指針的選擇。AC具有自動加1或者減1的功能。當DR與DDRAM或者CGRAM之間完成一次數(shù)據(jù)傳送后,AC自動會加1或減1。在RS=0、R/W=1以及E為高電平時,AC的內(nèi)容送到DB6~DB0。3.2.2LCD指令表和內(nèi)部顯示地址1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表3.4所示:表3.4控制命令表序號指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標返回000000001*3置輸入模式00000001I/DS4顯示開/關(guān)控制0000001DCB5光標或字符移位000001S/CR/L**6置功能00001DLNF**7置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址8置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址9讀忙標志或地址01BF計數(shù)器地址10寫數(shù)到CGRAM或DDRAM)10要寫的數(shù)據(jù)內(nèi)容11從CGRAM或DDRAM讀數(shù)11讀出的數(shù)據(jù)內(nèi)容1602液晶模塊的讀寫操作、屏幕和光標的操作都是通過指令編程來實現(xiàn)的。(說明:1為高電平、0為低電平)指令1:清顯示,指令碼01H,光標復(fù)位到地址00H位置。指令2:光標復(fù)位,光標返回到地址00H。指令3:光標和顯示模式設(shè)置I/D:光標移動方向,高電平右移,低電平左移S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。指令4:顯示開關(guān)控制。D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示C:控制光標的開與關(guān),高電平表示有光標,低電平表示無光標B:控制光標是否閃爍,高電平閃爍,低電平不閃爍。指令5:光標或顯示移位S/C:高電平時移動顯示的文字,低電平時移動光標。指令6:功能設(shè)置命令DL:高電平時為4位總線,低電平時為8位總線N:低電平時為單行顯示,高電平時雙行顯示F:低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符。指令7:字符發(fā)生器RAM地址設(shè)置。指令8:DDRAM地址設(shè)置。指令9:讀忙信號和光標地址BF:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。指令10:寫數(shù)據(jù)。指令11:讀數(shù)據(jù)。液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,圖3.3是1602的內(nèi)部顯示地址。圖3.3LCD1602內(nèi)部顯示地址例如第二行第一個字符的地址是40H,那么是否直接寫入40H就可以將光標定位在第二行第一個字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位D7恒定為高電平1所以實際寫入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在對液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時光標是自動右移的,無需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。3.3LCD初始化及讀寫數(shù)據(jù)3.3.1LCD初始化LCD的初始化設(shè)定LCD的功能和顯示模式以及輸入模式,流程圖如圖3.4。voidinitLCD1602(void){wrLCDCmd(CLEAR);/*清屏*/delay_11us(200);/*延時>1.64ms*/wrLCDCmd(FUNC);/*功能設(shè)置*/delay_11us(5);/*延時>40us*/wrLCDCmd(DISP);/*顯示設(shè)置*/delay_11us(5);/*延時>40us*/wrLCDCmd(MODE);/*輸入模式設(shè)置AC自動加1*/delay_11us(5);/*延時>40us*/wrLCDCmd(CLEAR);/*清屏*/delay_11us(200);/*延時>1.64ms*/}開始開始清屏延時>1.64ms輸入模式設(shè)置AC自動加1延時>40us清屏延時>1.64ms結(jié)束功能設(shè)置延時>40us顯示設(shè)置延時>40us圖3.4LCD初始化設(shè)定流程圖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的值結(jié)束圖3.5判斷LCD1602是否處于忙狀態(tài)流程圖3.3.3寫指令或顯示數(shù)據(jù)到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;/*下降沿寫數(shù)據(jù)*/}寫指令數(shù)據(jù)到LCD,等其空閑時,選擇命令寄存器,操作為寫操作,EN為0,輸出命令,LCD使能,等下降沿到來寫數(shù)據(jù)。流程圖見圖3.6。開始開始LCD忙?RS=0,選指令寄存器RW=0,寫操作LCD_EN=0輸出命令,指令數(shù)據(jù)LCD_EN=1,使能EN=0,下降沿寫數(shù)據(jù)結(jié)束NY圖3.6寫指令數(shù)據(jù)到LCD流程圖voidwrLCDDat(uchardat){while(isLCDBusy());/*LCD空閑時執(zhí)行下一句*/LCD_RS=1;/*數(shù)據(jù)寄存器選擇*/LCD_RW=0;/*寫操作*/LCD_EN=0;/*LCD使能端賦0*/LCD_DB=dat;/*輸出命令*/delay_11us(1);LCD_EN=1;/*LCD使能*/delay_11us(2);LCD_EN=0;/*下降沿寫數(shù)據(jù)*/}寫顯示數(shù)據(jù)到LCD流程圖見圖3.7。開始開始LCD忙?RS=1,選數(shù)據(jù)寄存器RW=0,寫操作LCD_EN=0輸出命令,顯示數(shù)據(jù)LCD_EN=1,使能EN=0,下降沿寫數(shù)據(jù)結(jié)束NY圖3.7寫顯示數(shù)據(jù)到LCD流程圖3.4LCD1602顯示程序設(shè)計3.4.1設(shè)定顯示位置voidsetAddrLCD(ucharpos){wrLCDCmd(pos|0x80);/*數(shù)據(jù)指針=80+地址變量*/delay_11us(5);/*延時>40us*/}注意:因為寫入顯示地址時要求最高位D7恒定為高電平1,所以實際寫入的數(shù)據(jù)應(yīng)該是地址變量+10000000B(80H)。3.4.2液晶顯示程序LCD顯示內(nèi)容,先設(shè)置顯示位置,即可將欲顯示的內(nèi)容顯示在屏幕上。依次,先設(shè)第一行,然后第二行。LCD顯示流程圖見圖3.8。voiddispLCD(void){ucharm;setAddrLCD(0x00);/*設(shè)置第一行*/for(m=0;m<DISPLONG0;m++){wrLCDDat(myLine0[m]);}setAddrLCD(0x40);/*設(shè)置第二行*/for(m=0;m<DISPLONG1;m++){wrLCDDat(myLine1[m]);}}開始開始LCD初始化延時>1.64ms結(jié)束設(shè)置第一行顯示位置顯示第一行設(shè)置第二行顯示位置顯示第二行圖3.8LCD顯示流程圖
第四章系統(tǒng)測試4.1工具介紹在單片機系統(tǒng)的開發(fā)中通常用到兩個工具:Keil和Protues。前者用于編寫單片機程序,并編譯連接生成目標文件。而Protues則模擬了MCU的運行,比較直觀的顯示程序的運行結(jié)果。4.1.1軟件設(shè)計的調(diào)試環(huán)境KeilC51是美國KeilSoftware公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。用過匯編語言后再使用C來開發(fā),體會更加深刻[13]。KeilC51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到KeilC51生成的目標代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。KeilC51單片機軟件開發(fā)系統(tǒng)的整體結(jié)構(gòu)中uVision與Ishell分別是C51forWindows和forDos的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及A51編譯器編譯生成目標文件(.OBJ)。目標文件可由LIB51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標準的Hex文件,以供調(diào)試器dScope51或tScope51使用進行源代碼級調(diào)試,也可由仿真器使用直接對目標板進行調(diào)試,也可以直接寫入程序存貯器如EPROM中。4.1.2程序仿真環(huán)境Protues軟件是英國Labcenterelectronics公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機及外圍器件。它是目前最好的仿真單片機及外圍器件的工具。雖然目前國內(nèi)推廣剛起步,但已受到單片機愛好者、從事單片機教學的教師、致力于單片機開發(fā)應(yīng)用的科技工作者的青睞。Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計,真正實現(xiàn)了從概念到產(chǎn)品的完整設(shè)計。是目前世
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度總經(jīng)理職位聘請與保密協(xié)議合同
- 2025版美容機構(gòu)美容師專業(yè)聘用及培訓合同范本3篇
- 課題申報參考:南宋私家本朝史籍修撰及其家國書寫研究
- 課題申報參考:民國時期六大疫災(zāi)的時空變遷規(guī)律、環(huán)境機理與社會影響對比研究
- 二零二五年度智慧城市規(guī)劃設(shè)計咨詢服務(wù)合同2篇
- 二零二五年度內(nèi)衣品牌授權(quán)銷售區(qū)域保護合同規(guī)范
- 2025版模板智慧農(nóng)業(yè)解決方案合同2篇
- 2025年度衛(wèi)星通信設(shè)備銷售與維護合同4篇
- 2025年度智能零售店鋪門面租賃與系統(tǒng)支持合同
- 2025年度個人買賣房屋貸款合同規(guī)范2篇
- 采購支出管理制度
- 兒科護理安全警示教育課件
- 三年級下冊口算天天100題
- 國家中英文名稱及代碼縮寫(三位)
- 人員密集場所消防安全培訓
- 液晶高壓芯片去保護方法
- 使用AVF血液透析患者的護理查房
- 拜太歲科儀文檔
- 2021年高考山東卷化學試題(含答案解析)
- 2020新譯林版高中英語選擇性必修一重點短語歸納小結(jié)
- GB/T 19668.7-2022信息技術(shù)服務(wù)監(jiān)理第7部分:監(jiān)理工作量度量要求
評論
0/150
提交評論