本帖最后由 简糊仙 于 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 |