之前我在网上搜了一遍 看到网上有很多关于这一方面的程序 但是我觉得 对于初学者而言看起来还是相当吃力的再这里 我分享一个简单一下的程序 希望能够帮助到大家
好了不罗嗦了 下面是四个方向的程序:
SH_CP EQU P2.1 ;定义595的时钟端
DS0 EQU P2.0
; ;定义595数据输入端
ST_CP EQU P2.2 ; ;定义595的锁存端
ORG 00H
AJMP MAIN
ORG 30H
MAIN: MOV R7,#16; ;一个字循环次数
AA:
CLR
P2.5
SETB P2.5
DJNZ R7,AA
CLR
P2.4
; ;初始化时钟口
MOV R0,#8 ; ;一个字节初始化
MOV R4,#50 ; ;移动的速度
MOV DPTR,#TAB
MOV R3,#80 ; ;字数的控制
MAIN1:
MOV A,R2
INC
A
MOVC A,@A+DPTR
ACALL
WB ;调用下一个字节
INC R2
MOV A,R2
DEC A
MOVC A,@A+DPTR
ACALL
WB ; ;调用一个字节
INC R2
CLR
P2.5
SETB P2.5 ; ;给164时钟端一个上升沿
SETB P2.4
; ;开始行选(低电平选通)
SETB
ST_CP
CLR
ST_CP ; ;给595锁存端一个下降沿完成一行一列的读取
INC R1
CJNE R1,#16,MAIN1 ;;判断一个字节是否发送完毕
CLR
P2.4 ; ;为下一次行选(低电平选通)做准备
MOV
R1,#0 ; ;初始化R1
CJNE R2,#32,MAIN1 ;;判断一个汉字是否发送完毕
MOV
R2,#0 ; ;初始化R2
DJNZ R4,MAIN1
MOV
R4,#50;50次 ;移动速度控制
INC DPTR
INC
DPTR
DJNZ
R3,MAIN1
AJMP MAIN
WB:
CLR C
RRC A
MOV DS0,C ;P2.0
SETB SH_CP ;P2.1
CLR SH_CP ;P2.1
DJNZ R0,WB
MOV R0,#8
RET
TAB:DB 000H, 000H, 000H, 000H, 000H, 000H,
000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H
DB 000H, 000H, 000H, 000H, 000H, 000H, 000H,
000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H;" ",0
DB 000H, 000H, 030H, 004H, 036H, 00EH, 037H,
03CH, 031H, 0F0H, 03FH, 0E0H, 03EH, 03AH, 000H, 013H
DB 00EH, 007H, 0FFH, 00EH, 0F8H, 01CH, 01BH,
0F8H, 01BH, 0F0H, 018H, 01CH, 01EH, 00EH, 01EH, 007H;"欢",1
DB 000H, 000H, 003H, 002H, 073H, 007H, 073H,
0FEH, 003H, 0FCH, 000H, 006H, 03FH, 0F3H, 03FH, 0F3H
DB 060H, 033H, 060H, 063H, 000H, 003H, 07FH,
0FFH, 07FH, 0FFH, 060H, 063H, 07FH, 0E3H, 07FH, 0E3H;"迎",2
DB 000H, 000H, 003H, 002H, 003H, 003H, 003H,
007H, 033H, 00EH, 03FH, 01CH, 00FH, 0F8H, 003H, 0F0H
DB 0FFH, 000H, 0FFH, 000H, 003H, 0FEH, 003H,
0FFH, 00FH, 003H, 03FH, 003H, 033H, 003H, 003H, 00FH;"光",3
DB 000H, 000H, 03FH, 0FCH, 03FH, 0FCH, 000H,
000H, 0FFH, 0FFH, 0FFH, 0FFH, 000H, 000H, 00CH, 000H
DB 01EH, 0FFH, 0F8H, 0FFH, 0F0H, 0C6H, 036H,
0FEH, 036H, 0FEH, 030H, 0C6H, 030H, 0FFH, 030H, 0FFH;"临",4
END