用两个动态数码管从0显示到60,由89C51的P1口输出,不加译码器,直接连接数码管,注意是动态数码管,不是两个单独的静态数码管。
程序如下:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
MOV DPTR,#TAB ;表首址送DPTR
MOV R1, #0
MOV R2, #0
M1:
MOV R0, #50
LOOP:
CALL DIS
DJNZ R0, LOOP
MOV A, R3
ADD A, #1
DA A
CJNE A, #60H, SSS
CLR A
SSS:
MOV R3, A ;计数值.
MOV B, #16
DIV AB
MOV R2, A
MOV R1, B
SJMP M1
;-------------------------------------------------------
DIS: ;显示程序.
MOV A, R2 ;显示十位.
MOVC A, @A+DPTR
CLR P2.1
MOV P1, A
SETB P2.0 ;十位的位选.
CALL DLY
MOV A, R1 ;个位显示.
MOVC A, @A+DPTR
CLR P2.0 ;关闭十位的显示.
MOV P1, A
SETB P2.1 ;个位的位选.
CALL DLY
RET
;-------------------------------------------------------
TAB: DB 0xc0,0xf9,0xa4,0xb0,0x99 ;共阳极0~9
DB 0x92,0x82,0xf8,0x80,0x90
DLY: MOV R6, #14H ;10ms延时.
D1: MOV R7, #0F8H
DJNZ R7, $
DJNZ R6, D1
RET
;-------------------------------------------------------