📄 16x16.asm
字号:
SCLK_595 EQU P1.2 ;时钟
SDATA_595 EQU P1.1 ;数据
RCK_595 EQU P1.0 ;锁存
H1 BIT 00H
ORG 00H
LJMP START
ORG 0030H
START: MOV P0,#0FFH
MOV P2,#0FFH
MOV R0,#0
MOV R1,#0 ;表变址
MOV R2,#8 ;数据移位控制变量
MOV R3,#0 ;行控制数
MOV R4,#16 ;控制字的个数
MOV R5,#50 ;一个字显示次数
MOV R6,#0FEH
SETB H1
WRITE: MOV DPTR,#TAB
WRITE1: MOV A,R1
MOVC A,@A+DPTR
MOV 2AH,A //2AH送数据
LCALL WR_595 //送一位数据
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV 2AH,A
LCALL WR_595
LCALL OUT_595 //输出锁存
LCALL OUT_8550 //行输出
MOV P0,#0FFH
MOV P2,#0FFH
INC R1
CJNE R1,#32,WRITE //一屏字幕显示完
MOV R1,#0
DJNZ R5,WRITE
MOV R5,#50
WRITE2: MOV DPTR,#TAB+32
WRITE22: MOV A,R1
MOVC A,@A+DPTR
MOV 2AH,A //2AH送数据
LCALL WR_595 //送一位数据
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV 2AH,A
LCALL WR_595
LCALL OUT_595 //输出锁存
LCALL OUT_8550 //行输出
MOV P0,#0FFH
MOV P2,#0FFH
INC R1
CJNE R1,#32,WRITE2 //一屏字幕显示完
MOV R1,#0
DJNZ R5,WRITE2
MOV R5,#50
WRITE3: MOV DPTR,#TAB+64
WRITE33: MOV A,R1
MOVC A,@A+DPTR
MOV 2AH,A //2AH送数据
LCALL WR_595 //送一位数据
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV 2AH,A
LCALL WR_595
LCALL OUT_595 //输出锁存
LCALL OUT_8550 //行输出
MOV P0,#0FFH
MOV P2,#0FFH
INC R1
CJNE R1,#32,WRITE3 //一屏字幕显示完
MOV R1,#0
DJNZ R5,WRITE3
MOV R5,#50
WRITE4: MOV DPTR,#TAB+96
WRITE44: MOV A,R1
MOVC A,@A+DPTR
MOV 2AH,A //2AH送数据
LCALL WR_595 //送一位数据
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV 2AH,A
LCALL WR_595
LCALL OUT_595 //输出锁存
LCALL OUT_8550 //行输出
MOV P0,#0FFH
MOV P2,#0FFH
INC R1
CJNE R1,#32,WRITE4 //一屏字幕显示完
MOV R1,#0
DJNZ R5,WRITE4
MOV R5,#50
WRITE5: MOV DPTR,#TAB+128
WRITE55: MOV A,R1
MOVC A,@A+DPTR
MOV 2AH,A //2AH送数据
LCALL WR_595 //送一位数据
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV 2AH,A
LCALL WR_595
LCALL OUT_595 //输出锁存
LCALL OUT_8550 //行输出
MOV P0,#0FFH
MOV P2,#0FFH
INC R1
CJNE R1,#32,WRITE5 //一屏字幕显示完
MOV R1,#0
DJNZ R5,WRITE5
MOV R5,#50
LJMP START
;---------------------------------------------------------------
;行输出子程序
;---------------------------------------------------------------
OUT_8550: MOV DPTR,#TTAB
JB H1,P0KSC
P2KSC: MOV A,R3
P2KSC1: MOVC A,@A+DPTR
MOV P2,A
LCALL DELAY
INC R3
CJNE R3,#8,LOOP
MOV R3,#0
SETB H1
RET
P0KSC: MOV A,R3
P0KSC1: MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
INC R3
CJNE R3,#8,LOOP
MOV R3,#0
CLR H1
LOOP: RET
;---------------------------------------------------------------
;输出锁存器输出数据子程序
;---------------------------------------------------------------
OUT_595:
CLR RCK_595
NOP
SETB RCK_595 ;上升沿将数据送到输出锁存器
NOP
CLR RCK_595
RET
;--------------------------------------------------------------
;移位寄存器接收数据子程序
;--------------------------------------------------------------
WR_595:
MOV R2,#08H
MOV A,2AH
cpl a
WR_LOOP:
RLC A
MOV SDATA_595,C
SETB SCLK_595 ;上升沿发生移位
NOP
CLR SCLK_595
NOP
DJNZ R2,WR_LOOP
MOV R2,#8
RET
;--------------------------------------------------------------
;延时子程序
;--------------------------------------------------------------
DELAY:
MOV 43H,#14H ; every LED(2ms)
DL2: MOV 44H,#14H
DL1:
DJNZ 44H,DL1
DJNZ 43H,DL2
RET
TTAB: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
TAB:
;大 CB4F3
DB 080H,000H,080H,000H,080H,000H,080H,000H
DB 080H,000H,0FFH,07FH,080H,000H,040H,001H
DB 040H,001H,040H,002H,020H,002H,020H,004H
DB 010H,008H,008H,018H,004H,070H,002H,020H
;家 CBCD2
DB 040H,000H,080H,000H,0FCH,07FH,002H,020H
DB 0FAH,017H,080H,000H,040H,000H,0F0H,004H
DB 04EH,00DH,020H,003H,098H,003H,066H,00DH
DB 018H,071H,006H,021H,0A0H,000H,040H,000H
;好 CBAC3
DB 008H,000H,088H,03FH,008H,010H,008H,008H
DB 03FH,004H,024H,004H,024H,004H,0E4H,07FH
DB 022H,004H,026H,004H,018H,004H,010H,004H
DB 028H,004H,064H,004H,022H,005H,001H,002H
;! CA3A1
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 008H,000H,008H,000H,008H,000H,008H,000H
DB 008H,000H,008H,000H,008H,000H,008H,000H
DB 008H,000H,000H,000H,008H,000H,000H,000H
; 黑屏
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -