3 位數碼管,1秒內亮滅各一次。這個例子可以作為時鐘設定,調整位閃爍用。

;11.03.28 12M晶振,共陰數數碼管。P0段選,P2.0~P2.2位選
;按開始鍵,共陰數碼管顯示 123 ,1S內亮、滅一次.按停止鍵,數碼管滅。再按開始鍵,又開始123秒閃。周而復始。
;E:\DPJ\123交替1S \123.ASM
STRT BIT P2.6
STP BIT P2.7
ORG 00H
AJMP MAIN
ORG 0BH
AJMP T0INT
ORG 30H
MAIN:
MOV SP,#60H
MOV TMOD,#01H
MOV TH0,#3CH ;50MS定時器T0中斷一次
MOV TL0,#0B0H
SETB EA
SETB ET0
MOV R0,#10 ;10次為0.5S
MOV R1,#2
MAIN1:
ACALL KEY
AJMP MAIN1
DISP:
JNB F0,DISP01
MOV P0,#06H ;"1"的段碼
AJMP DISP02
DISP01:
MOV P0,#00H
DISP02:
CLR P2.0
ACALL D1MS
SETB P2.0
JNB F0,DISP11
MOV P0,#5BH
AJMP DISP12
DISP11:
MOV P0,#00H
DISP12:
CLR P2.1
ACALL D1MS
SETB P2.1
JNB F0,DISP21
MOV P0,#4FH
AJMP DISP22
DISP21:
MOV P0,#00H
DISP22:
CLR P2.2
ACALL D1MS
SETB P2.2
DJNZ R2,DISP
MOV R2,#2 ;顯示2次,加長DISP時間 ,用來防抖
RET
KEY:
ACALL DISP
JB STRT,KT
ACALL DISP
JNB STRT,$-2
AJMP START
KT:
ACALL DISP
JB STP,KEY
ACALL DISP
JNB STP,$-2
AJMP STOP
START:
SETB TR0
SETB F0
RET
STOP:
MOV R0,#10 ;如果這里R0不重新送#10,因為按停按鈕時,R0為當時值(可能小于10),這就可能造成重新按開始鍵 時,
;R0很快就減到0 ,而使數碼管亮j的時間小于0.5S再滅 。
CLR TR0
CLR F0
RET
D1MS:
MOV R7,#50
MOV R6,#10
DJNZ R6,$
DJNZ R7,$-4
RET
T0INT:
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,RTI
MOV R0,#10
CPL F0 ;F0作0.5S的標志,每0.5秒求反一次, 數碼管"123"秒閃。
DJNZ R0,RTI ;1S
MOV R0,#10
RTI:
RETI
END