怎么改善LED点阵左移拖影问题

2019-03-24 18:55发布

前阵子我在别的论坛买了一块16×64的点阵屏,带STC89C52RC驱动的,根据实物,我已绘制出其电路,并下载了一个左移程序,但搞了很久,都无法解决重影问题!如果一帧只扫一次的话,没有重影,每行扫频为1ms,但移动速度很多,没什么实用价值,于是设置R2延迟因子,同一帧扫几次,这样左移速度虽然慢下来了,但有重影。请高人指导一二!谢谢!!

电路及汇编程序如下:     ;============================================
; 16*64点阵屏左移程序
;============================================
D_F EQU 40H          ;第一个显示数据缓冲器
D_MB EQU 30H  ;数据位移动次数寄存器
D_AM EQU 31H  ;显示半角字个数寄存器
DAMT EQU 32H  ;显示半角字个数倍数寄存器
OFFSET EQU 33H  ;数据指针偏移量
EN  EQU P2.7  ;消隐信号线
S_I EQU P3.5  ;数据总线
RCK EQU P2.6  ;锁存信号线
SCK EQU P2.5  ;移位时钟信号线
;--------程序入口地址----------------
ORG 0000H
JMP START
ORG 0030H
;====================================
; 初始化
;====================================
START:
MOV SP, #0AH  ;修改堆栈指针
CLR A   ;清累加器
MOV R7, #9
MOV R0, #D_F
ST1: MOV @R0, A
INC R0
DJNZ R7, ST1
MOV R7, #4
MOV R0, #D_MB
ST2: MOV @R0, A
INC R0
DJNZ R7, ST2   ;寄存器清0
MOV P2, #0FFH
MOV DPTR, #DTAB  ;数据表首地址放入DPTR
MOV DAMT, #1  ;显示的半角字的个数的倍数
MOV R2, #4
;====================================
; 主程序
;====================================
MAIN:
MOV R5, #16  ;扫描16行
MOV OFFSET, #00H  ;数据指针偏移量清0
MA1:  CALL QUSHU   ;调用取数子程序
CALL DSEND   ;调用发送子程序
SETB EN    ;关显示
CLR RCK
NOP
    SETB RCK   ;锁存显示数据
    PUSH DPH
PUSH DPL   ;数据保护
MOV DPTR, #TAB         ;定位行选表
MOV A, R5
DEC A    ;修正行选位
MOVC A, @A+DPTR          ;提取行选码
ANL P2, #0F0H          ;将P2低四位清零
ADD A, P2   ;A的低四位行选码和P2的高四位相加
MOV P2, A   ;将结果放回P2
POP DPL
POP DPH
    CLR EN          ;开显示
LCALL DELAY
    DJNZ R5, MA1  ;16行未完继续
DJNZ    R2, MAIN
    MOV     R2, #4;移动速度
  INC D_MB   
MOV A, D_MB
CJNE A, #8,MAIN
MOV D_MB, #0  ;1个半角字符要移动8次
MOV A, #16   
ADD A, DPL
MOV DPL, A
MOV A, DPH
ADDC A, #00H
MOV DPH, A  ;地址指针修改
INC D_AM
MOV A, D_AM
CJNE A, #64, MAIN ;显示的半角字符的个数
MOV D_AM, #00H  
DJNZ DAMT, MAIN
;MOV DAMT, #1         ;显示的半角字的个数的倍数
JMP     START                 ;循环滚动显示
  
;===================================
; 取一行数子程序
;===================================
QUSHU:
MOV R7, #9  ;取出半角字数据的个数
MOV R0, #D_F  ;数据缓冲区首地址存入R0
PUSH DPH
PUSH DPL   ;数据保护
MOV A, OFFSET  ;查表偏移量放入A
QUSH1: ADD A, DPL
MOV DPL, A
MOV A, DPH
ADDC A, #00H  
MOV DPH, A
CLR A   
MOVC A, @A+DPTR  ;查表取数
MOV @R0, A  ;存储数据
INC R0   ;修改地址指针
MOV A, #16  ;修改查表偏移量
DJNZ R7, QUSH1  ;数据未取完继续
POP DPL
POP DPH
INC OFFSET   ;查表偏移量+1
RET   
;===================================
; 数据发送子程序
;===================================
DSEND:
MOV R0, #D_F  ;第一个显示数据缓冲区地址放入R0
MOV R6, #8  ;发送N字节(1行)
DSE1: MOV R7, #8  ;每次发送8位
MOV A, @R0  ;显示数据放入A
;CPL A    ;取反A
DSE2: RLC A   ;将A的内容按位移入C
MOV S_I, C  ;将C的内容送数据总线
CLR SCK  
NOP
SETB SCK   ;输出移位脉冲
DJNZ R7, DSE2  ;8位未发送完继续
INC R0   ;修改地址指针
DJNZ R6, DSE1  ;字节数未发送完继续
;--------屏幕左移一位---------------
MOV A, D_MB  ;移动位次数放入A
JZ TAMEND   ;为0转移
MOV R7, D_MB  ;移动位次数放入R7
MOV A, @R0  ;移入的数据存入A
;CPL A   ;取反A
DSE3: RLC A   ;将A的内容按位移入C
MOV S_I, C  ;将C的内容送数据总线
CLR SCK
NOP
SETB SCK   ;输出移位脉冲
DJNZ R7, DSE3  ;移位次数未完继续
;--------移位时间修正---------------
TAMEND: CLR C   ;清C
MOV A, #7
SUBB A, D_MB  ;需要再延时的次数
JZ D_OUT
MOV R7, A
TA1:   
DJNZ R7, TA1  ;空操作(延时)
D_OUT: RET
;****************************************
DELAY:
MOV R4,#5
D1:MOV R3,#25
DJNZ R3,$
DJNZ R4,D1
RET
;====================================
; 行选表
;====================================        
TAB: DB 00H,08H,04H,0CH,02H,0AH,06H,0EH,01H,09H,05H,0DH,03H,0BH,07H,0FH
;====================================
; 文字编码表
;====================================        

