




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
基于單片機數(shù)字溫度計的設計摘要:本文綜述了數(shù)字溫度計的設計與制作過程,介紹了設計制作一個完整的數(shù)字溫度計需要做的準備與制作過程,通過一段時間的努力制作,從剛開始透徹理解題目要求及所要設計的產品的各項性能功能,然后覺得利用單片機作為控制內核,其次主要的就是溫度傳感器DS18B20,及其他重要部分電路的配合下設計出一套完整的硬件系統(tǒng),及它的靈魂軟件系統(tǒng)。得到了一種基于單片機控制的數(shù)字溫度計。本設計所介紹的數(shù)字溫度計與傳統(tǒng)的溫度計相比,具有讀數(shù)方便,測溫范圍廣,測溫準確,其輸出溫度采用數(shù)字顯示,該設計控制器使用單片機AT89S51,測溫傳感器使用DS18B20,用4位共陽極LED數(shù)碼管以串口傳送數(shù)據(jù),實現(xiàn)溫度顯示,能準確達到以上要求。關鍵詞:單片機,數(shù)字控制,溫度計,DS18B20,AT89S51
目錄前言 4第一章系統(tǒng)方案設計 51.1溫度測量系統(tǒng)功能描述 51.2系統(tǒng)設計性能指標 51.3DS18B20工作原理 61.3.1性能特點 61.3.2外部結構 61.3.3內部結構 71.3.4DS18B20測溫原理 91.4AT89C51簡介 101.5顯示部分 11第二章系統(tǒng)硬件電路設計 152.1DS18B20溫度傳感器的連接 152.2單片機端口連接 15第三章系統(tǒng)軟件設計 173.1主程序 173.2讀出溫度子程序 183.3溫度轉換命令子程序 193.4計算溫度子程序 203.5顯示數(shù)據(jù)刷新子程序 20第四章系統(tǒng)調試及仿真 354.1系統(tǒng)程序調試 354.2系統(tǒng)軟硬件仿真 35第五章總結 39參考文獻 40前言在一些溫度測量系統(tǒng)電路中,廣泛采用的是通過熱電偶、熱電阻或PN結測溫電路經過相應的信號調理電路,轉換成A/D轉換器能接收的模擬量,再經過采樣/保持電路進行A/D轉換,最終送入單片機及其相應的外圍電路,完成監(jiān)控。但是由于傳統(tǒng)的信號調理電路實現(xiàn)復雜、易受干擾、不易控制且精度不高。本溫度測量儀采用單片機結合DS18B20智能溫度傳感器控制系統(tǒng)設計,因此,本系統(tǒng)用一種新型的可編程溫度傳感器(DS18B20),不需復雜的信號調理電路和A/D轉換電路能直接與單片機完成數(shù)據(jù)采集和處理,實現(xiàn)方便、精度高,可根據(jù)不同需要用于各種場合。第一章系統(tǒng)方案設計1.1溫度測量系統(tǒng)功能描述采用8051單片機和溫度傳感器DS18B20設計一種數(shù)字溫度計,測溫范圍為-55到128℃,由按鍵設定溫度報警上下限值TH和TL,采用點陳字符液晶模塊作為數(shù)字溫度計的顯示部分,分兩行顯示,第一行顯示工作狀態(tài),正常時顯示“DS18B20OK”,不正常時顯示“DS18B20ERROR”;第二行顯示實測溫度值和狀態(tài)符號,“>H”表示實測溫度值大于溫度報警值TH,“<L”表示實測溫度小于溫度報警值TL,“!”表示實測溫度位于設定的溫度范圍之內。當實測溫度超過設定溫度限制范圍時,發(fā)出聲光報警信號。1.2系統(tǒng)設計性能指標測溫范圍為-55125℃,誤差在+1℃以內。DS18B20最高分辨率可達0.0625℃,所以系統(tǒng)誤差指標可以限制在+1℃以內。按照系統(tǒng)設計功能的要求,確定系統(tǒng)由3個模塊組成:主控制器,測溫電路和顯示電路。溫度測量儀總體電路結構框圖如圖1.1所示。圖1.1溫度測量儀電路結構框圖本溫度測量儀設計采用美國DALLAS半導體公司的智能型傳感器DS18B20作為檢測元件,測溫范圍限制在-55-125℃。DS18B20可以直接讀出被測量溫度值,而且采用三線制與單片機相連,減少了外部的硬件電路,具有低成本和易使用的特點。系統(tǒng)硬件電路由單片機AT89C51、字符液晶顯示器LM016L和1k×8的排阻構成。單片機實現(xiàn)對LCD命令和顯示數(shù)據(jù)的讀寫控制功能。1.3DS18B20工作原理一、性能特點DS18B20溫度傳感器與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9—12位的數(shù)字值讀數(shù)方式。DS18B20的性能特點如下:a.獨特的單線接口僅需要一個端口引腳進行通信;b.多個DS18B20可以并聯(lián)在唯一的三線上,實現(xiàn)多點組網功能;c.不需要外部器件d.可通過數(shù)據(jù)線供電,電壓范圍為3.0—5.5V;e.零待機功耗;f.溫度以9—12位數(shù)字量讀出;g.用戶可定義的非易失性溫度報警設置;h.報警搜索命令識別并標志超過程序限定溫度的器件;i.負電壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,只是不能正常工作;二、外部結構DS18B20采用3腳PR-35封裝或8腳SOIC封裝。引腳排列及說明如圖1.2與表1.1所示。圖1.2DS18B20引腳排列表1.1詳細引腳說明三、內部結構內部結構框圖如圖1.3所示。圖1.3DS18B20內部結構框圖高速暫存RAM的結構為9字節(jié)的存儲器,第5字節(jié)為配置寄存器,其內容用于確定溫度值的數(shù)字轉換分辨率,該字節(jié)的定義如圖1.4所示,其中,低5位一直為1;TM是測試模式位,用于設置DS18B20在工作模式還是在測試模式,在DS18B20出廠時,該位被設置為0,用戶不要去改動;R1和R0決定溫度轉換的精度位數(shù),即用來設置分辨率,其定義方法見表1.2。表1.2DS18B20分辨率的定義和規(guī)定R1R0分辨率/位溫度最大轉換時間/ms00993.750110187.510113751112750TMR1R011111圖1.4配置寄存器位定義四DS18B20測溫原理DS18B20測溫原理圖如圖1.5所示圖1.5DS18B20測溫原理圖DS18B20是這樣測溫的:用一個高溫系數(shù)的振蕩器確定一個門周期,內部計數(shù)器在這個門周期內對一個低溫度系數(shù)的振蕩器的脈沖進行計數(shù)來得到溫度值。計數(shù)器被預置到對應與-55℃的一個值。如果計數(shù)器在門周期結束前到達0,則溫度寄存器(同樣被預置到-55℃)的值增加,表明所測溫度大于-55℃。同時,計數(shù)器被復位到一個值,這個值由斜坡式累加器電路確定,斜坡式累加器電路用來補償感溫振蕩器的拋物線特性。然后計數(shù)器又開始計數(shù)直到0,如果門周期仍未結束,將重復這一過程。斜坡式累加器用來補償感溫振蕩器的非線性,以期在測溫時獲得比較高的分辨力。這是通過改變計數(shù)器對溫度每增加一度所需計數(shù)的值來實現(xiàn)的。因此,要想獲得所需的分辨力,必須同時知道在給定溫度下計數(shù)器的值和每一度的計算值。DS18B20內部對此計算的結果可提供0.5℃的分辨力。溫度以16bit帶符號位擴展的二進制補碼形式讀出,DS18B20溫度與表示值如表1.3所示。表1.3DS18B20溫度與表示值對應表溫度測量儀系統(tǒng)控制器使用單片機AT89C51,用三位共陰LED數(shù)碼管以動態(tài)掃描法實現(xiàn)溫度顯示。1.4AT89C51簡介AT89C51是1種低功耗、高性能的片內含有4KB閃爍可編程、可擦除只讀存儲器(FlashProgrammableandErasableReadOnlyMemory)的8位CMOS單片機,并且與MCS-51系列單片機引腳和指令系統(tǒng)完全兼容。芯片上的FPEROM允許在線編程或采用通用的編程器對其重復編程,而且性能價格比高。所以本控制系統(tǒng)選用它作為我們的控制器。AT89C51的性能及片內閃爍存儲器AT89C51的主要性能包括:與MCS-51微控制器系列產品兼容。片內有4KB可在線重復編程的閃爍存儲器(FlashMemory)。存儲器可循環(huán)寫入/擦除1萬次。存儲器數(shù)據(jù)保存時間為10年寬工作電壓范圍:Vcc可為+2.7V+6V.全靜態(tài)工作:可從0Hz—16MHz.程序存儲器具有3級加密保護。空閑狀態(tài)維持低功耗和掉電狀態(tài)保存存儲器內容。片內閃爍存儲器(FlashMemory)由于E2PROM具有在線改寫,并在掉電后仍能保存數(shù)據(jù)的特點,可為我們的特殊應用提供便利。但是,擦除和寫入對于要有數(shù)據(jù)高速吞吐的應用還顯得時間過長,這是E2PROM的主要缺陷。表產1.4列出了幾種典型E2PROM芯片的主要性能數(shù)據(jù)。表1.4幾種典型E2PROM芯片的主性能型號性能參數(shù)28162816A28172817A2864A取數(shù)時間/ms250200/250250200/250250擦/寫電壓/V2152155字節(jié)擦除時間/ms109-15101010寫入時間/ms109-15101010由表1.4可見,所列各種芯片的字節(jié)擦除時間和寫入時間基本上均為10ms,這樣長的時間對于許多實際應用是不能接受的。因此,將存儲器集成到單片機芯片內,設法縮短此類存儲器的擦除和寫入時間是1個首要的問題。片內閃爍存儲器(FlashMemory)的概念就是在這種背景下提出來的。目前,美國ATMEL公司生產的帶有片內閃爍存儲器的AT89C51/89C52/89C55單片機,由于價格便宜,且與MCS-51系列兼容,受到了我國廣大工程技術人員的歡迎,使用該系列單片機,省去了外擴存儲器的工作,只需了解片內閃爍存儲器的特性以及如何對其編程即可。片內閃爍存儲器的編程AT89C51的I/O口P0、P1、P2和P3除具有與MCS-51相同的一些性能和用途外,在FPEROM編程時,P0口還可接收代碼字節(jié),但在程序校驗時要外加上拉負載電阻。在FPEROM編程和程序校驗期間,P1口接收低地址字節(jié),P2口接收高地址位和一些控制信號,P3口也接收FPEROM編程和校驗用的控制信號。此時,ALE/引腳是編程脈沖輸入()端。對AT89C51片內的閃爍存儲器編程,只需在市場上購買相應的編程器,按照編程器的說明進行操作。如想對寫入的內容加密,只需按照編程器的菜單,選擇加密功能選項即可。1.5顯示部分在電子系統(tǒng)設計中,一般都需要有顯示器的存在。作為當前主流的顯示器件,液晶顯示器(LCD)的應用越來越廣泛。從顯示容量上劃分,LCD可分為兩種類型,一種是“AlphaNumericLCDs”,只能顯示字符和數(shù)字;另一種是“GraphicalLCDs”,既能顯示字符和數(shù)字,還能顯示圖形。漢字顯示需要后一種點陣圖形式LCD。液晶顯示器是由液晶顯示屏及控制器兩部分組成的,不同的液晶顯示器所對應的控制器不盡相同,了解LCD控制器的控制功能是設計液晶顯示的關鍵[3]一、液晶模塊簡介LM016L的結構及功能LM016L液晶模塊采用HD44780控制器,hd44780具有簡單而功能較強的指令集,可以實現(xiàn)字符移動,閃爍等功能,LM016L與單片機MCU通訊可采用8位或4位并行傳輸兩種方式,hd44780控制器由兩個8位寄存器,指令寄存器(IR)和數(shù)據(jù)寄存器(DR)忙標志(BF),顯示數(shù)RAM(DDRAM),字符發(fā)生器ROMA(CGOROM)字符發(fā)生器RAM(CGRAM),地址計數(shù)器RAM(AC)。IR用于寄存指令碼,只能寫入不能讀出,DR用于寄存數(shù)據(jù),數(shù)據(jù)由內部操作自動寫入DDRAM和CGRAM,或者暫存從DDRAM和CGRAM讀出的數(shù)據(jù),BF為1時,液晶模塊處于內部模式,不響應外部操作指令和接受數(shù)據(jù),DDTAM用來存儲顯示的字符,能存儲80個字符碼,CGROM由8位字符碼生成5*7點陣字符160中和5*10點陣字符32種.8位字符編碼和字符的對應關系,可以查看參考文獻(30)中的表4.CGRAM是為用戶編寫特殊字符留用的,它的容量僅64字節(jié),可以自定義8個5*7點陣字符或者4個5*10點陣字符,AC可以存儲DDRAM和CGRAM的地址,如果地址碼隨指令寫入IR,則IR自動把地址碼裝入AC,同時選擇DDRAM或CGRAM但愿,LM016L液晶模塊的引腳功能如下表所示:引腳說明引腳說明引腳說明引腳說明1602字符型LCD通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線VCC(15腳)和地線GND(16腳),其控制原理與14腳的LCD完全一樣,其中:引腳符號功能說明1VSS一般接地2VDD接電源(+5V)3V0液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高(對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度)。4RSRS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄存器。5R/WR/W為讀寫信號線,高電平(1)時進行讀操作,低電平(0)時進行寫操作。6EE(或EN)端為使能(enable)端,下降沿使能。7DB0底4位三態(tài)、雙向數(shù)據(jù)總線0位(最低位)8DB1底4位三態(tài)、雙向數(shù)據(jù)總線1位9DB2底4位三態(tài)、雙向數(shù)據(jù)總線2位10DB3底4位三態(tài)、雙向數(shù)據(jù)總線3位11DB4高4位三態(tài)、雙向數(shù)據(jù)總線4位12DB5高4位三態(tài)、雙向數(shù)據(jù)總線5位13DB6高4位三態(tài)、雙向數(shù)據(jù)總線6位14DB7高4位三態(tài)、雙向數(shù)據(jù)總線7位(最高位)(也是busyflang)15BLA背光電源正極16BLK背光寄存器選擇控制表RSR/W操作說明00寫入指令寄存器(清除屏等)01都busyflag(DB7),以及讀取位址計數(shù)器(DB0~DB6)值10寫入數(shù)據(jù)寄存器(顯示各字型等)11從數(shù)據(jù)寄存器讀取數(shù)LM016L的工作原理LM016L是16×2數(shù)碼液晶顯示器,每行可顯示16個字符,共2行。LM016L的控制器為HD44780,與液晶屏集成在一起。HD44780有3個存儲器,分別是字符存儲器CGROM、顯示數(shù)據(jù)存儲器DDRAM和字符產生器CGRAM。在LM016L的CGROM中,共有192個可供顯示的字符和數(shù)字,其中5×7(寬×高)字符150個,5×10(寬×高)字符42個。LM016L分行顯示時,只能顯示5×7字體的字符,想要顯示5×10字符,只能單行顯示。如果要顯示除CGROM中192個字符以外的其它字符,可以自定義最多8個特殊字符寫入CGRAM中以供顯示調用。DDRAM與液晶顯示屏上的位置是映射關系,只要把CGROM或CGRAM中的字符成功寫入對應的DDRAM地址,便可在LCD上顯示出相應的字符。單行顯示時,DDRAM的顯示地址自左至右分別為80H~87H,C1H~C7H;雙行顯示時,顯示地址首行自左至右為80H~8FH,第2行自左至右為C0H~CFH。HD44780的控制端有3個,分別是RS、RW和E。RS=0時,配合讀寫控制端RW實現(xiàn)命令讀寫;RS=1時,配合讀寫控制端RW實現(xiàn)顯示數(shù)據(jù)的讀寫。RW是LCD的讀寫控制端,RW=0為寫有效;RW=1為讀有效。E為LCD的使能信號,每次讀寫都需要產生一個寬450ns周期為1000ns的脈沖信號[5,6]。HD44780的寫時序如圖2所示。從圖2中可以看出,每次讀寫數(shù)據(jù)時,先使RS和RW有效,然后E(圖中為EN)脈沖信號有效,E脈沖信號應先為高電平后為低電平。最后通過D0~D7送出命令或數(shù)據(jù),也可以把送出命令或數(shù)據(jù)放在第一步。HD44780的控制命令共有11條,主要用來控制光標的顯示方式、單行或雙行顯示方式、4線或8線數(shù)據(jù)傳輸方式、存儲器地址指針增減方等,可以根據(jù)不同的設計需求選用不同的命令形式[4]第二章系統(tǒng)硬件電路設計2.1DS18B20溫度傳感器的連接測溫儀電路設計原理圖如圖2.1—2.3所示,控制器使用單片機AT89C51,溫度傳感器使用DS18B20,用字符液晶顯示器LM016L和1k×8的排阻構成。DS18B20溫度傳感器提供9位(二進制)溫度讀數(shù)。信息經過單線接口送入DSB1820或從DS18B20送出,因此從單片機到DS18B20僅需一條線(和地線)。DS18B20的電源可以由數(shù)據(jù)線本身提供而不需要外部電源。如圖2.1所示。89C51對DS18B20的數(shù)字量輸出讀入,即讀P2.5端口。如圖2.1所示。圖2.1測溫儀電路設計原理圖(左)2.2單片機端口連接P0口作數(shù)據(jù)口,與LM016L的D0~D7相接,在P0口與D0~D7數(shù)據(jù)線之間分別接8個上拉電阻,以確保電路能夠正常顯示。AT89C51的P2口作為LCD的控制線,P2.0~P2.2分別接LM016L的RS、RW和E端;LM016L的其它3個控制端VDD和VSS、VEE分別接電源和地。系統(tǒng)硬件電路組成如圖1所示89C51對讀入的數(shù)據(jù)處理后先輸出到P0端口,然后鎖存器74LS373將P0口的輸出字數(shù)據(jù)進行鎖存。鎖存命令由89C51單片機發(fā)出,鎖存地址為7FFFH。如圖2.2所示。圖2.2測溫儀電路設計原理圖
第三章系統(tǒng)軟件設計本控制系統(tǒng)軟件設計基于軟件工程[5]模塊化思想,將它分割成若干子模塊,每個模塊完成不同的功能,采用模塊化原理可以使軟件結構清晰,不僅容易設計也容易閱讀和理解,模塊化使得軟件容易測試和調試,易于擴展,有利于提高軟件的可靠性,減少系統(tǒng)開發(fā)的工作量。把一些具有獨立功能的模塊編成子程序,以便主程序調用,本控制系統(tǒng)模塊子程序包括:鍵值讀入子程序、顯示子程序、T0中斷控制子程序、外部中斷0子程序。本系統(tǒng)程序主要包括主程序、讀出溫度子程序、溫度轉換命令子程序、計算溫度子程序和顯示數(shù)據(jù)刷新子程序等。3.1主程序主程序的主要功能是負責溫度的實時顯示、讀出并處理DS18B20的測量溫度值。溫度測量每1s進行一次。主程序流程圖如圖3.1所示。圖3.1主程序流程圖3.2讀出溫度子程序讀出溫度子程序的主要功能是讀出RAM中的9字節(jié)。在讀出時須進行CRC校驗,校驗有錯時不進行溫度數(shù)據(jù)的改寫。讀出溫度子程序流程圖如圖3.2所示圖3.2讀出溫度子程序流程圖3.3溫度轉換命令子程序溫度轉換命令子程序主要是發(fā)溫度轉換開始命令。當采用12位分辨率時,轉換時間約為750ms.在本程序設計中,采用1s顯示程序延時法等待轉換的完成。溫度轉換命令子程序流程圖如圖3.3所示。圖3.3溫度轉換命令子程序流程圖3.4計算溫度子程序計算溫度子程序將RAM中讀取值進行BCD碼的轉換運算,并進行溫度值正負的判定。計算溫度子程序的流程圖如圖3.4所示。圖3.4計算溫度子程序的流程圖3.5顯示數(shù)據(jù)刷新子程序顯示刷新子程序主要是對顯示緩沖區(qū)中的顯示數(shù)據(jù)進行刷新操作,當最高數(shù)據(jù)顯示位為0時,將符號顯示位移入下一位。顯示數(shù)據(jù)刷新子程序流程圖如圖3.5所示。圖3.5顯示數(shù)據(jù)刷新子程序流程圖3.6程序清單TEMPHCEQU29H;正、負溫度值標記TEMPLCEQU2AHTEMPFCEQU2BHK1 EQUP1.4 ;查詢按鍵K2 EQUP1.5;設置/調整鍵K3 EQUP1.6;調整鍵K4 EQUP1.7;確定鍵BEEP EQUP3.7;蜂鳴器RELAY EQUP1.3;指示燈LCD_XEQU2FH;LCD字符顯示位置LCD_RSEQUP2.0;LCD寄存器選擇信號LCD_RWEQUP2.1;LCD讀寫信號LCD_ENEQUP2.2;LCD允許信號FLAG1EQU20H.0;DS18B20是否存在標志KEY_UDEQU20H.1;設定按鍵的增、減標志DQ EQUP3.3 ;DS18B20數(shù)據(jù)信號ORG0000HLJMPMAIN ORG0030HMAIN:MOVSP,#60HMOVA,#00HMOVR0,#20H ;將20H~2FH單元清零MOVR1,#10HCLEAR:MOV@R0,AINCR0DJNZR1,CLEARLCALLSET_LCDLCALLRE_18B20START:LCALLRST ;調用18B20復位子程序JNBFLAG1,START1 ;DS1820不存在LCALLMENU_OK ;DS1820存在,調用顯示正確信息子程序 MOV TEMP_TH,#055H ;設置TH初值85度 MOV TEMP_TL,#019H ;設置TL初值25度 LCALLRE_18B20A ;調用暫存器操作子程序LCALLWRITE_E2 ;寫入DS18B20LCALLTEMP_BJ ;顯示溫度標記JMPSTART2START1:LCALLMENU_ERROR ;調用顯示出錯信息子程序LCALLTEMP_BJ ;顯示溫度標記SJMP$START2:LCALLRST ;調用DS18B20復位子程序JNBFLAG1,START1 ;DS18B20不存在MOVA,#0CCH ;跳過ROM匹配命令LCALLWRITEMOVA,#44H ;溫度轉換命令LCALLWRITELCALLRSTMOVA,#0CCH ;跳過ROM匹配LCALLWRITEMOVA,#0BEH ;讀溫度命令LCALLWRITELCALLREAD ;調用DS18B20數(shù)據(jù)讀取操作子程序LCALLCONVTEMP ;調用溫度數(shù)據(jù)BCD碼處理子程序LCALLDISPBCD ;調用溫度數(shù)據(jù)顯示子程序LCALLCONV ;調用LCD顯示處理子程序LCALLTEMP_COMP ;調用實測溫度值與設定溫度值比較子程序LCALLPROC_KEY ;調用鍵掃描子程序 SJMPSTART2 ;循環(huán);***********************鍵掃描子程序*****************************PROC_KEY:JBK1,PROC_K1 LCALLBEEP_BLJNBK1,$MOVDPTR,#M_ALAX1MOVA,#1LCALLLCD_PRINTLCALLLOOK_ALARMJBK3,$LCALLBEEP_BLJMPPROC_K2PROC_K1:JBK2,PROC_END LCALLBEEP_BLJNBK2,$MOVDPTR,#RST_A1MOVA,#1LCALLLCD_PRINTLCALLSET_ALARMLCALLRE_18B20;將設定的TH,TL值寫入DS18B20LCALLWRITE_E2PROC_K2:LCALLMENU_OKLCALLTEMP_BJPROC_END:RET;*******************設定溫度報警值TH、TL************************SET_ALARM:LCALLLOOK_ALARMAS0:JBK1,AS00LCALLBEEP_BLJNBK1,$CPL20H.1;UP/DOWN標記AS00:JB20H.1,ASZ01;20H.1=1,增加JMPASJ01;20H.1=0,減小ASZ01:JBK2,ASZ02;TH值調整(增加)LCALLBEEP_BLINCTEMP_THMOVA,TEMP_THCJNEA,#120,ASZ011MOVTEMP_TH,#0ASZ011:LCALLLOOK_ALARMMOVR5,#10LCALLDELAYJMPASZ01ASZ02:JBK3,ASZ03 ;TL值調整(增加)LCALLBEEP_BLINCTEMP_TLMOVA,TEMP_TLCJNEA,#99,ASZ021MOVTEMP_TL,#00HASZ021:LCALLLOOK_ALARMMOVR5,#10LCALLDELAYJMPASZ02ASZ03:JBK4,AS0 ;確定調整LCALLBEEP_BLJNBK4,$RETASJ01:JBK2,ASJ02 ;TH值調整(減少)LCALLBEEP_BLDECTEMP_THMOVA,TEMP_THCJNEA,#0FFH,ASJ011JMPASJ022ASJ011:LCALLLOOK_ALARMMOVR5,#10LCALLDELAYJMPAS0ASJ02:JBK3,ASJ03 ;TL值調整(減少)LCALLBEEP_BLDECTEMP_TLMOVA,TEMP_TLCJNEA,#0FFH,ASJ021JMPASJ022ASJ021:LCALLLOOK_ALARM;MOVR5,#10LCALLDELAYJMPAS0ASJ022:CPL20H.1JMPASZ01ASJ03:JMPASZ03RETRST_A1:DB"SETALERTCODE",0;**************實測溫度值與設定溫度值比較子程序*******************TEMP_COMP:MOV A,TEMP_THSUBB A,TEMP_ZH ;減數(shù)>被減數(shù),則JC CHULI1 ;借位標志位C=1,轉 MOV A,TEMPFC CJNE A,#0BH,COMP SJMP CHULI2COMP:MOVA,TEMP_ZHSUBBA,TEMP_TL ;減數(shù)>被減數(shù),則JCCHULI2 ;借位標志位C=1,轉MOVDPTR,#BJ5LCALLTEMP_BJ3CLRRELAY ;點亮指示燈RETCHULI1:MOVDPTR,#BJ3LCALLTEMP_BJ3SETBRELAY;熄滅指示燈LCALLBEEP_BL ;蜂鳴器響RETCHULI2:MOVDPTR,#BJ4LCALLTEMP_BJ3SETBRELAY;熄滅指示燈LCALLBEEP_BL ;蜂鳴器響RET;TEMP_BJ3:MOVA,#0CEHLCALLWCOMMOVR1,#0MOVR0,#2BBJJ3:MOVA,R1MOVCA,@A+DPTRLCALLWDATAINCR1DJNZR0,BBJJ3RETBJ3:DB">H"BJ4:DB"<L"BJ5:DB"!";;*******************顯示溫度標記子程序***********************TEMP_BJ:MOVA,#0CBHLCALLWCOMMOVDPTR,#BJ1 ;指針指到顯示消息MOVR1,#0MOVR0,#2BBJJ1:MOVA,R1MOVCA,@A+DPTRLCALLWDATAINCR1DJNZR0,BBJJ1RETBJ1:DB00H,"C";********************顯示正確信息子程序************************MENU_OK:MOVDPTR,#M_OK1 ;指針指到顯示消息MOVA,#1 ;顯示在第一行LCALLLCD_PRINTMOVDPTR,#M_OK2 ;指針指到顯示消息MOVA,#2 ;顯示在第一行LCALLLCD_PRINTRETM_OK1:DB"DS18B20OK",0M_OK2:DB"TEMP:",0;********************顯示出錯信息子程序***********************MENU_ERROR:MOVDPTR,#M_ERROR1;指針指到顯示消息MOVA,#1 ;顯示在第一行LCALLLCD_PRINTMOVDPTR,#M_ERROR2 ;指針指到顯示消息1MOVA,#2 ;顯示在第一行LCALLLCD_PRINTRETM_ERROR1:DB"DS18B20ERROR",0M_ERROR2:DB"TEMP:",0;*********************DS18B20復位子程序************************RST: SETBDQNOPCLRDQMOVR0,#6BH;主機發(fā)出延時復位低脈沖MOVR1,#04HTSR1:DJNZR0,$MOVR0,#6BHDJNZR1,TSR1SETBDQ ;拉高數(shù)據(jù)線NOPNOPNOPMOVR0,#32HTSR2:JNBDQ,TSR3 ;等待DS18B20回應DJNZR0,TSR2JMPTSR4;延時TSR3:SETBFLAG1;置1標志位,表示DS1820存在JMPTSR5TSR4:CLRFLAG1;清0標志位,表示DS1820不存在JMPTSR7TSR5:MOVR0,#06BHTSR6:DJNZR0,$;時序要求延時一段時間TSR7:SETBDQRET;****************DS18B20暫存器操作子程序**********************RE_18B20:JBFLAG1,RE_18B20ARETRE_18B20A:LCALLRSTMOVA,#0CCH ;跳過ROM匹配LCALLWRITEWR_SCRAPD:MOVA,#4EH ;寫暫器LCALLWRITEMOVA,TEMP_TH ;TH(報警上限)LCALLWRITEMOVA,TEMP_TL ;TL(報警下限)LCALLWRITEMOVA,#7FH ;12位精度LCALLWRITERET;******************復制暫存器子程序***************************WRITE_E2:LCALLRSTMOVA,#0CCH ;跳過ROM匹配LCALLWRITEMOVA,#48H ;把暫存器里的溫度報警值拷貝到EEROMLCALLWRITERET;*****************重讀EEROM子程序****************************READ_E2:LCALLRSTMOVA,#0CCH ;跳過ROM匹配LCALLWRITEMOVA,#0B8H ;把EEROM里的溫度報警值拷貝回暫存器LCALLWRITERET;****************將自定義字符寫入LCD的CGRAM中*****************STORE_DATA:MOVA,#40HLCALLWCOMMOVR2,#08HMOVDPTR,#D_DATAMOVR3,#00HS_DATA:MOVA,R3MOVCA,@A+DPTRLCALLWDATA ;寫入數(shù)據(jù)INCR3DJNZR2,S_DATARETD_DATA:DB0CH,12H,12H,0CH,00H,00H,00H,00H;******************DS18B20數(shù)據(jù)寫入操作子程序********************WRITE:MOVR2,#8 ;一共8位數(shù)據(jù)CLRCWR1:CLRDQ ;開始寫入DS18B20總線要處于復位(低)狀態(tài)MOVR3,#07DJNZR3,$ ;總線復位保持16微妙以上RRCA ;把一個字節(jié)DATA分成8個BIT環(huán)移給CMOVDQ,C ;寫入一位MOVR3,#3CHDJNZR3,$ ;等待100微妙SETBDQ ;重新釋放總線NOPDJNZR2,WR1 ;寫入下一位SETBDQRET;*****************DS18B20數(shù)據(jù)讀取操作子程序*******************READ:MOVR4,#4 ;將溫度低位、高位、TH、TL從DS18B20中讀出MOVR1,#TEMPL ;存入25H、26H、27H、28H單元RE00:MOVR2,#8RE01:CLRCYSETBDQNOPNOPCLRDQ ;讀前總線保持為低NOPNOPNOPSETBDQ ;開始讀總線釋放MOVR3,#09 ;延時18微妙DJNZR3,$MOVC,DQ ;從DS18B20總線讀得一位MOVR3,#3CHDJNZR3,$ ;等待100微妙RRCA ;把讀得的位值環(huán)移給ADJNZR2,RE01 ;讀下一位MOV@R1,AINCR1DJNZR4,RE00RET;*******************溫度值BCD碼處理子程序********************CONVTEMP:MOVA,TEMPH;判溫度是否零下ANLA,#08HJZTEMPC1;溫度零上轉CLRCMOVA,TEMPL;二進制數(shù)求補(雙字節(jié))CPLA;取反加1ADDA,#01HMOVTEMPL,AMOVA,TEMPHCPLAADDCA,#00HMOVTEMPH,A MOVTEMPHC,#0BH ;負溫度標志 MOVTEMPFC,#0BHSJMPTEMPC11TEMPC1:MOVTEMPHC,#0AH ;正溫度標志 MOVTEMPFC,#0AHTEMPC11:MOVA,TEMPHCSWAPAMOVTEMPHC,AMOVA,TEMPLANLA,#0FH;乘0.0625MOVDPTR,#TEMPDOTTABMOVCA,@A+DPTRMOVTEMPLC,A;TEMPLCLOW=小數(shù)部分BCDMOVA,TEMPL;整數(shù)部分ANLA,#0F0H;取出高四位SWAPAMOVTEMPL,AMOVA,TEMPH;取出低四位ANLA,#0FHSWAPAORLA,TEMPL;重新組合MOVTEMP_ZH,ALCALLHEX2BCD1MOVTEMPL,AANLA,#0F0HSWAPAORLA,TEMPHC;TEMPHCLOW=十位數(shù)BCDMOVTEMPHC,AMOVA,TEMPLANLA,#0FHSWAPA;TEMPLCHI=個位數(shù)BCDORLA,TEMPLCMOVTEMPLC,AMOVA,R4JZTEMPC12ANLA,#0FHSWAPAMOVR4,AMOVA,TEMPHC;TEMPHCHI=百位數(shù)BCDANLA,#0FHORLA,R4MOVTEMPHC,ATEMPC12:RET;*******************二-十進制轉換子程序**********************HEX2BCD1:MOVB,#064HDIVABMOVR4,AMOVA,#0AHXCHA,BDIVABSWAPAORLA,BRETTEMPDOTTAB:DB00H,00H,01H,01H,02H,03H,03H,04H;小數(shù)部分碼表DB05H,05H,06H,06H,07H,08H,08H,09H;******************查詢溫度報警值子程序**********************LOOK_ALARM: MOVDPTR,#M_ALAX2 ;指針指到顯示信息區(qū)MOVA,#2 ;顯示在第二行LCALLLCD_PRINT MOVA,#0C6HLCALLTEMP_BJ1MOVA,TEMP_TH ;加載TH數(shù)據(jù)MOVLCD_X,#3 ;設置顯示位置LCALLSHOW_DIG2H ;顯示數(shù)據(jù)MOVA,#0CEHLCALLTEMP_BJ1MOVA,TEMP_TL ;加載TL數(shù)據(jù)MOVLCD_X,#12 ;設置顯示位置LCALLSHOW_DIG2L ;顯示數(shù)據(jù)RETM_ALAX1:DB"LOOKALERTCODE",0M_ALAX2:DB"TH:TL:",0TEMP_BJ1:LCALLWCOMMOVDPTR,#BJ2 ;指針指到顯示信息區(qū)MOVR1,#0MOVR0,#2BBJJ2:MOVA,R1MOVCA,@A+DPTRLCALLWDATAINCR1DJNZR0,BBJJ2RETBJ2:DB00H,"C";*******************LCD顯示子程序*****************************SHOW_DIG2H:MOVB,#100DIVABADDA,#30HPUSHBMOVB,LCD_XLCALLLCDP2POPBMOVA,#0AHXCHA,BDIVABADDA,#30HINCLCD_XPUSHBMOVB,LCD_XLCALLLCDP2POPBINCLCD_XMOVA,BMOVB,LCD_XADDA,#30HLCALLLCDP2RETSHOW_DIG2L:MOVB,#100DIVABMOVA,#0AHXCHA,BDIVABADDA,#30HPUSHBMOVB,LCD_XLCALLLCDP2POPBINCLCD_XMOVA,BMOVB,LCD_XADDA,#30HLCALLLCDP2RET;*****************顯示區(qū)BCD碼溫度值刷新子程序*****************DISPBCD:MOVA,TEMPLCANLA,#0FHMOV70H,A;小數(shù)位MOVA,TEMPLCSWAPAANLA,#0FHMOV71H,A;個位MOVA,TEMPHCANLA,#0FHMOV72H,A;十位MOVA,TEMPHCSWAPAANLA,#0FHMOV73H,A;百位DISPBCD2:RET;********************LCD顯示數(shù)據(jù)處理子程序*********************CONV:MOVA,73H ;加載百位數(shù)據(jù)MOVLCD_X,#6 ;設置位置CJNEA,#1,CONV1JMPCONV2CONV1:CJNEA,#0BH,CONV11 MOVA,#"-" ;"-"號顯示 JMPCONV111CONV11:MOVA,#"" ;"+"號不顯示CONV111:MOVB,LCD_XLCALLLCDP2JMPCONV3CONV2:LCALLSHOW_DIG2 ;顯示數(shù)據(jù)CONV3:INCLCD_XMOVA,72H ;十位LCALLSHOW_DIG2INCLCD_XMOVA,71H ;個位LCALLSHOW_DIG2INCLCD_XMOVA,#'.'MOVB,LCD_XLCALLLCDP2MOVA,70H ;加載小數(shù)點位INCLCD_X ;設置顯示位置LCALLSHOW_DIG2 ;顯示數(shù)據(jù)RET;********************第二行顯示數(shù)字子程序*********************SHOW_DIG2:ADDA,#30H MOVB,LCD_XLCALLLCDP2RET;*********************第二行顯示數(shù)字子程序*********************LCDP2:PUSHACC MOVA,B ;設置顯示地址ADDA,#0C0H ;設置LCD的第二行地址LCALLWCOM;寫入命令POPACC ;由堆棧取出ALCALLWDATA ;寫入數(shù)據(jù)RET;*****************對LCD做初始化設置及測試********************SET_LCD:CLRLCD_EN LCALLINIT_LCD;初始化LCDLCALLSTORE_DATA;將自定義字符存入LCD的CGRAMRET;************************LCD初始化**************************INIT_LCD:MOVA,#38H;2行顯示,字形5*7點陣LCALLWCOMLCALLDELAY1MOVA,#38HLCALLWCOMLCALLDELAY1MOVA,#38HLCALLWCOMLCALLDELAY1MOVA,#0CH;開顯示,顯示光標,光標不閃爍LCALLWCOMLCALLDELAY1MOVA,#01H;清除LCD顯示屏LCALLWCOMLCALLDELAY1RET;*********************清除LCD的第一行字符*********************CLR_LINE1:MOVA,#80H;設置LCD的第一行地址LCALLWCOMMOVR0,#24;設置計數(shù)值C1:MOVA,#'';載入空格符至LCDLCALLWDATA;輸出字符至LCDDJNZR0,C1;計數(shù)結束RET;*****************LCD的第一行或第二行顯示字符******************LCD_PRINT:CJNEA,#1,LINE2;判斷是否為第一行LINE1:MOVA,#80H;設置LCD的第一行地址LCALLWCOM;寫入命令LCALLCLR_LINE;清除該行字符數(shù)據(jù)MOVA,#80H;設置LCD的第一行地址LCALLWCOM;寫入命令JMPFILLLINE2:MOVA,#0C0H;設置LCD的第二行地址LCALLWCOM;寫入命令LCALLCLR_LINE;清除該行字符數(shù)據(jù)MOVA,#0C0H;設置LCD的第二行地址LCALLWCOMFILL:CLRA;填入字符MOVCA,@A+DPTR;由消息區(qū)取出字符CJNEA,#0,LC1;判斷是否為結束碼RETLC1:LCALLWDATA;寫入數(shù)據(jù)INCDPTR;指針加1JMPFILL;繼續(xù)填入字符RET;*******************清除1行LCD的字符***********************CLR_LINE:MOVR0,#24CL1:MOVA,#''LCALLWDATADJNZR0,CL1RETDE:MOVR7,#250DJNZR7,$RET;*******************LCD間接控制方式命令寫入******************WCOM:MOVP0,A;寫入命令CLRLCD_RS;RS=L,RW=L,D0-D7=指令碼,E=高脈沖CLRLCD_RWSETBLCD_ENLCALLDELAY1CLRLCD_ENRET;*******************LCD間接控制方式數(shù)據(jù)寫入*******************W
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 自卸汽車運碎石土施工方案
- 2025年金屬復合材項目發(fā)展計劃
- 黑龍江水下封堵施工方案
- 水泥屋頂光伏施工方案
- 河北立體綠化施工方案
- 數(shù)控加工工藝與編程技術基礎 教案 模塊三 項目三 自動編程(1-2)
- 2025年山東省聊城市高三下學期一模生物試題(原卷版+解析版)
- 智研咨詢發(fā)布:2025年中國制氫催化電極行業(yè)市場全景調查及投資前景預測報告
- 【市占率證明權威指南】制藥裝備行業(yè)市占率全解(智研咨詢發(fā)布)
- 低碳技術的研發(fā)與應用策略
- 基于核心素養(yǎng)導向大單元教學設計培訓課件(共41張ppt)
- 滁州康華電子材料有限公司(5G 基站)集成線路板相關材料項目環(huán)境影響報告書
- 工程項目客戶評價表
- 兒童安全座椅行業(yè)基本風險特征分析
- 景觀藝術原理-670年代以來的景觀設計新思潮
- 餓了么外賣送餐規(guī)章制度
- GB/T 14002-1992勞動定額術語
- GB/T 12688.1-2011工業(yè)用苯乙烯試驗方法第1部分:純度和烴類雜質的測定氣相色譜法
- 9-馬工程《藝術學概論》課件-第九章(20190403)【已改格式】.課件電子教案
- 體育賽事管理課程第一篇第一章體育賽事運作管理緒論課件
- 社區(qū)工作者經典備考題庫(必背300題)
評論
0/150
提交評論