CLK EQU P3.2
DINA EQU P3.3
DINB EQU P3.4
CLEAR EQU P3.5
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN:
MOV SP,#70H ;设置堆栈指针
MOV 50H,#07EH ;设置发送的列数据
MOV 51H,#0BDH
MOV 52H,#0DBH
MOV 53H,#0E7H
MOV 54H,#0E7H
MOV 55H,#0DBH
MOV 56H,#0BDH
MOV 57H,#07EH
CLR CLEAR ;初始化 IO口
SETB CLK
SETB DINA
SETB DINB
SETB CLEAR
MAINLOOP:
MOV R6,#8H ;设置扫描次数
MOV DPTR,#09000H ;读数扫描端口数据
MOV R1,#50H ;指定列数据指针
Flashcy:
MOV A,@R1 ;读取列数据
MOV R0,A
INC R1 ;列数据指针加1
CLR A
MOVC A,@a+ DPTR ;读取扫描端口数据
MOV P1,0FFH
LCALL SENDTO ;发送列数据
MOV P1,a
INC DPTR
LCALL DELAY
DJNZ R6,flashcy
SJMP mainloop
Sendto:
PUSH ACC
CLR CLK
SENDTIME:
MOV R7,#08H
MOV A,R0
CLR C
SENDCY:
RRC A
MOV DINA,C
SETB CLK
CLR CLK
DJNZ R7,SENDCY
POP ACC
RET
DELAY:
MOV R7,@01
DELAY0:
MOV R4,#17
DELAY1:
MOV R3,#28
DJNZ R3,$
DJNZ R4,DELAY1
DJNZ R7,DELAY0
RET
ORG 09000H
DB 0FEh,0FDh,0FBh,0F7H,0EFh,0DFh,0BFh,07Fh
:
上面那段程序中,我想问下,最后LED点亮的话是怎么点亮的,第一次扫描,列数据应该是01111110,但行数据堆栈后输出应该是01111111,这怎么亮呢?而且程序中,MOV P1 ,0FFH,这条指令我也不懂,有人讲是清屏用,麻烦高手解释下。。
DINA EQU P3.3
DINB EQU P3.4
CLEAR EQU P3.5
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN:
MOV SP,#70H ;设置堆栈指针
MOV 50H,#07EH ;设置发送的列数据
MOV 51H,#0BDH
MOV 52H,#0DBH
MOV 53H,#0E7H
MOV 54H,#0E7H
MOV 55H,#0DBH
MOV 56H,#0BDH
MOV 57H,#07EH
CLR CLEAR ;初始化 IO口
SETB CLK
SETB DINA
SETB DINB
SETB CLEAR
MAINLOOP:
MOV R6,#8H ;设置扫描次数
MOV DPTR,#09000H ;读数扫描端口数据
MOV R1,#50H ;指定列数据指针
Flashcy:
MOV A,@R1 ;读取列数据
MOV R0,A
INC R1 ;列数据指针加1
CLR A
MOVC A,@a+ DPTR ;读取扫描端口数据
MOV P1,0FFH
LCALL SENDTO ;发送列数据
MOV P1,a
INC DPTR
LCALL DELAY
DJNZ R6,flashcy
SJMP mainloop
Sendto:
PUSH ACC
CLR CLK
SENDTIME:
MOV R7,#08H
MOV A,R0
CLR C
SENDCY:
RRC A
MOV DINA,C
SETB CLK
CLR CLK
DJNZ R7,SENDCY
POP ACC
RET
DELAY:
MOV R7,@01
DELAY0:
MOV R4,#17
DELAY1:
MOV R3,#28
DJNZ R3,$
DJNZ R4,DELAY1
DJNZ R7,DELAY0
RET
ORG 09000H
DB 0FEh,0FDh,0FBh,0F7H,0EFh,0DFh,0BFh,07Fh
:
上面那段程序中,我想问下,最后LED点亮的话是怎么点亮的,第一次扫描,列数据应该是01111110,但行数据堆栈后输出应该是01111111,这怎么亮呢?而且程序中,MOV P1 ,0FFH,这条指令我也不懂,有人讲是清屏用,麻烦高手解释下。。