當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] ;*********************************************************************************************;;以下程序能用于24小時計時,能作為秒表使用,能定時鬧鈴1分鐘(也可關(guān)).;使用方法:開機(jī)后在00:00:00起

;*********************************************************************************************;
;以下程序能用于24小時計時,能作為秒表使用,能定時鬧鈴1分鐘(也可關(guān)).
;使用方法:開機(jī)后在00:00:00起開始計時,(1)長按P1.0進(jìn)入調(diào)分狀態(tài):分單元閃爍
;按P1.0加1,按P1.1減1.再長按P1.0進(jìn)入時調(diào)整狀態(tài),時單元閃爍,加減調(diào)整同調(diào)分.

;按長按退出調(diào)整狀態(tài).(2)按下P1.1進(jìn)入秒表狀態(tài):按P1.2暫停,再按P1.2秒表清零,再按
;P1.2秒表又啟動,按P1.1退出秒表回到時鐘狀態(tài).(3)按P1.3進(jìn)入設(shè)定鬧時狀態(tài):00:00:-,可進(jìn)
;行分設(shè)定,按P1.2分加1,再按P1.3為時調(diào)整,00:00:-,按P1.2時加1,按P1.1鬧鈴有效,顯示為00:00:-0,再按
;P1.1鬧鈴無效(顯示00:00:-,),按P1.3調(diào)鬧鐘結(jié)束.在鬧鈴時可按P1.3停鬧,不按鬧鈴1分鐘.
;定時器T0、T1溢出周期為50MS,T0為秒計數(shù)用,T1為調(diào)整時閃爍及秒表定時用,
;P1.0、P1.1、P1.2、P1.3為調(diào)整按鈕,P0口為字符輸出口,P2為掃描口,P1.7為蜂嗚器口,采用共陽顯示管。
;50H-55H為鬧鐘定時單元,60H-65H為秒表計時單元,70H-75H為顯示時間單元,76H-79H為分時計時單元。
;03H標(biāo)志=0時鐘閃爍,=1秒表,05H=0,不鬧鈴,=1要鬧鈴.07H每秒改變一次,用作間隔嗚叫.
;***********************************************************************************************;
DISPFIRSTEQU30H;顯示首址存放單元
BELLEQUP1.7;小喇叭
CONBSEQU2FH;存放報時次數(shù)
;
;****************************************
;;中斷入口程序;;
;****************************************
;
ORG0000H;程序執(zhí)行開始地址
LJMPSTART;跳到標(biāo)號START執(zhí)行
ORG0003H;外中斷0中斷程序入口
RETI;外中斷0中斷返回
ORG000BH;定時器T0中斷程序入口
LJMPINTT0;跳至INTTO執(zhí)行
ORG0013H;外中斷1中斷程序入口
RETI;外中斷1中斷返回
ORG001BH;定時器T1中斷程序入口
LJMPINTT1;跳至INTT1執(zhí)行
ORG0023H;串行中斷程序入口地址
RETI;串行中斷程序返回
;
;****************************************
;;以下程序開始;;
;****************************************
;整點(diǎn)報時用
QQQQ:MOVA,#10H
MOVB,79H
MULAB
ADDA,78H
MOVCONBS,A
BSLOOP:LCALLDS20MS
LCALLDL1S
LCALLDL1S
LCALLDL1S
DJNZCONBS,BSLOOP
CLR08H;清整點(diǎn)報時標(biāo)志
AJMPSTART1
;
;****************************************
;;主程序開始;;
;****************************************
;
START:LCALLST;上電顯示年月日及班級學(xué)號
MOVR0,#00H;清00H-7FH內(nèi)存單元
MOVR7,#80H;
CLEARDISP:MOV@R0,#00H;
INCR0;
DJNZR7,CLEARDISP;
MOV20H,#00H;清20H(標(biāo)志用)
MOV7AH,#0AH;放入"熄滅符"數(shù)據(jù)
MOVTMOD,#11H;設(shè)T0、T1為16位定時器
MOVTL0,#0B0H;50MS定時初值(T0計時用)
MOVTH0,#3CH;50MS定時初值
MOVTL1,#0B0H;50MS定時初值(T1閃爍定時用)
MOVTH1,#3CH;50MS定時初值
SETBEA;總中斷開放
SETBET0;允許T0中斷
SETBTR0;開啟T0定時器
MOVR4,#14H;1秒定時用計數(shù)值(50MS×20)
MOVDISPFIRST,#70H;顯示單元為70-75H
;以下主程序循環(huán)
START1:LCALLDISPLAY;調(diào)用顯示子程序
JNBP1.0,SETMM1;P1.0口為0時轉(zhuǎn)時間調(diào)整程序
JNBP1.1,FUNSS;秒表功能,P1.1按鍵調(diào)時時作減1加能
JNBP1.2,FUNPT;秒表STOP,PUSE,CLR
JNBP1.3,TSFUN;定時鬧鈴設(shè)定
JB08H,QQQQ
AJMPSTART1;P1.0口為1時跳回START1
;
FUNPT:LJMPFUNPTT
;以下鬧鈴時間設(shè)定程序,按P1.3進(jìn)入設(shè)定
TSFUN:LCALLDS20MS
JBP1.3,START1;
WAIT113:JNBP1.3,WAIT113;等待鍵釋放
JB05H,CLOSESP;鬧鈴已開的話,關(guān)鬧鈴
MOVDISPFIRST,#50H;進(jìn)入鬧鈴設(shè)定程序,顯示50-55H鬧鐘定時單元
MOV50H,#0CH;"-"鬧鈴設(shè)定時顯示格式00:00:-
MOV51H,#0AH;"黑"
;
DSWAIT:SETBEA
LCALLDISPLAY
JNBP1.2,DSFINC;分加1
JNBP1.0,DSDEC;分減1
JNBP1.3,DSSFU;進(jìn)入時調(diào)整
AJMPDSWAIT
;
CLOSESP:CLR05H;關(guān)鬧鈴標(biāo)志
CLRBELL
AJMPSTART1
DSSFU:LCALLDS20MS;消抖
JBP1.3,DSWAIT
LJMPDSSFUNN;進(jìn)入時調(diào)整
;
SETMM1:LJMPSETMM;轉(zhuǎn)到時間調(diào)整程序SETMM
;
DSFINC:LCALLDS20MS;消抖
JBP1.2,DSWAIT
DSWAIT12:LCALLDISPLAY;等鍵釋放
JNBP1.2,DSWAIT12
CLREA
MOVR0,#53H;
LCALLADD1;鬧鈴設(shè)定分加1
MOVA,R3;分?jǐn)?shù)據(jù)放入A

CLRC;清進(jìn)位標(biāo)志
CJNEA,#60H,ADDHH22;
ADDHH22:JCDSWAIT;小于60分時返回
ACALLCLR0;大于或等于60分時分計時單元清0
AJMPDSWAIT
DSDEC:LCALLDS20MS;消抖
JBP1.0,DSWAIT
DSWAITEE:LCALLDISPLAY;等鍵釋放
JNBP1.0,DSWAITEE
CLREA
MOVR0,#53H;
LCALLsub1;鬧鈴設(shè)定分減1
LJMPDSWAIT

;以下秒表功能/時鐘轉(zhuǎn)換程序
;按下P1.1可進(jìn)行功能轉(zhuǎn)換
FUNSS:LCALLDS20MS
JBP1.1,START11
WAIT11:JNBP1.1,WAIT11
CPL03H
JNB03H,TIMFUN
MOVDISPFIRST,#60H;顯示秒表數(shù)據(jù)單元
MOV60H,#00H
MOV61H,#00H
MOV62H,#00H
MOV63H,#00H
MOV64H,#00H
MOV65H,#00H
MOVTL1,#0F0H;10MS定時初值()
MOVTH1,#0D8H;10MS定時初值
SETBTR1
SETBET1
START11:LJMPSTART1
TIMFUN:MOVDISPFIRST,#70H;顯示時鐘數(shù)據(jù)單元
CLRET1
CLRTR1
START12:LJMPSTART1
;以下秒表暫停清零功能程序
;按下P1.2暫停或清0,按下P1.1退出秒表回到時鐘計時
FUNPTT:LCALLDS20MS
JBP1.2,START12
WAIT22:JNBP1.2,WAIT21
CLRET1
CLRTR1
WAIT33:JNBP1.1,FUNSS
JBP1.2,WAIT31
LCALLDS20MS
JBP1.2,WAIT33
WAIT66:JNBP1.2,WAIT61
MOV60H,#00H
MOV61H,#00H
MOV62H,#00H
MOV63H,#00H
MOV64H,#00H
MOV65H,#00H
WAIT44:JNBP1.1,FUNSS
JBP1.2,WAIT41
LCALLDS20MS
JBP1.2,WAIT44
WAIT55:JNBP1.2,WAIT51
SETBET1
SETBTR1
AJMPSTART1
;以下鍵等待釋放時顯示不會熄滅用
WAIT21:LCALLDISPLAY
AJMPWAIT22
WAIT31:LCALLDISPLAY
AJMPWAIT33
WAIT41:LCALLDISPLAY
AJMPWAIT44
WAIT51:LCALLDISPLAY
AJMPWAIT55
WAIT61:LCALLDISPLAY
AJMPWAIT66
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;1秒計時程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T0中斷服務(wù)程序
INTT0:PUSHACC;累加器入棧保護(hù)
PUSHPSW;狀態(tài)字入棧保護(hù)
CLRET0;關(guān)T0中斷允許
CLRTR0;關(guān)閉定時器T0
MOVA,#0B7H;中斷響應(yīng)時間同步修正
ADDA,TL0;低8位初值修正
MOVTL0,A;重裝初值(低8位修正值)
MOVA,#3CH;高8位初值修正
ADDCA,TH0;
MOVTH0,A;重裝初值(高8位修正值)
SETBTR0;開啟定時器T0
DJNZR4,OUTT0;20次中斷未到中斷退出
ADDSS:MOVR4,#14H;20次中斷到(1秒)重賦初值

CPL07H;鬧鈴時間隔嗚叫用
MOVR0,#71H;指向秒計時單元(71H-72H)
ACALLADD1;調(diào)用加1程序(加1秒操作)
MOVA,R3;秒數(shù)據(jù)放入A(R3為2位十進(jìn)制數(shù)組合)
CLRC;清進(jìn)位標(biāo)志
CJNEA,#60H,ADDMM;
ADDMM:JCOUTT0;小于60秒時中斷退出
ACALLCLR0;大于或等于60秒時對秒計時單元清0
MOVR0,#77H;指向分計時單元(76H-77H)
ACALLADD1;分計時單元加1分鐘
MOVA,R3;分?jǐn)?shù)據(jù)放入A
CLRC;清進(jìn)位標(biāo)志
CJNEA,#60H,ADDHH;
ADDHH:JCOUTT0;小于60分時中斷退出
ACALLCLR0;大于或等于60分時分計時單元清0
LCALLDS20MS;正點(diǎn)報時
SETB08H
MOVR0,#79H;指向小時計時單元(78H-79H)
ACALLADD1;小時計時單元加1小時
MOVA,R3;時數(shù)據(jù)放入A
CLRC;清進(jìn)位標(biāo)志
CJNEA,#24H,HOUR;
HOUR:JCOUTT0;小于24小時中斷退出
ACALLCLR0;大于或等于24小時小時計時單元清0
OUTT0:MOV72H,76H;中斷退出時將分、時計時單元數(shù)據(jù)移
MOV73H,77H;入對應(yīng)顯示單元
MOV74H,78H;
MOV75H,79H;
LCALLBAOJ
POPPSW;恢復(fù)狀態(tài)字(出棧)
POPACC;恢復(fù)累加器
SETBET0;開放T0中斷
RETI;中斷返回
;
;****************************************
;;閃動調(diào)時程序秒表功能程序;;
;****************************************
;T1中斷服務(wù)程序,用作時間調(diào)整時調(diào)整單元閃爍指示或秒表計時
INTT1:PUSHACC;中斷現(xiàn)場保護(hù)
PUSHPSW;
JB03H,MMFUN;=1時秒表
MOVTL1,#0B0H;裝定時器T1定時初值
MOVTH1,#3CH;
DJNZR2,INTT1OUT;0.3秒未到退出中斷(50MS中斷6次)
MOVR2,#06H;重裝0.3秒定時用初值
CPL02H;0.3秒定時到對閃爍標(biāo)志取反
JB02H,FLASH1;02H位為1時顯示單元"熄滅"
MOV72H,76H;02H位為0時正常顯示
MOV73H,77H;
MOV74H,78H;
MOV75H,79H;
INTT1OUT:POPPSW;恢復(fù)現(xiàn)場
POPACC;
RETI;中斷退出
FLASH1:JB01H,FLASH2;01H位為1時,轉(zhuǎn)小時熄滅控制
MOV72H,7AH;01H位為0時,"熄滅符"數(shù)據(jù)放入分
MOV73H,7AH;顯示單元(72H-73H),將不顯示分?jǐn)?shù)據(jù)
MOV74H,78H;
MOV75H,79H;
AJMPINTT1OUT;轉(zhuǎn)中斷退出
FLASH2:MOV72H,76H;01H位為1時,"熄滅符"數(shù)據(jù)放入小時
MOV73H,77H;顯示單元(74H-75H),小時數(shù)據(jù)將不顯示
MOV74H,7AH;
MOV75H,7AH;
AJMPINTT1OUT;轉(zhuǎn)中斷退出
;
MMFUN:CLRTR1
MOVA,#0F7H;中斷響應(yīng)時間同步修正,重裝初值(10ms)
ADDA,TL1;低8位初值修正
MOVTL1,A;重裝初值(低8位修正值)
MOVA,#0D8H;高8位初值修正
ADDCA,TH1;
MOVTH1,A;重裝初值(高8位修正值)
SETBTR1;開啟定時器T0
MOVR0,#61H;指向秒計時單元(71H-72H)
ACALLADD1;調(diào)用加1程序(加1秒操作)
CLRC;
MOVA,R3;
JZFSS1;加1后為00,C=0
AJMPOUTT01;加1后不為00,C=1
FSS1:ACALLCLR0;大于或等于60秒時對秒計時單元清0
MOVR0,#63H;指向分計時單元(76H-77H)
ACALLADD1;分計時單元加1分鐘
MOVA,R3;分?jǐn)?shù)據(jù)放入A
CLRC;清進(jìn)位標(biāo)志
CJNEA,#60H,ADDHH1;
ADDHH1:JCOUTT01;小于60分時中斷退出
LCALLCLR0;大于或等于60分時分計時單元清0
MOVR0,#65H;指向小時計時單元(78H-79H)
ACALLADD1;小時計時單元加1小時

OUTT01:
POPPSW;恢復(fù)狀態(tài)字(出棧)
POPACC;恢復(fù)累加器
RETI;中斷返回;
;****************************************
;;加1子程序;;
;****************************************
;
;
ADD1:MOVA,@R0;取當(dāng)前計時單元數(shù)據(jù)到A
DECR0;指向前一地址
SWAPA;A中數(shù)據(jù)高四位與低四位交換
ORLA,@R0;前一地址中數(shù)據(jù)放入A中低四位
ADDA,#01H;A加1操作
DAA;十進(jìn)制調(diào)整
MOVR3,A;移入R3寄存器
ANLA,#0FH;高四位變0
MOV@R0,A;放回前一地址單元
MOVA,R3;取回R3中暫存數(shù)據(jù)
INCR0;指向當(dāng)前地址單元
SWAPA;A中數(shù)據(jù)高四位與低四位交換
ANLA,#0FH;高四位變0
MOV@R0,A;數(shù)據(jù)放入當(dāng)削地址單元中
RET;子程序返回
;
;****************************************
;;分減1子程序;;
;****************************************
;
SUB1:MOVA,@R0;取當(dāng)前計時單元數(shù)據(jù)到A
DECR0;指向前一地址
SWAPA;A中數(shù)據(jù)高四位與低四位交換
ORLA,@R0;前一地址中數(shù)據(jù)放入A中低四位
JZSUB11
DECA;A減1操作
SUB111:MOVR3,A;移入R3寄存器
ANLA,#0FH;高四位變0
CLRC;清進(jìn)位標(biāo)志
SUBBA,#0AH
SUB1111:JCSUB1110
MOV@R0,#09H;大于等于0AH,為9
SUB110:MOVA,R3;取回R3中暫存數(shù)據(jù)
INCR0;指向當(dāng)前地址單元
SWAPA;A中數(shù)據(jù)高四位與低四位交換
ANLA,#0FH;高四位變0
MOV@R0,A;數(shù)據(jù)放入當(dāng)削地址單元中
RET;子程序返回
;
SUB11:MOVA,#59H
AJMPSUB111
SUB1110:MOVA,R3;移入R3寄存器
ANLA,#0FH;高四位變0
MOV@R0,A
AJMPSUB110
;****************************************
;;時減1子程序;;
;****************************************
;
SUBB1:MOVA,@R0;取當(dāng)前計時單元數(shù)據(jù)到A
DECR0;指向前一地址
SWAPA;A中數(shù)據(jù)高四位與低四位交換
ORLA,@R0;前一地址中數(shù)據(jù)放入A中低四位
JZSUBB11;00減1為23(小時)
DECA;A減1操作
SUBB111:MOVR3,A;移入R3寄存器
ANLA,#0FH;高四位變0
CLRC;清進(jìn)位標(biāo)志
SUBBA,#0AH;時個位大于9為9
SUBB1111:JCSUBB1110;
MOV@R0,#09H;大于等于0AH,為9
SUBB110:MOVA,R3;取回R3中暫存數(shù)據(jù)
INCR0;指向當(dāng)前地址單元
SWAPA;A中數(shù)據(jù)高四位與低四位交換
ANLA,#0FH;高四位變0
MOV@R0,A;時十位數(shù)數(shù)據(jù)放入
RET;子程序返回
;
SUBB11:MOVA,#23H
AJMPSUBB111
SUBB1110:MOVA,R3;時個位小于0A不處理
ANLA,#0FH;高四位變0
MOV@R0,A;個位移入
AJMPSUBB110
;****************************************
;;清零程序;;
;****************************************
;對計時單元復(fù)零用
CLR0:CLRA;清累加器
MOV@R0,A;清當(dāng)前地址單元
DECR0;指向前一地址
MOV@R0,A;前一地址單元清0
RET;子程序返回
;
;****************************************
;;時鐘時間調(diào)整程序;;
;****************************************
;當(dāng)調(diào)時按鍵按下時進(jìn)入此程序
SETMM:cLRET0;關(guān)定時器T0中斷
CLRTR0;關(guān)閉定時器T0
LCALLDL1S;調(diào)用1秒延時程序
LCALLDS20MS;消抖
JBP1.0,CLOSEDIS;鍵按下時間小于1秒,關(guān)閉顯示(省電)
MOVR2,#06H;進(jìn)入調(diào)時狀態(tài),賦閃爍定時初值
MOV70H,#00H;調(diào)時時秒單元為00秒
MOV71H,#00H
SETBET1;允許T1中斷
SETBTR1;開啟定時器T1
SET2:JNBP1.0,SET1;P1.0口為0(鍵未釋放),等待
SETB00H;鍵釋放,分調(diào)整閃爍標(biāo)志置1
SET4:JBP1.0,SET3;等待鍵按下
LCALLDL05S;有鍵按下,延時0.5秒
LCALLDS20MS;消抖
JNBP1.0,SETHH;按下時間大于0.5秒轉(zhuǎn)調(diào)小時狀態(tài)
MOVR0,#77H;按下時間小于0.5秒加1分鐘操作
LCALLADD1;調(diào)用加1子程序
MOVA,R3;取調(diào)整單元數(shù)據(jù)
CLRC;清進(jìn)位標(biāo)志
CJNEA,#60H,HHH;調(diào)整單元數(shù)據(jù)與60比較
HHH:JCSET4;調(diào)整單元數(shù)據(jù)小于60轉(zhuǎn)SET4循環(huán)
LCALLCLR0;調(diào)整單元數(shù)據(jù)大于或等于60時清0
CLRC;清進(jìn)位標(biāo)志
AJMPSET4;跳轉(zhuǎn)到SET4循環(huán)
CLOSEDIS:SETBET0;省電(LED不顯示)狀態(tài)。開T0中斷
SETBTR0;開啟T0定時器(開時鐘)
CLOSE:JBP1.0,CLOSE;無按鍵按下,等待。
LCALLDS20MS;消抖
JBP1.0,CLOSE;是干擾返回CLOSE等待
WAITH:JNBP1.0,WAITH;等待鍵釋放
LJMPSTART1;返回主程序(LED數(shù)據(jù)顯示亮)
SETHH:CLR00H;分閃爍標(biāo)志清除(進(jìn)入調(diào)小時狀態(tài))
SETB01H;小時調(diào)整標(biāo)志置1
SETHH1:JNBP1.0,SET5;等待鍵釋放
SET6:JBP1.0,SET7;等待按鍵按下
LCALLDL05S;有鍵按下延時0.5秒
LCALLDS20MS;消抖
JNBP1.0,SETOUT;按下時間大于0.5秒退出時間調(diào)整
MOVR0,#79H;按下時間小于0.5秒加1小時操作
LCALLADD1;調(diào)加1子程序
MOVA,R3;
CLRC;
CJNEA,#24H,HOUU;計時單元數(shù)據(jù)與24比較
HOUU:JCSET6;小于24轉(zhuǎn)SET6循環(huán)
LCALLCLR0;大于或等于24時清0操作
AJMPSET6;跳轉(zhuǎn)到SET6循環(huán)
SETOUT:JNBP1.0,SETOUT1;調(diào)時退出程序。等待鍵釋放
LCALLDS20MS;消抖
JNBP1.0,SETOUT;是抖動,返回SETOUT再等待
CLR01H;清調(diào)小時標(biāo)志
CLR00H;清調(diào)分標(biāo)志
CLR02H;清閃爍標(biāo)志
CLRTR1;關(guān)閉定時器T1
CLRET1;關(guān)定時器T1中斷
SETBTR0;開啟定時器T0
SETBET0;開定時器T0中斷(計時開始)
LJMPSTART1;跳回主程序
SET1:LCALLDISPLAY;鍵釋放等待時調(diào)用顯示程序(調(diào)分)
AJMPSET2;防止鍵按下時無時鐘顯示
SET3:LCALLDISPLAY;等待調(diào)分按鍵時時鐘顯示用
JNBP1.1,FUNSUB;減1分操作
AJMPSET4;調(diào)分等待
SET5:LCALLDISPLAY;鍵釋放等待時調(diào)用顯示程序(調(diào)小時)
AJMPSETHH1;防止鍵按下時無時鐘顯示
SET7:LCALLDISPLAY;等待調(diào)小時按鍵時時鐘顯示用
JNBP1.1,FUNSUBB;小時減1操作
AJMPSET6;調(diào)時等待
SETOUT1:LCALLDISPLAY;退出時鐘調(diào)整時鍵釋放等待
AJMPSETOUT;防止鍵按下時無時鐘顯示
;FUNSUB,分減1程序?
FUNSUB:LCALLDS20MS;消抖
JBP1.1,SET41;干擾,返回調(diào)分等待
FUNSUB1:JNBP1.1,FUNSUB1;等待鍵放開
MOVR0,#77H;
LCALLSUB1;分減1程序
LJMPSET4;返回調(diào)分等待
;
SET41:LJMPSET4;
;FUNSUBB,時減1程序;
FUNSUBB:LCALLDS20MS;消抖
JBP1.1,SET61;干擾,返回調(diào)時等待
FUNSUBB1:JNBP1.1,FUNSUBB1;等待鍵放開
MOVR0,#79H;
LCALLSUBB1;時減1程序
LJMPSET6;返回調(diào)時等待
;
SET61:LJMPSET6
;***************************************
;;顯示程序;;
;***************************************
;顯示數(shù)據(jù)在70H-75H單元內(nèi),用六位LED共陽數(shù)碼管顯示,P0口輸出段碼數(shù)據(jù),P2口作
;掃描控制,每個LED數(shù)碼管亮1MS時間再逐位循環(huán)。
DISPLAY:MOVR1,DISPFIRST;指向顯示數(shù)據(jù)首址
MOVR5,#0FEH;掃描控制字初值
PLAY:MOVA,R5;掃描字放入A
MOVP2,A;從P2口輸出
MOVA,@R1;取顯示數(shù)據(jù)到A
MOVDPTR,#TAB;取段碼表地址
MOVCA,@A+DPTR;查顯示數(shù)據(jù)對應(yīng)段碼
MOVP0,A;段碼放入P1口
MOVA,R5;
JBACC.2,LOOP5;小數(shù)點(diǎn)處理
CLRP0.7;
LOOP5:JBACC.4,LOOP6;小數(shù)點(diǎn)處理
CLRP0.7;
LOOP6:LCALLDL1MS;顯示1MS
INCR1;指向下一地址
MOVA,R5;掃描控制字放入A
JNBACC.5,ENDOUT;ACC.5=0時一次顯示結(jié)束
RLA;A中數(shù)據(jù)循環(huán)左移
MOVR5,A;放回R5內(nèi)
MOVP0,#0FFH
AJMPPLAY;跳回PLAY循環(huán)
ENDOUT:MOVP2,#0FFH;一次顯示結(jié)束,P2口復(fù)位
MOVP0,#0FFH;P0口復(fù)位
RET;子程序返回
TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,88H,0BFH
;共陽段碼表"0""1""2""3""4""5""6""7""8""9""不亮"“A”“-”
;
;****************************
;SDISPLAY,上電顯示子程序
;****************************
;不帶小數(shù)點(diǎn)顯示,有“A”“-”顯示功能
SDISPLAY:MOVR1,DISPFIRST
MOVR5,#0FEH;掃描控制字初值
SPLAY:MOVA,R5;掃描字放入A
MOVP2,A;從P2口輸出
MOVA,@R1;取顯示數(shù)據(jù)到A
MOVDPTR,#TABS;取段碼表地址
MOVCA,@A+DPTR;查顯示數(shù)據(jù)對應(yīng)段碼
MOVP0,A;段碼放入P1口
MOVA,R5;
LCALLDL1MS;顯示1MS
INCR1;指向下一地址
MOVA,R5;掃描控制字放入A
JNBACC.5,ENDOUTS;ACC.5=0時一次顯示結(jié)束
RLA;A中數(shù)據(jù)循環(huán)左移
MOVR5,A;放回R5內(nèi)
AJMPSPLAY;跳回PLAY循環(huán)
ENDOUTS:MOVP2,#0FFH;一次顯示結(jié)束,P2口復(fù)位
MOVP0,#0FFH;P0口復(fù)位
RET;子程序返回
TABS:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0C6H,0BFH,88H
;顯示數(shù)"0123456789不亮C-A"
;內(nèi)存數(shù)"01234567890AH0BH0CH0DH"
;STAB表,啟動時顯示2006年12月23日、C04-2-28(學(xué)號)用
STAB:DB0AH,0AH,0AH,0AH,0AH,0AH,08H,02H,0CH,02H,0CH,04H,00H,0BH,0AH,0AH
DB03H,02H,0CH,02H,01H,0CH,06H,00H,00H,02H,0AH,0AH,0AH,0AH,0AH,0AH
;注:0A不亮,0B顯示“A”,0C顯示“-”
;
;***********************************************************
;ST,上電時顯示年月班級用,采用移動顯示,先右移,接著左移.
;***********************************************************
ST:MOVR0,#40H;將顯示內(nèi)容移入40H-5FH單元
MOVR2,#20H;
MOVR3,#00H;
CLRA;
MOVDPTR,#STAB;
SLOOP:MOVCA,@A+DPTR;
MOV@R0,A;
MOVA,R3;
INCA;
MOVR3,A;
INCR0;
DJNZR2,SLOOP;移入完畢
MOVDISPFIRST,#40H;以下程序從左往右移
SSLOOP:MOVR2,#50;控制移動速度
SSLOOP1:LCALLSDISPLAY;
DJNZR2,SSLOOP1;
INCDISPFIRST
MOVA,DISPFIRST
CJNEA,#5AH,SSLOOP;
MOVDISPFIRST,#5AH;以下程序從右往左移
MOVR3,#1BH;顯示27個單元
SSLOOP2:MOVR2,#32H;控制移動速度
SSLOOP12:LCALLSDISPLAY;
DJNZR2,SSLOOP12;
DECDISPFIRST
DJNZR3,SSLOOP2;
RET
;*******************************************
;;延時程序;;
;*******************************************
;
;1MS延時程序,LED顯示程序用
DL1MS:MOVR6,#14H
DL1:MOVR7,#19H
DL2:DJNZR7,DL2
DJNZR6,DL1
RET
;20MS延時程序,采用調(diào)用顯示子程序以改善LED的顯示閃爍現(xiàn)象
DS20MS:CLRBELL
LCALLDISPLAY
LCALLDISPLAY
LCALLDISPLAY
SETBBELL
RET
;延時程序,用作按鍵時間的長短判斷
DL1S:LCALLDL05S
LCALLDL05S
RET
DL05S:MOVR3,#20H;8毫秒*32=0.196秒
DL05S1:LCALLDISPLAY
DJNZR3,DL05S1
RET
;*************************************
;以下是鬧鈴時間設(shè)定程序中的時調(diào)整程序
;*************************************
DSSFUNN:LCALLDISPLAY;等待鍵釋放
JNBP1.3,DSSFUNN
MOV50H,#0AH;時調(diào)整時顯示為00:00:-.
MOV51H,#0CH
WAITSS:SETBEA
LCALLDISPLAY
JNBP1.2,FFFF;時加1鍵
JNBP1.0,DDDD;時減1
JNBP1.3,OOOO;鬧鈴設(shè)定退出鍵
JNBP1.1,ENA;鬧鈴設(shè)定有效或無效按鍵
AJMPWAITSS
OOOO:LCALLDS20MS;消抖
JBP1.3,WAITSS
DSSFUNNM:LCALLDISPLAY;鍵釋放等待
JNBP1.3,DSSFUNNM
MOVDISPFIRST,#70H
LJMPSTART1
ENA:LCALLDS20MS;消抖;
JBP1.1,WAITSS
DSSFUNMMO:LCALLDISPLAY;鍵釋放等待
JNBP1.1,DSSFUNMMO
CPL05H
JNB05H,WAITSS11
MOV50H,#00H;05H=1,鬧鈴開,顯示為00:00:0。
AJMPWAITSS
WAITSS11:MOV50H,#0aH;鬧鈴不開,顯示為00:00:-.
AJMPWAITSS
FFFF:LCALLDS20MS;消抖;
JBP1.2,WAITSS
DSSFUNMM:LCALLDISPLAY;鍵釋放等待
JNBP1.2,DSSFUNMM
CLREA
MOVR0,#55H
LCALLADD1
MOVA,R3;

CLRC;
CJNEA,#24H,ADDHH33N;
ADDHH33N:JCWAITSS;小于24點(diǎn)返回
ACALLCLR0;大于等于24點(diǎn)清零
AJMPWAITSS
DDDD:LCALLDS20MS;消抖;
JBP1.0,WAITSS
DSSFUNDD:LCALLDISPLAY;鍵釋放等待
JNBP1.0,DSSFUNDD
CLREA
MOVR0,#55H
LCALLSUBB1
LJMPWAITSS
;*********************
;以下是鬧鈴判斷子程序
;*********************
BAOJ:JNB05H,BBAO;05H=1,鬧鐘開,要比較數(shù)據(jù)
MOVA,79H;從時十位、個位、分十位、分個位順序比較
CJNEA,55H,BBAO
MOVA,78H
CLRC
BB3:CJNEA,54H,BBAO
MOVA,77H
CLRC
CJNEA,53H,BBAO
MOVA,76H
CLRC
BB2:CJNEA,52H,BBAO
JNB07H,BBAO;07H在1秒到時會取反
CLRBELL;時分相同時嗚叫(1秒間隔叫)
RET
;
BBAO:SETBBELL;不相同或鬧鈴不開
RET
;********************************************************
END;程序結(jié)束

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