DTAB:

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0DFH,0EEH,0EEH,02H,0FAH,0F6H,0EEH,0C6H,0ABH,6BH,0EFH,0EFH,0EEH,0EEH,0EDH,0EBH
DB 0FFH,07H,0F7H,0F7H,0F7H,0F7H,0F7H,07H,6FH,6FH,6FH,6FH,0EDH,0EDH,0EDH,0F1H;"祝",1

DB 0FEH,0FEH,0FEH,0FEH,0FEH,00H,0FEH,0FDH,0FDH,0FDH,0FBH,0FBH,0F7H,0EFH,0DFH,0BFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,01H,0FFH,7FH,7FH,0BFH,0BFH,0DFH,0EFH,0E7H,0F1H,0FBH;"大",2

DB 0FDH,0FEH,0C0H,0BFH,0A0H,0FEH,0FDH,0F0H,8DH,0FBH,0E6H,99H,0E7H,9FH,0FAH,0FDH
DB 0FFH,0FFH,01H,0FBH,17H,0FFH,0FFH,0DFH,4FH,3FH,3FH,4FH,71H,7BH,0FFH,0FFH;"家",3

DB 0FDH,0FDH,80H,0FBH,0FBH,0F7H,0E7H,0E8H,0CFH,0AFH,6FH,0EFH,0EFH,0E8H,0EFH,0FFH
DB 0FFH,0FFH,01H,0FFH,0FFH,0BFH,0BFH,03H,0BFH,0BFH,0BFH,0BFH,0BFH,01H,0FFH,0FFH;"在",4

DB 0EFH,0F7H,80H,0DDH,0EBH,00H,0F7H,0F7H,00H,0F7H,0D3H,0D5H,0B5H,76H,0D5H,0EFH
DB 0FFH,0F1H,8FH,0BFH,0BFH,81H,0B7H,0B7H,0B7H,0B7H,0B7H,77H,77H,0F7H,0F7H,0F7H;"新",5

DB 0EFH,0EFH,0DFH,83H,0BAH,0BAH,0B9H,83H,0BBH,0BBH,0BBH,0BBH,83H,0BBH,0BFH,0FFH
DB 7FH,7FH,7FH,03H,0FBH,0FBH,0FBH,7BH,0BBH,9BH,0DBH,0FBH,0FBH,0D7H,0EFH,0FFH;"的",6

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,80H,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FBH,01H,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;"一",7

DB 0F7H,0F0H,0EFH,0EFH,0DFH,0B0H,77H,0F7H,0F7H,0F7H,00H,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,03H,7FH,7FH,7FH,07H,7FH,7FH,7FH,7FH,01H,7FH,7FH,7FH,7FH,7FH;"年",8

DB 0C0H,0DEH,0DEH,0DEH,0C0H,0DEH,0DEH,0C0H,0FEH,0FEH,0C0H,0FEH,0FEH,0FEH,00H,0FFH
DB 07H,0F7H,0F7H,0F7H,07H,0F7H,0F7H,07H,0FFH,0FFH,07H,0FFH,0FFH,0FFH,01H,0FFH;"里",9

DB 0FDH,0FBH,0F0H,0F7H,0F0H,0F7H,0F0H,0F7H,0F7H,80H,0FFH,0FEH,0F9H,0E7H,9FH,0FFH
DB 0FFH,0FFH,0FH,0EFH,0FH,0EBH,09H,0EBH,0E7H,01H,8FH,6FH,0EFH,0EFH,0AFH,0DFH;"身",10

