8051 source code / DOT MATRIX 세로로 한칸씩 이동하기
; DOT MATRIX 세로로 한칸씩 이동하기
COLGREEN EQU 0FFC5H
COLRED EQU 0FFC6H
ROW EQU 0FFC7H
ORG 8000H
MOV R1,#00H ; DOT MATRIX LED 끄기
MOV R2,#00H
MOV R0,#00H
CALL DOTCOLG
CALL DOTCOLR
CALL DELAY
INIT: MOV R2,#00000000B
MOV R0,#00000000B
CALL DOTCOLR ; RED COLOR 끄기
MOV R1,#00000001B ; 첫번째 열 ON
MOV R0,#00000001B ; 첫번째 행 ON
CLR C
DROW: CALL DOTCOLG ; GREEN COLOR 켜기
CALL DELAY
MOV A,R0
RLC A ; 다음 행으로 이동
MOV R0,A
JC DCOL ; 열 스캔 으로 분기
JMP DROW ; 행 스캔 반복
DCOL: MOV R0,#00000001B ; 첫번째 행으로 초기화
CLR C
MOV A,R1
RLC A ; 다음 열로 이동
MOV R1,A
JC INIT ; 스캔이 끝났으면 다시 처음 부터
JMP DROW ; 다음 열에서 스캔 시작
DOTCOLG: MOV DPTR,#COLGREEN
MOV A,R1
MOVX @DPTR,A
MOV DPTR,#ROW
MOV A,R0
MOVX @DPTR,A
RET
DOTCOLR: MOV DPTR,#COLRED
MOV A,R2
MOVX @DPTR,A
MOV DPTR,#ROW
MOV A,R0
MOVX @DPTR,A
RET
DELAY: MOV R7,#02H
DELAY1: MOV R6,#0FFH
DELAY2: MOV R5,#0FFH
DELAY3: DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END