一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 5881|回复: 13

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

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

电路及汇编程序如下:

16×64 Dot Matrix LED Display.jpg

;============================================
; 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
发表于 2012-1-15 00:32 | 显示全部楼层
本帖最后由 狗狗百里游 于 2012-1-15 00:33 编辑

595硬件驱动带锁存的,16选一,64列,应该还不会闪烁。
注意程序思路就可以了。
一:读取字库,(只有16选一的一行亮,点阵的内容不变的)
二:写入16选一的数据,64点,8个字节数据而已。(只有16选一的一行亮,点阵的内容不变的)
三:关闭显示。(黑屏,如果不关闭显示就切换,内容就会瞬间重叠,拖尾,闪烁)
四:切换内容显示。(瞬间显示出来)

转到一,如此循环。

只有第三步是黑屏而已,操作代码根据硬件接线不同也不会超过十行吧?
第四步瞬间切换显示内容,操作代码根据硬件接线不同也不会超过十行吧?


剩下的只是显示内容停留的时候,在后台读取字库,跟写入595而已。如果运行速度太慢,造成停留时间太长,会觉得闪烁。
如果是io口模拟spi写入595,avr的速度是c51的8倍,另外avr硬件spi的写入速度,估计也比avr模拟spi快8倍以上。

64列只显示8个汉字而已,硬件上可以运算的过来的,优化程序吧。我试过avr硬件sp1驱动32个汉字的,不闪烁的。

所以,只要优化读取字库代码,如果内存多,就把字库缓存到内存,跟优化spi的代码就可以了。
最后就是,如果切换内容交替的太快,(因为每切换一次就黑屏一次),内容实际显示的时间就会减少,这样显示的亮度就会下降,跟闪烁。
回复

使用道具 举报

发表于 2012-1-15 03:39 | 显示全部楼层
回复 2# 狗狗百里游


   百里游哥哥 要是用m8l-8au或者m88 驱动点阵 能够给个历程吗 64*64或者32*64的
回复

使用道具 举报

 楼主| 发表于 2012-1-15 12:23 | 显示全部楼层
回复 2# 狗狗百里游

大哥, 我的这个程序的思路就如你说的这样, 但它仍然闪烁, 有拖影, 请再次指教! 不知LED控制卡的左移程序是怎么样实现的? 我这几天观察了中国农业银行和中国邮政门口的广告屏, 他们左移快或慢都不会有拖影或闪烁!
回复

使用道具 举报

 楼主| 发表于 2012-1-15 12:34 | 显示全部楼层
回复 2# 狗狗百里游

哦, 想到了, 我原来是启用9个单元缓存字库的, 16*64要全部先缓存的话, 一帧数据就需要128个单元进行缓存,  51的ram很小,这个该怎么办?
回复

使用道具 举报

发表于 2012-1-15 15:35 | 显示全部楼层
本帖最后由 狗狗百里游 于 2012-1-15 15:52 编辑

拖影的话,要落实硬件上跟软件上,是否能实现黑屏后切换显示,在代码中插入延时,慢慢观察,点阵怎样显示出来内容

发现代码是07年编写的东西了,当时买有二手的双手点阵玩,估计现在我都看不懂了...
c51可以直接定义常量,应该问题不大吧,avr大常量得用progmem,速度才慢。
c51的晶振要上24M以上才好用.....
还有一个问题要注意的,c51,跟avr gcc的编译器编译设置,一般来说,优化编译后的字节越少,运行速度越慢,如果不优化,编译后的字节最大,运行速度最快。实际试一下就知道了。
我记得我的代码中,运行最占时间的是这句,c51不支持硬件乘法,avr支持,运行速度区别就大了。
            mm=(m+n )*32 ;    //这个循环会大大拖慢显示速度,造成黑屏时间长,会闪烁。
不同的编译设置,编译器也许会优化成mm=(m+n )<<5 ;也许不会。
LED_32X64_GCC_SPI目录里面的代码,例如有六个汉字要逐列移动过来,spi的发送有个技巧,其实是,前面5个汉字的数据是用硬件spi发送出去的,后面一个汉字因为要位移一列,所以是关闭硬件spi,用模拟发送最后一个汉字出去的。代码sendbyte_3_yd
LED_32X64.rar (112.16 KB, 下载次数: 308)
回复

使用道具 举报

