;此數碼管爲共陽極數碼管,此程序中的取反指令可以不必,可以直接賦給原始值也是可以的
CNT EQU 30H ;賦值指令:給標號CNT賦值,標號CNT=30H
ORG 0000H
MOV P1,3FH
;剛開始的數據恢復程序(延時)
START: MOV R1,#00H
L0: DJNZ R1,L0
MOV SP,#50H
MOV CNT,#00H ;計數器先清零
LOOP: MOV A,CNT ;把CNT(地址)中的數(存的是程序表中的地址)付給A
MOV DPTR,#TABLE ;定義字形表的起始地址
MOVC A,@A+DPTR ;TABLE爲表的起始地址
CALL OUTPUT ;跳轉到輸出程序
INC CNT ;計數器加一
MOV A,CNT ;重新把CNT放在A中
CJNE A,#10,LOOP ;比較不相等轉移指令,如果數碼管顯示過9後,就不再轉移了
MOV CNT,#00H ;數碼管顯示9後,從新使計數器記0
SJMP LOOP ;重新循環
;程序中的數據表格,DB爲定義字節指令(從指定的地址開始,在程序存儲器的連續單元中定義字節數據)
TABLE: DB 3FH ;0
DB 06H ;1
DB 5BH ;2
DB 4FH ;3
DB 66H ;4
DB 6DH ;5
DB 7DH ;6
DB 27H ;7
DB 7FH ;8
DB 6FH ;9
;輸出函數
OUTPUT: PUSH PSW
CPL A ;取反指令
MOV P1,A
CALL DELAY
POP PSW
RET
;延時函數,延時125ms
DELAY: PUSH PSW
MOV R0,#00H
L1: MOV R1,#00H
L2: DJNZ R1,L2
DJNZ R0,L1
POP PSW
RET
END