微型計(jì)算機(jī)原理及應(yīng)用課件-第7章-3_第1頁(yè)
微型計(jì)算機(jī)原理及應(yīng)用課件-第7章-3_第2頁(yè)
微型計(jì)算機(jī)原理及應(yīng)用課件-第7章-3_第3頁(yè)
微型計(jì)算機(jī)原理及應(yīng)用課件-第7章-3_第4頁(yè)
微型計(jì)算機(jī)原理及應(yīng)用課件-第7章-3_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

7.2基于8051的數(shù)字溫度計(jì)設(shè)計(jì)7.2.1數(shù)字溫度計(jì)功能要求

采用8051單片機(jī)和溫度傳感器DS18B20設(shè)計(jì)一種數(shù)字溫度計(jì),測(cè)溫范圍為-55℃~128℃,測(cè)量精度為0.1℃,由按鍵設(shè)定溫度報(bào)警上下限TH和TL,采用點(diǎn)陣字符型液晶模塊作為數(shù)字溫度計(jì)的顯示器,分兩行顯示,第一行顯示工作狀態(tài),正常時(shí)顯示“DS18B20OK”,不正常時(shí)顯示“DS18B20ERROR”;第二行顯示實(shí)測(cè)溫度值和狀態(tài)符號(hào),“>H”表示實(shí)測(cè)溫度大于溫度報(bào)警值TH,“<L”表示實(shí)測(cè)溫度小于溫度報(bào)警值TL,“!”表示實(shí)測(cè)溫度位于設(shè)定的溫度范圍之內(nèi)。當(dāng)實(shí)測(cè)溫度超過(guò)設(shè)定溫度限制范圍時(shí),發(fā)出聲光報(bào)警信號(hào)。7.2.2數(shù)字溫度計(jì)硬件電路設(shè)計(jì)

溫度傳感器DS18B20是一種新型數(shù)字溫度傳感器,它采用獨(dú)特的單線接口方式,僅需一個(gè)端口引腳來(lái)發(fā)送或接收信息,在單片機(jī)和DS18B20之間僅需一條數(shù)據(jù)線和一條地線進(jìn)行接口。1.DS18B20各引腳功能(1)GND:地。(2)DQ:?jiǎn)尉€應(yīng)用的數(shù)據(jù)輸入/輸出引腳。(3)VDD:可選的外部供電電源引腳。DS18B20內(nèi)部有:64位激光ROM、溫度傳感器、非易失性溫度報(bào)警觸發(fā)器TH和TL3個(gè)主要數(shù)字部件。2.DS18B20供電方式DS18B20可以采用寄生電源方式工作,從單總線上汲取能量,在信號(hào)線處于高電平期間把能量?jī)?chǔ)存在內(nèi)部電容里,在信號(hào)線處于低電平期間消耗電容上的電能工作,直到高電平到來(lái)再給寄生電源(電容)充電。DS18B20也可用外部3~5.5V電源供電。3.DS18B20單線通信協(xié)議及配置寄存器DS18B20依靠一個(gè)單線端口通信,必須先建立ROM操作協(xié)議,才能進(jìn)行存儲(chǔ)器和控制操作。(1)讀出ROM,代碼為33H,用于讀出DS18B20的序列號(hào),即64位激光ROM代碼。(2)匹配ROM,代碼為55H,用于辨別(或選中)某一特定的DS18B20進(jìn)行操作。(3)搜索ROM,代碼為F0H,用于確定總線上的節(jié)點(diǎn)數(shù)以及所有節(jié)點(diǎn)的序列號(hào)。(4)跳過(guò)ROM,代碼為CCH,命令發(fā)出后系統(tǒng)將對(duì)所有DS18B20進(jìn)行操作,通常用于啟動(dòng)所有DS18B20轉(zhuǎn)換之前,或系統(tǒng)中僅有一個(gè)DS18B20時(shí)。(5)報(bào)警搜索,代碼為ECH,主要用于鑒別和定位系統(tǒng)中超出程序設(shè)定的報(bào)警溫度界限的節(jié)點(diǎn)。4.DS18B20存儲(chǔ)器操作命令(1)溫度轉(zhuǎn)換,代碼為44H,用于啟動(dòng)DS18B20進(jìn)行溫度測(cè)量,溫度轉(zhuǎn)換命令被執(zhí)行后DS18B20保持等待狀態(tài)。如果主機(jī)在這條命令之后跟著發(fā)出讀時(shí)間隙,而DS18B20又忙于進(jìn)行溫度轉(zhuǎn)換,DS18B20將在總線上輸出“0”,若溫度轉(zhuǎn)換完成,則輸出“1”。如果使用寄生電源,主機(jī)必須在發(fā)出這條命令后立即啟動(dòng)強(qiáng)上拉,并保持750mS,在這段時(shí)間內(nèi)單總線上不允許進(jìn)行任何其它操作。

(2)讀暫存器,代碼為BEH,用于讀取暫存器中的內(nèi)容,從字節(jié)0開始最多可以讀取9個(gè)字節(jié),如果不想讀完所有字節(jié),主機(jī)可以在任何時(shí)間發(fā)出復(fù)位命令中止讀取。(3)寫暫存器,代碼為4EH,用于將數(shù)據(jù)寫入到DS18B20暫存器的地址2和地址3(TH和TL字節(jié)),可以在任何時(shí)刻發(fā)出復(fù)位命令中止寫入。(4)復(fù)制暫存器,代碼為48H,用于將暫存器的內(nèi)容復(fù)制到DS18B20的非易失性E2RAM中,即把溫度報(bào)警觸發(fā)字節(jié)存入非易失性存儲(chǔ)器里。如果主機(jī)在這條命令之后跟著發(fā)出讀時(shí)間隙,而DS18B20又正在忙于把暫存器的內(nèi)容復(fù)制到E2RAM存儲(chǔ)器,DS18B20就會(huì)輸出1個(gè)“0”,如果復(fù)制結(jié)束的話,DS18B20則輸出“1”。如果使用寄生電源,主機(jī)必須在這條命令發(fā)出后立即啟動(dòng)強(qiáng)上拉并最少保持10mS,在這段時(shí)間內(nèi)單總線上不允許進(jìn)行任何其它操作。(5)重讀E2RAM,代碼為B8H,用于將存儲(chǔ)在非易失性E2RAM中的內(nèi)容重新讀入到暫存器(溫度觸發(fā)器)中。這種復(fù)制操作在DS18B20上電時(shí)自動(dòng)執(zhí)行,這樣器件只要上電,暫存器中馬上就存在有效的數(shù)據(jù)了。若在這條命令發(fā)出之后發(fā)出讀時(shí)間隙,器件會(huì)輸出溫度轉(zhuǎn)換忙的標(biāo)志,“0”代表忙,“1”代表完成。(6)讀電源,代碼為B4H,用于將DS18B20的供電方式信號(hào)發(fā)送到主機(jī)。若在這條命令發(fā)出之后發(fā)出讀時(shí)間隙,DS18B20將返回它的供電模式,“0”代表寄生電源,“1”代表外部電源。5.DS18B20數(shù)據(jù)讀寫1條溫度轉(zhuǎn)換命令啟動(dòng)DS18B20完成1次溫度測(cè)量,測(cè)量結(jié)果以二進(jìn)制補(bǔ)碼形式存放在的高速暫存器中,占用暫存器的字節(jié)1(LSB)和字節(jié)2(MSB)。用1條讀暫存器內(nèi)容的存儲(chǔ)器操作命令可以把暫存器中的數(shù)據(jù)讀出。溫度報(bào)警觸發(fā)器TH和TL各由1個(gè)E2RAM字節(jié)構(gòu)成,可以用1條寫存儲(chǔ)器操作命令對(duì)TH和TL進(jìn)行寫入,對(duì)這些寄存器的讀出需要通過(guò)暫存器。7.2.3數(shù)字溫度計(jì)軟件程序設(shè)計(jì)1.任務(wù)分析

數(shù)字溫度計(jì)的軟件程序包括主程序、DS18B20復(fù)位與檢測(cè)子程序、讀溫度子程序、溫度數(shù)據(jù)處理子程序、溫度顯示子程序、按鍵掃描子程序、報(bào)警值設(shè)定子程序、溫度比較子程序等。

(1)主程序首先進(jìn)行初始化,當(dāng)檢測(cè)到DS18B20存在時(shí)發(fā)出溫度轉(zhuǎn)換命令和讀溫度命令,再分別調(diào)用相應(yīng)的數(shù)據(jù)處理子程序,完成溫度測(cè)量及顯示工作。(2)DS18B20復(fù)位與檢測(cè)子程序的主要功能為檢測(cè)DS18B20是否存在。若存在則將標(biāo)志位FLAG1置1,不存在則將標(biāo)志位FLAG1置0。后續(xù)程序可以通過(guò)判斷標(biāo)志位來(lái)決定進(jìn)行何種操作。(3)讀溫度子程序只讀出DS18B20暫存器前4字節(jié)的數(shù)據(jù):溫度值LSB,溫度值MSB,溫度報(bào)警值TH和TL,并將它們分別存入26~29H。(4)溫度數(shù)據(jù)處理子程序首先判斷溫度值MSB的符號(hào)位,當(dāng)符號(hào)位S=0時(shí),表示測(cè)得的溫度值為正值,可以直接將二進(jìn)制轉(zhuǎn)換為十進(jìn)制;當(dāng)符號(hào)位S=1時(shí),表示測(cè)得的溫度值為負(fù)值,要先將補(bǔ)碼變成原碼,再計(jì)算十進(jìn)制值。計(jì)算時(shí)先將溫度值LSB的低4位取出,進(jìn)行小數(shù)部分?jǐn)?shù)據(jù)處理。再將溫度值LSB的高4位和溫度值MSB的低4位取出,重新組合后進(jìn)行整數(shù)部分?jǐn)?shù)據(jù)處理。(5)溫度顯示子程序?qū)腄S18B20讀出的溫度值,經(jīng)過(guò)數(shù)據(jù)處理后,送往LCD進(jìn)行實(shí)測(cè)溫度顯示。

(6)按鍵掃描子程序?qū)?shù)字溫度計(jì)的K1~K4鍵進(jìn)行掃描,得到鍵值,根據(jù)鍵值完成相應(yīng)操作。按下K1鍵查看溫度報(bào)警值,按下K3鍵返回。按下K2鍵設(shè)定溫度報(bào)警值,再次按下K2鍵調(diào)整TH的設(shè)定值,按下K3鍵調(diào)整TL的設(shè)定值,設(shè)定過(guò)程中可以通過(guò)按鍵K1來(lái)決定是增還是減,按下K4鍵將設(shè)定的溫度報(bào)警值寫入DS18B20。設(shè)定完畢,將溫度報(bào)警值寫入DS18B20的E2RAM中保存,每次開機(jī)時(shí)自動(dòng)從DS18B20中讀出溫度報(bào)警值。(7)溫度比較子程序?qū)?shí)測(cè)溫度值與設(shè)定的溫度報(bào)警值進(jìn)行比較,根據(jù)比較結(jié)果執(zhí)行相應(yīng)處理程序。當(dāng)實(shí)測(cè)溫度大于溫度報(bào)警值TH的設(shè)定值時(shí),LCD顯示“>H”,并使指示燈閃動(dòng),蜂鳴器發(fā)出報(bào)警聲。當(dāng)實(shí)測(cè)溫度小于溫度報(bào)警值TL的設(shè)定值時(shí),LCD顯示“<L”,并使指示燈閃動(dòng),蜂鳴器發(fā)出報(bào)警聲。當(dāng)實(shí)測(cè)溫度小于溫度報(bào)警值TH但大于溫度報(bào)警值TL的設(shè)定值時(shí),LCD顯示“!”,同時(shí)點(diǎn)亮指示燈。TEMP_ZHEQU24H;實(shí)測(cè)溫度值存放單元。TEMPLEQU25HTEMPHEQU26HTEMP_THEQU27H;高溫報(bào)警值存放單元。TEMP_TLEQU28H;低溫報(bào)警值存放單元。TEMPHCEQU29H

;正、負(fù)溫度值標(biāo)記。TEMPLCEQU2AHTEMPFCEQU2BHK1EQUP1.4;查詢按鍵。K2EQUP1.5;設(shè)置/調(diào)整鍵。K3EQUP1.6;調(diào)整鍵。K4EQUP1.7;確定鍵。BEEPEQUP3.7

;蜂鳴器。RELAYEQUP1.3

;指示燈。LCD_XEQU2FH;LCD字符顯示位置。LCD_RSEQUP2.0;LCD寄存器選擇信號(hào)。LCD_RWEQUP2.1;LCD讀寫信號(hào)。LCD_ENEQUP2.2;LCD允許信號(hào)。FLAG1EQU20H.0

;DS18B20是否存在標(biāo)志。KEY_UDEQU20H.1;設(shè)定按鍵的增、減標(biāo)志。DQEQUP3.3;DS18B20數(shù)據(jù)信號(hào)。2.數(shù)字溫度計(jì)程序設(shè)計(jì)代碼ORG0000HLJMPMAINORG0030HMAIN:MOVSP,#60HMOVA,#00HMOVR0,#20HMOVR1,#10HCLEAR:MOV@R0,AINCR0DJNZR1,CLEAR;將20H~2FH單元清零。LCALLSET_LCDLCALLRE_18B20START:LCALLRST;調(diào)用18B20復(fù)位子程序。JNBFLAG1,START1;DS1820不存在。LCALLMENU_OK

;DS1820存在,調(diào)用顯示正確信息子程序。MOVTEMP_TH,#055H;設(shè)置TH初值85度。MOVTEMP_TL,#019H;設(shè)置TL初值25度。LCALLRE_18B20A;調(diào)用暫存器操作子程序。LCALLWRITE_E2;寫入DS18B20。LCALLTEMP_BJ;顯示溫度標(biāo)記。JMPSTART2START1:LCALLMENU_ERROR;調(diào)用顯示出錯(cuò)信息子程序。LCALLTEMP_BJ;顯示溫度標(biāo)記。SJMP$START2:LCALLRST;調(diào)用DS18B20復(fù)位子程序。JNBFLAG1,START1;DS18B20不存在。MOVA,#0CCH;跳過(guò)ROM匹配命令。LCALLWRITEMOVA,#44H;溫度轉(zhuǎn)換命令。LCALLWRITELCALLRSTMOVA,#0CCH;跳過(guò)ROM匹配。LCALLWRITEMOVA,#0BEH;讀溫度命令。LCALLWRITELCALLREAD ;調(diào)用DS18B20數(shù)據(jù)讀取操作子程序。LCALLCONVTEMP;調(diào)用溫度數(shù)據(jù)BCD碼處理子程序。LCALLDISPBCD;調(diào)用溫度數(shù)據(jù)顯示子程序。LCALLCONV;調(diào)用LCD顯示處理子程序。LCALLTEMP_COMP;調(diào)用實(shí)測(cè)溫度值與設(shè)定溫度值比較子程序。LCALLPROC_KEY;調(diào)用鍵掃描子程序。SJMPSTART2;循環(huán)。PROC_KEY:JBK1,PROC_K1LCALLBEEP_BLJNBK1,$MOVDPTR,#M_ALAX1MOVA,#1LCALLLCD_PRINTLCALLLOOK_ALARMJBK3,$LCALLBEEP_BLJMPPROC_K2PROC_K1:JBK2,PROC_ENDLCALLBEEP_BLJNBK2,$MOVDPTR,#RST_A1MOVA,#1LCALLLCD_PRINTLCALLSET_ALARMLCALLRE_18B20;將設(shè)定的TH,TL值寫入DS18B20。LCALLWRITE_E2PROC_K2:LCALLMENU_OKLCALLTEMP_BJPROC_END:RET*******

鍵掃描子程序********;***********設(shè)定溫度報(bào)警值TH、TL**************SET_ALARM:LCALLLOOK_ALARMAS0:JBK1,AS00LCALLBEEP_BLJNBK1,$CPL20H.1;UP/DOWN標(biāo)記。AS00:JB20H.1,ASZ01;20H.1=1,增加。JMPASJ01;20H.1=0,減小。ASZ01:JBK2,ASZ02;TH值調(diào)整(增加)。INCTEMP_THCJNEA,#120,ASZ011MOVTEMP_TH,#0ASZ011:LCALLLOOK_ALARMMOVR5,#10LCALLDELAYJMPASZ01ASZ02:JBK3,ASZ03;TL值調(diào)整(增加)。LCALLBEEP_BLINCTEMP_TLMOVA,TEMP_TLCJNEA,#99,ASZ021MOVTEMP_TL,#00HASZ021:LCALLLOOK_ALARMMOVR5,#10LCALLDELAYJMPASZ02ASZ03:JBK4,AS0 ;確定調(diào)整。LCALLBEEP_BLJNBK4,$RETASJ01:JBK2,ASJ02;TH值調(diào)整(減少)。LCALLBEEP_BLDECTEMP_THMOVA,TEMP_THCJNEA,#0FFH,ASJ011JMPASJ022ASJ011:LCALLLOOK_ALARMMOVR5,#10LCALLDELAYJMPAS0ASJ02:JBK3,ASJ03

;TL值調(diào)整(減少)。LCALLBEEP_BLDECTEMP_TLMOVA,TEMP_TLCJNEA,#0FFH,ASJ021JMPASJ022ASJ021:LCALLLOOK_ALARM;MOVR5,#10LCALLDELAYJMPAS0ASJ022:CPL20H.1JMPASZ01ASJ03:JMPASZ03RETRST_A1:DB"SETALERTCODE",0;************實(shí)測(cè)溫度值與設(shè)定溫度值比較子程序**********TEMP_COMP:MOVA,TEMP_THSUBBA,TEMP_ZH;JCCHULI1;實(shí)測(cè)溫度大于最高設(shè)定溫度,轉(zhuǎn)溫度處理1。MOVA,TEMPFCCJNEA,#0BH,COMPSJMPCHULI2COMP:MOVA,TEMP_ZHSUBBA,TEMP_TLJCCHULI2;實(shí)測(cè)溫度小于最低設(shè)定溫度,轉(zhuǎn)溫度處理2。MOVDPTR,#BJ5LCALLTEMP_BJ3CLRRELAY;點(diǎn)亮指示燈。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"!";******顯示溫度標(biāo)記子程序

*********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*********顯示出錯(cuò)信息子程序

**********MENU_ERROR:MOVDPTR,#M_ERROR1

;指針指到顯示消息。MOVA,#1 ;顯示在第一行。LCALLLCD_PRINTMOVDPTR,#M_ERROR2;指針指到顯示消息1。MOVA,#2 ;顯示在第一行。LCALLLCD_PRINTRETM_ERROR1:DB"DS18B20ERROR",0M_ERROR2:DB"TEMP:----",0****DS18B20復(fù)位子程序******RST:SETBDQNOPCLRDQMOVR0,#6BH

;主機(jī)發(fā)出延時(shí)復(fù)位低脈沖。MOVR1,#04HTSR1:DJNZR0,$MOVR0,#6BHDJNZR1,TSR1SETBDQ;拉高數(shù)據(jù)線。NOPNOPNOPMOVR0,#32HTSR2:JNBDQ,TSR3;等待DS18B20回應(yīng)。DJNZR0,TSR2JMPTSR4;延時(shí)。TSR3:SETBFLAG1

;置1標(biāo)志位,表示DS1820存在。JMPTSR5TSR4:CLRFLAG1

;清0標(biāo)志位,表示DS1820不存在。JMPTSR7TSR5:MOVR0,#06BHTSR6:DJNZR0,$

;時(shí)序要求延時(shí)一段時(shí)間。TSR7:SETBDQRET*********DS18B20暫存器操作子程序

*********RE_18B20:JBFLAG1,RE_18B20ARETRE_18B20A:LCALLRSTMOVA,#0CCH;跳過(guò)ROM匹配。LCALLWRITEWR_SCRAPD:MOVA,#4EH;寫暫存器。LCALLWRITEMOVA,TEMP_TH;TH(報(bào)警上限)。LCALLWRITEMOVA,TEMP_TL;TL(報(bào)警下限)。LCALLWRITEMOVA,#7FH;12位精度。LCALLWRITERET;*********復(fù)制暫存器子程序***********WRITE_E2:LCALLRSTMOVA,#0CCH;跳過(guò)ROM匹配。LCALLWRITEMOVA,#48H

;把暫存器里的溫度報(bào)警值拷貝到E2ROM。LCALLWRITERET;********重讀EEROM子程序**********READ_E2:LCALLRSTMOVA,#0CCH;跳過(guò)ROM匹配。LCALLWRITEMOVA,#0B8H

;把E2ROM里的溫度報(bào)警值拷貝回暫存器。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總線要處于復(fù)位(低)狀態(tài)。MOVR3,#07DJNZR3,$;總線復(fù)位保持16微妙以上。RRCA;把1個(gè)字節(jié)DATA分成8個(gè)BIT環(huán)移給C。MOVDQ,C;寫入1位。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;延時(shí)18μS。DJNZR3,$MOVC,DQ

;從DS18B20總線讀得1位。MOVR3,#3CHDJNZR3,$

;等待100μS。RRCA

;把讀得的位值環(huán)移給A。DJNZR2,RE01

;讀下一位。MOV@R1,AINCR1DJNZR4,RE00RET********溫度值BCD碼處理子程序

********CONVTEMP:MOVA,TEMPH;判溫度是否零下。ANLA,#08HJZTEMPC1;溫度零上轉(zhuǎn)設(shè)正溫度標(biāo)記。CLRCMOVA,TEMPL;二進(jìn)制數(shù)求補(bǔ)(雙字節(jié))。CPLA;取反加1。ADDA,#01HMOVTEMPL,AMOVA,TEMPHCPLAADDCA,#00HMOVTEMPH,AMOVTEMPHC,#0BH

;負(fù)溫度標(biāo)志。MOVTEMPFC,#0BHSJMPTEMPC11TEMPC1:MOVTEMPHC,#0AH;正溫度標(biāo)志。MOVTEMPFC,#0AHTEMPC11:MOVA,TEMPHCSWAPAMOVTEMPHC,AMOVA,TEMPLANLA,#0FH;乘0.0625。MOVDPTR,#TEMPDOTTABMOVCA,@A+DPTRMOVTEMPLC,A;TEMPLCLOW=小數(shù)部分BCD。MOVA,TEMPL;整數(shù)部分。ANLA,#0F0H;取出高4位。SWAPAMOVTEMPL,AMOVA,TEMPH;取出低4位。ANLA,#0FHSWAPAORLA,TEMPL;重新組合。MOVTEMP_ZH,ALCALLHEX2BCD1MOVTEMPL,AANLA,#0F0HSWAPAORLA,TEMPHC

;TEMPHCLOW=十位數(shù)BCD。MOVTEMPHC,AMOVA,TEMPLANLA,#0FHSWAPA

;TEMPLCHI=個(gè)位數(shù)BCD。ORLA,TEMPLCMOVTEMPLC,AMOVA,R4JZTEMPC12ANLA,#0FHSWAPAMOVR4,AMOVA,TEMPHC

;TEMPHCHI=百位數(shù)BCD。ANLA,#0FHORLA,R4MOVTEMPHC,ATEMPC12:RET*******二-十進(jìn)制轉(zhuǎn)換子程序

***********HEX2BCD1:MOVB,#064HDIVABMOVR4,AMOVA,#0AHXCHA,BDIVABSWAPAORLA,BRETTEMPDOTTAB:DB00H,00H,01H,01H,02H,03H,03H,04HDB05H,05H,06H,06H,07H,08H,08H,09H;小數(shù)部分碼表。*****查詢溫度報(bào)警值子程序

********LOOK_ALARM:MOVDPTR,#M_ALAX2;指針指到顯示信息區(qū)。MOVA,#2;顯示在第二行。LCALLLCD_PRINTMOVA,#0C6HLCALLTEMP_BJ1MOVA,TEMP_TH;加載TH數(shù)據(jù)。MOVLCD_X,#3;設(shè)置顯示位置。LCALLSHOW_DIG2H;顯示數(shù)據(jù)。MOVA,#0CEHLCALLTEMP_BJ1MOVA,TEMP_TL;加載TL數(shù)據(jù)。MOVLCD_X,#12;設(shè)置顯示位置。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;個(gè)位。MOVA,TEMPHCANLA,#0FHMOV72H,A;十位。MOVA,TEMPHCSWAPAANLA,#0FHMOV73H,A;百位。DISPBCD2:RET******LCD顯示數(shù)據(jù)處理子程序

********CONV:MOVA,73H ;加載百位數(shù)據(jù)。MOVLCD_X,#6 ;設(shè)置位置。CJNEA,#1,CONV1JMPCONV2CONV1:CJNEA,#0BH,CONV11MOVA,#"-"

;"-"號(hào)顯示。JMPCONV111CONV11:MOVA,#""

;"+"號(hào)不顯示。CONV111:MOVB,LCD_XLCALLLCDP2JMPCONV3CONV2:LCALLSHOW_DIG2;顯示數(shù)據(jù)。CONV3:INCLCD_XMOVA,72H;十位。LCALLSHOW_DIG2INCLCD_XMOVA,71H

;個(gè)位。LCALLSHOW_DIG2INCLCD_XMOVA,#'.'MOVB,LCD_XLCALLLCDP2MOVA,70H;加載小數(shù)點(diǎn)位。INCLCD_X

;設(shè)置顯示位置。LCALLSHOW_DIG2

;顯示數(shù)據(jù)。RET*******第二行顯示數(shù)字子程序

*******SHOW_DIG2:ADDA,#30HMOVB,LCD_XLCALLLCDP2RET******第二行顯示數(shù)字子程序

*******LCDP2:PUSHACCMOVA,B;設(shè)置顯示地址。ADDA,#0C0H;設(shè)置LCD的第二行地址。LCALLWCOM;寫入命令。POPACC;由堆棧取出A。LCALLWDATA;寫入數(shù)據(jù)。RET*****對(duì)LCD做初始化設(shè)置及測(cè)試******SET_LCD:CLRLCD_ENLCALLINIT_LCD;初始化LCD。LCALLSTORE_DATA

;將自定義字符存入LCD的CGRAM。RET*******LCD初始化

*******INIT_LCD:MOVA,#38H;2行顯示,字形5*7點(diǎn)陣。LCALLWCOMLCALLDELAY1MOVA,#38HLCALLWCOMLCALLDELAY1MOVA,#38HLCALLWCOMLCALLDELAY1MOVA,#0CH

;開顯示,顯示光標(biāo),光標(biāo)不閃爍。LCALLWCOMLCALLDELAY1MOVA,#01H;清除LCD顯示屏。LCALLWCOMLCALLDELAY1RET*******清除LCD的第一行字符

*******CLR_LINE1:MOVA,#80H

;設(shè)置LCD的第一行地址。LCALLWCOMMOVR0,#24;設(shè)置計(jì)數(shù)值。C1:MOVA,#'';載入空格符至LCD。LCALLWDATA;輸出字符至LCD。DJNZR0,C1;計(jì)數(shù)結(jié)束。RETLCALLCLR_LINE

;清除該行字符數(shù)據(jù)。MOVA,#0C0H;設(shè)置LCD的第二行地址。LCALLWCOMFILL:CLRA

;填入字符。MOVCA,@A+DPTR;由消息區(qū)取出字符。CJNEA,#0,LC1

;判斷是否為結(jié)束碼。RETLC1:LCALLWDATA;寫入數(shù)據(jù)。INCDPTR

;指針加1。JMPFILL

;繼續(xù)填入字符。RET******LCD的第一行或第二行顯示字符********LCD_PRINT:CJNEA,#1,LINE2;判斷是否為第一行。LINE1:MOVA,#

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論