DB 0EFH,0E7H,0EFH,0DFH,0C8H,9FH,5FH,0DEH,0DEH,0DDH,0DBH,0D4H,0DFH,0DFH,0DFH,0FFH
DB 0BFH,0BFH,0BFH,0BFH,03H,3FH,1FH,9FH,0AFH,0B7H,0B1H,0BH,0BFH,0BFH,0BFH,0FFH;"体",11

DB 0EFH,0EFH,0D2H,0DBH,9AH,57H,0D0H,0DDH,0DDH,0CDH,0D2H,0DBH,0D5H,0CEH,0DFH,0FFH
DB 0DFH,0DFH,07H,0D7H,01H,0D7H,07H,0DFH,07H,0DFH,03H,0DFH,0DFH,5FH,03H,0FFH;"健",12

DB 0FEH,0FFH,0C0H,0DFH,0D0H,0DFH,0C0H,0DFH,0D0H,0D7H,0DBH,0DDH,0DBH,0A7H,0B5H,7EH
DB 0FFH,7FH,01H,7FH,07H,77H,01H,77H,07H,7FH,37H,27H,5FH,67H,71H,0FBH;"康",13

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0CFH,0CFH,0EFH,0DFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;",",14

DB 0FFH,81H,0BDH,0B5H,0B5H,0B5H,0B5H,0B5H,0B5H,0B5H,0F7H,0EBH,0EDH,0DCH,0BDH,7FH
DB 0F7H,0F7H,0F7H,0F7H,01H,0E7H,0E7H,0D7H,0D7H,0B7H,0B7H,77H,0F7H,0F7H,0D7H,0EFH;"财",15

DB 0BFH,0D8H,0DBH,0FBH,7AH,0AAH,0EAH,0EAH,0DAH,0DBH,3BH,0BBH,0B6H,0B5H,0AFH,0BFH
DB 0FFH,01H,0BFH,7FH,03H,0FBH,03H,0FBH,03H,0DFH,57H,5BH,0DDH,0DDH,5FH,0BFH;"源",16

DB 0FEH,0FFH,0C0H,0DFH,0DFH,0DFH,0DFH,0DFH,0DFH,0DFH,0DFH,0DFH,0BFH,0BFH,7FH,0FFH
DB 0FFH,7FH,01H,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;"广",17

DB 0FEH,0BEH,0DEH,0C8H,0DEH,0FEH,0FEH,08H,0EEH,0EEH,0EDH,0EDH,0EBH,0D7H,0B8H,0FFH
DB 0EFH,0EFH,0EFH,03H,0EFH,0EFH,0EFH,01H,0EFH,0EFH,0EFH,0EFH,0EFH,0FFH,01H,0FFH;"进",18

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0CFH,0CFH,0EFH,0DFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;",",19

DB 0FFH,80H,0FDH,0FDH,0FDH,0FCH,0FDH,0FBH,0FBH,0FBH,0F7H,0F7H,0EFH,0DFH,0BFH,0FFH
DB 0FFH,01H,0FFH,0FFH,0EFH,07H,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,1FH,0BFH,0FFH;"万",20

DB 0FEH,00H,0FEH,0E0H,0EEH,0E0H,0FEH,0C0H,0FEH,00H,0FEH,0C0H,0FEH,0F6H,0FAH,0FDH
DB 0FFH,01H,0FFH,07H,0F7H,07H,0FFH,07H,0F7H,01H,0F7H,07H,0F7H,0FFH,0FFH,0FFH;"事",21

DB 0FFH,0C3H,0DAH,0DAH,0C2H,0D9H,0DBH,0DBH,0C2H,0DBH,0DBH,0DBH,0BBH,0A8H,77H,0FFH
DB 0DFH,0DFH,0DFH,0DFH,03H,0DFH,0DFH,0DFH,03H,0DFH,0DFH,0DFH,0DFH,01H,0FFH,0FFH;"胜",22

DB 0FEH,0C0H,0F7H,0FBH,00H,0FFH,0E0H,0EDH,0EEH,0E0H,0FFH,0D6H,0D7H,97H,0F8H,0FFH
DB 0FFH,03H,0DFH,0BFH,01H,0FFH,0FH,0EFH,0EFH,0FH,0FFH,0F7H,7BH,0EBH,0FH,0FFH;"意",23

DB 0FFH,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,0FFH,0EFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;"!",24

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

END 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
17条回答
Li_Lei
2019-03-25 03:08
看代码是个很累的事情,所以很少有人愿意给你读一遍。
这个问题以前遇到过,拖影的原因在于你不可能同时切换列和行。因此解决上要在列切换前关闭行(通过上下拉电阻)列切换后再开行显。
希望对你有用。

一周热门 更多>