ORG 0 ;程序从0地址开始
START: MOV DPTR,#TAB ;将DPTR指向编码表位置
LOOP: CLR A ;清空ACC
MOVC A,@A+DPTR ;根据ACC的内容取出编码表里的编码
CJNE A,#0FFH,SHOW ;若ACC的内容不等于0FFH,则跳至SHOW处执行
AJMP START ;跳到START处执行
SHOW: MOV P2,A ;让P1口输出ACC的内容
ACALL DELAY ;调用延时子程序
INC DPTR ;将DPTR寄存器的内容加1
AJMP LOOP ;跳到LOOP处执行
;0.25秒延时子程序(12MHz晶振)===========================
DELAY: MOV R5,#2 ;R5寄存器加载8次
D0: MOV R7,#250 ;R7寄存器加载250次数
D1: MOV R6,#250 ;R6寄存器加载250次数
D2: DJNZ R6,D2 ;D2循环执行R6次
DJNZ R7,D1 ;D1循环执行R7次
DJNZ R5,D0 ;D0循环执行R5次
RET ;返回主程序
TAB: ;流水灯花样可以任意编写(最后一组为11111111)
DB 10010101B
DB 01101010B
DB 10100101B
DB 01010101B
DB 10001010B
DB 01101000B
DB 10110101B
DB 01000010B
DB 10000000B
DB 01000000B
DB 00100000B
DB 00010000B
DB 00001000B
DB 00000100B
DB 00000010B
DB 00000001B
DB 00000000B
DB 11010111B
DB 11001001B
DB 11001101B
DB 11001001B
DB 00110111B
DB 00000001B
DB 00000010B
DB 00000100B
DB 00001000B
DB 00010000B
DB 00100000B
DB 01000000B
DB 10000000B
DB 11011101B
DB 11101011B
DB 11101101B
DB 11101011B
DB 11011011B
DB 10111111B
DB 01111011B
DB 10111011B
DB 11011111B
DB 11101011B
DB 10110101B
DB 11011011B
DB 01101101B
DB 0FFH ;11111111
END ;主程序结束
|