DISP: MOV R0 , #30H ;显示缓冲区的首地址值赋给R0
MOV R2 , #20H ;位选码指向P0.5
DISP1: MOV A , @R0 ;取出要显示的数
MOV DPTR , #SEG ;指向换码表首址
MOV A , A+DPTR ;取出显示码
MOV DPTR , #0FD01H
MOV @DPTR , A ;输出显示码到8155A口
MOV A , R2 ;位边码赋给 A
INC DPTR ;求8155B口寄存器地址
MOVX @DPTR , A ;从8155 B口输出位选码
ACALL DIM ;延时 1ms
MOV A , R2
JNB ACC.0 , DISP2 ;6位全显示完了吗?若末完则继续显示
RET
DISP2: INC R0 ;求下一位要显示的数的地址
MOV A , R2 ;求下一个位选码
RR A
MOV R2 , A
AJMP DISP1
DIM: MOV R3 , #7DH
DL1: NOP
NOP
DJNZ R3 , DL1
RET
SEG: DB 3FH ;对应于字符是0
DB 06H ;对应于字符是1
DB 5BH ;对应于字符是2
DB 4FH ;对应于字符是3
DB 6BH ;对应于字符是4
DB 6DH ;对应于字符是5
DB 7DH ;对应于字符是6
DB 07H ;对应于字符是7
DB 7FH ;对应于字符是8
DB 67H ;对应于字符是9
DB 77H ;对应于字符是A
DB 7CH ;对应于字符是b
DB 39H ;对应于字符是c
DB 5EH ;对应于字符是d
DB 79H ;对应于字符是E
DB 71H ;对应于字符是F
在这种扫描电路中,由于每个LED数码管的发光缩短到原来的1/N,所以每个管子的发光亮度必须为单独工作时的N倍,其通过的电流也要增加N倍,因此,必须使用驱动器。