//8*8点阵LED显现,用单片机AT89C51 驱动8*8点阵LED显现屏
//轮番显现0-9的数字,显现的方法选用自右向左拉幕式显现
//源程序和proteus仿真我一打包,地址:http://proteus.5d6d.com/thread-9031-1-1.html
R_CNTEQU31H
NUMBEQU32H
TCOUNTEQU33H
ORG0000H
LJMPSTART
ORG0BH ;定时器中止进口地址
LJMPINT_T0
ORG0030H
START:MOVR0,#00H ;显现的幕次(即每一幕显现的:行码开始序号)值0
MOVR_CNT,#00H;列码序列号置0
MOVTCOUNT,#00H ;行码序列号置0
MOVTMOD,#01H
MOVTH0,#(65536-5000)/256
MOVTL0,#(65536-5000)MOD 256
SETB TR0
MOVIE,#82H
SJMP$
//定时器中止处理函数
INT_T0:MOVTH0,#(65536-5000)/256
MOVTL0,#(65536-5000)MOD 256
MOVDPTR,#TAB ;取列码表 首地址
MOVA,R_CNT
MOVCA,@A+DPTR
MOVP3,A
MOVDPTR,#NUB ;取行码表 首地址
MOVA,NUMB
MOVCA,@A+DPTR
MOVP0,A ;输出行号
INCNUMB
NEXT1: INCR_CNT
MOVA,R_CNT
CJNEA,#8,NEXT2
MOVR_CNT,#0
MOVNUMB,R0
NEXT2: INCTCOUNT
MOVA,TCOUNT
CJNEA,#40,NEXT4 ;每个数字显现200ms
MOVTCOUNT,#00H
INC R0 ;上一幕显现行码的开始序列号+1
CJNER0,#88,NEXT3
MOVR0,#00H
NEXT3:MOVNUMB,R0 ;送新一幕显现行码的开始序列号
NEXT4:RETI
TAB: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH;列值
NUB: DB 00H,00H,00H,00H,00H,00H,00H,00H;空
DB 00H,00H,3EH,41H,41H,41H,3EH,00H;0
DB 00H,00H,00H,00H,21H,7FH,01H,00H;1
DB 00H,00H,27H,45H,45H,45H,39H,00H;2
DB 00H,00H,22H,49H,49H,49H,36H,00H;3
DB 00H,00H,0CH,14H,24H,7FH,04H,00H;4
DB 00H,00H,72H,51H,51H,51H,4EH,00H;5
DB 00H,00H,3EH,49H,49H,49H,26H,00H;6
DB 00H,00H,40H,40H,40H,4FH,70H,00H;7
DB 00H,00H,36H,49H,49H,49H,36H,00H;8
DB 00H,00H,32H,49H,49H,49H,3EH,00H;9
DB 00H,00H,00H,00H,00H,00H,00H,00H;空
END