发表于 2012-1-15 15:47 | 显示全部楼层
for (n=0;n<hz;n++) { //有hz个16*16点阵
                         mm=(m+n )*32 ;    //这个循环会大大拖慢显示速度,造成黑屏时间长,会闪烁。
                         //   sendbyte(hzdot[y+y+mm]);
                         //   sendbyte(hzdot[y+y+mm+1]);
                         //  sendbyte( *( str + y+y+mm ) );
                         //  sendbyte( *( str + y+y+mm+1 ) );
         spi_send( *( str + y+y+mm ) );
            spi_send( *( str + y+y+mm+1 ) );
                       //  sendbyte_2( *(  str + y+y+mm),8);   //  可以用sendbyte_2替换sendbyte
                    //     sendbyte_2( *(  str + y+y+mm+1),8);   //
                    }

   mm=(m+n )*32 ;    //这个循环会大大拖慢显示速度,造成黑屏时间长,会闪烁。
m是常量,如果优化成下面的代码,效率会不会好点,现在我没有硬件测试就不知道了。

                     mm=m*32
       for (n=0;n<hz;n++) { //有hz个16*16点阵
                         mm=mm+n*32 ;    //这个循环会大大拖慢显示速度,造成黑屏时间长,会闪烁。
                       或者  mm=mm+32 ;    //这个循环会大大拖慢显示速度,造成黑屏时间长,会闪烁。
                    }
回复

使用道具 举报

 楼主| 发表于 2012-1-15 20:56 | 显示全部楼层
回复 7# 狗狗百里游

才刚学C语言, 不大会看呀, 有没有汇编的呀
回复

使用道具 举报

 楼主| 发表于 2012-2-4 16:37 | 显示全部楼层
继续顶一下, 还没解决
回复

使用道具 举报

 楼主| 发表于 2012-2-4 20:32 | 显示全部楼层
本帖最后由 简糊仙 于 2012-2-4 20:36 编辑

以下的这个程序与上面的显示内容一样, 电路一样,程序有点不同, 但仍然无法解决慢速移动而不闪烁的问题, 求懂汇编的高人指点一二!

;============================================
;        16*64点阵屏左移程序 (Modified by 简糊仙)
;============================================        
;B  ------数据位移动次数寄存器
;26H------左移速度寄存器
;28H------显示半角字个数倍数寄存器
;29H,2AH------延时同步修正寄存器
;2BH------扫描还剩几行寄存器
;2DH------寻址偏址寄存器
;2EH------每次移入内存单元的数据要左移的次数临时值寄存器
;2FH------显示半角字个数寄存器
;30H-38H--显示内容9个存储单元

;*************************************************************
;***************引脚定义,根据使用不同的管脚而改动*************
;*************************************************************
;P2.3=A,P2.2=B,P2.1=C,P2.0=D
SER     EQU    P3.5  ;串行内容发送端
SRCLK   EQU    P2.5   ;串行时钟端
RCLK    EQU    P2.6   ;串行输出锁存端
EN      EQU    P2.7   ;EN为138使能端,高电平关闭显示,低电平开显示
;*************************************************************        
;*********************中断入口程序****************************
        ORG     0000H
        LJMP    MAIN
        ORG     0003H
        RETI
        ORG     000BH
        RETI
        ORG     0013H
        RETI
        ORG     001BH
        RETI
        ORG     0023H
        RETI
        ORG     0030H
;***************主程序****************************************
MAIN:   SETB   EN               ;关显示端口
        MOV    SP,#70H          ;堆栈首址
        MOV    R0,#26H         
        MOV    R1,#10            
        MOV    A,#00H
CL1:     MOV    @R0,A                    ;20H~2FH单元清零
        INC    R0
        DJNZ   R1,CL1
                MOV  R0,#30H
        MOV  R1,#8               
                MOV  A,#0FFH
CL2:     MOV @R0,A                  ;30H~38H单元置1,作初始消隐
        INC  R0                        
        DJNZ R1,CL2
         MOV  DPTR,#TAB2
         MOV    28H, #1          ;显示半角字个数倍数寄存器
                 MOV    2DH, #0          ;寻址偏址寄存器
MA1:      MOV    2FH,#64  ;显示半角字个数寄存器
MA2:     LCALL  L01       ;运行一次后,内容左移显示八次,寻址偏址不变.
         CLR    C
         MOV    A,DPL
         ADD    A,#10H
         MOV    DPL,A
         MOV    A,DPH
         ADDC   A,#00H
         MOV    DPH,A
         DJNZ   2FH,MA2
         DJNZ   28H,MA1
         LJMP   MAIN
L01:         MOV   B, #1     ;数据位移动次数寄存器
L04:    MOV   26H,#1    ;左移速度寄存器
L05:      LCALL L02     ;扫描显示1帧
         DJNZ  26H,L05
         INC   B
         MOV   A,#09H
         CJNE  A,B,L04 ;如果B中的数超过8就完成1个字符的显示,否则继续循环
         RET
L02:   MOV  2BH,#10H      ;扫描的行数
L06:    LCALL  L03     ;扫描显示1行子程序
         DJNZ   2BH,L06
         MOV    A,2DH
         SUBB   A,#10H
         MOV    2DH,A
         RET
L03:   MOV  2EH,B         ;显示内容要左移次数再显示的赋值给2EH单元
         LCALL  DSEND        ;发送串行口子程序
         LCALL  RSELECT          ;选通行子程序
         LCALL  DL1MS     ;延时显示1MS
                 LCALL  DGET        ;将显示内容移入内存单元30H~38H
L07:      LCALL  LSHIFT
         DJNZ   2EH,L07
         LCALL  TAMEND        ;左移速度同步修正
         RET

;****************************************************************************
;*************************显示内容移入内存单元子程序*************************
DGET:   MOV    R0,#30H
        MOV    R4,#9            ;每幕显示的字数加1,如每幕显示字数不同要作相应改动
        MOV    A, 2DH
DGET1:     MOVC   A, @A+DPTR
        MOV    @R0,A         
        MOV    A,2DH
        ADD    A,#16           ;加16,移到下一个字节的对应位置
            MOV    2DH,A
            INC    R0        
            DJNZ   R4,DGET1
            MOV    A,2DH
            SUBB   A,#143          ;每次显示4个字,减143,如每次显示字数不同要作相应改动
            MOV    2DH,A
            RET

;*****************************发送数据到串口子程序*********************************
DSEND:   MOV  R0,#30H
        MOV  R5,#8                ;一行有8个字节;如每次显示字数不同要作相应改动
DS1:     CLR  C                        ;清C方便每个字节的移动
             MOV  R2,#8                ;每个字节有8位
        MOV  A,@R0                ;将显存的字节的单元移入A
        LCALL  DS2                ;调用显示一个字节的子程序
        INC  R0                        ;指向下一个显存的单元
        DJNZ R5,DS1                ;8个字节全部移入了没有,未则继续
        RET
DS2:    CLR  SRCLK                ;清串行CP端
        RLC  A                        ;将每个字节移位
        MOV  SER,C                ;将移入C的位移入信号端
        SETB SRCLK                ;触发串行CP端
        DJNZ R2,DS2                ;每个字节位移8次够了没有?
        RET

;*******选通行子程序**********************************************
RSELECT:      SETB  EN               ;将使能端变为高电平为下降沿作准备
        CLR   RCLK        ;将输出锁存变为低电平,为上升沿作准备
         NOP
         SETB  RCLK                ;输出锁存为上升沿,显示一个
        PUSH        DPH
        PUSH        DPL                        ;数据保护
        MOV        DPTR,        #TAB1                ;定位行选表
        MOV A, 2BH
        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               ;开显示
         RET

;**********左移一位子程序**************
LSHIFT:      MOV  R0,  #38H    ;显示单元未址
         MOV  R2,  #9H     ;移出高位个数
         CLR  C
LSHIFT1:      MOV  A,   @R0
         RLC  A            ;将后一字节的最高位移到C里,再移到前一字节的最低位
         MOV  @R0, A
         DEC  R0
         DJNZ R2,  LSHIFT1
         CLR  C
         RET

;********************移动查模式时速度同步修正子程序*******************
TAMEND:    MOV   29H,B
         MOV   A,#17
         SUBB  A,29H
         MOV   2AH,A
TAMEND1:      LCALL DL60US
         DJNZ  2AH ,TAMEND1
         RET

;***************************1MS延时子程序***********************
DL1MS: MOV   R6,#5H        
DL1:     MOV   R5,#100        
DL2:     DJNZ  R5,DL2
         DJNZ  R6,DL1
         RET

;******60US延时子程序*****************
DL60US:  MOV   R6,#30
DL3:     DJNZ  R6,DL3
         NOP
         RET

;*********************************************************************************
;***********************************字码表****************************************
;*********************************************************************************
TAB1: DB 08H,04H,0CH,02H,0AH,06H,0EH,01H,09H,05H,0DH,03H,0BH,07H,0FH,00H

TAB2:

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
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2026-3-13 22:48 , Processed in 0.039007 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表