利用一片 8255A控制4个数码管。因为段码只有8位,所以可用 8255A 的一个端口作为段控制端口。8255A 的另外两个端口共16 位,可以作为位控制端口。所以,采用动态显示术时,一片 8255A 最多可以控制 16 个数码管。
A_PORT EQU 200H
B_PORT EQU 202H
C_PoRt EQU 204H
CRTL_PORT EQU 206H
DATA SEGMENT
OUTBUFF DB 2,0,1,5 ;显示值
LEDTAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;段码表
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,80H ;8255A初始化
MOV DX,CRTL_PORT
OUT DX,AL
LOP1: CALL DISP
JMP LOP1
DISP PROC NEAR ;数码管动态显示子程序
AGAIN: MOV CL,0F7H
LEA SI,OUTBUFF
LEDDISP:MOV AL,CL ;输出位码
MOV DX,C_PORT
OUT DX,AL
LEA BX,LEDTAB
MOV AL,[SI]
XLAT
MOV DX,A_PORT ;输出段码
OUT DX,AL
CALL DELAY_1S
MOV AL,0H
MOV DX,A_PORT ;清屏
OUT DX,AL
CMP CL,0FEH
JZ NEXT
INC SI
ROR CL,1
JMP LEDDISP
NEXT: RET
DISP ENDP
DELAY_1S PROC ;延时子程序
PUSH CX
PUSH BX
MOV BX,01H
D1: MOV CX,0FH
D2: LOOP D2
DEC BX
JNZ D1
POP BX
POP CX
RET
DELAY_1S ENDP
CODE ENDS
END START