MOV 33H, #00H MOV 32H, #00H MOV 31H, #00H MOV 30H, #00H SETB TR0 START:LCALL DISP SJMP START ;LED动态显示子程序
;功能:动态显示六个数码管
;入口:显示缓冲区30H—35H中待显示的6个数据 DISP: MOV R0,#30H ;显示缓冲区首址 MOV R7,#00H ;设定每位显示延时时间 MOV R2,#06H ;显示位数 MOV R3,#20H ;共阳管位码初始值,从右端先亮 MOV A,@R0 ;取显示缓冲区的一个数据 DISP1:MOV DPTR, #TAB ;查表首址给DPTR MOVC A, @A+DPTR ;查表得到显示字符的字型码 MOV P0 , A ; 将字型码送P0口 MOV DPTR, #0101H MOVX @DPTR, A ;字型码送8155A口 MOV A , R3 ;位选码送A MOV P2 , A ;位码送P2口 MOV DPTR, #0103H MOVX @DPTR, A ;位码送8155C口
DJNZ R7 , $ ;延时
DJNZ R7 , $ ;延时 RR A ;位码右移 MOV R3,A ;位码回送R3 INC R0 ;指向下一位 MOV A,@R0 ;取显示缓冲区下一个数据 DJNZ R2,DISP1 ;6位显示一遍吗? RET
TAB: DB 0C0H, 0F9H, 0A4H , 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H 主程序流程图: