📄 16x16_80c52.asm
字号:
ZISHU EQU 30H ;字数
SHOWTIME EQU 31H ;一个字重复扫描的次数
SAOMIAO EQU 32H ;扫描指针
QUMA EQU 33H ;取码指针
DIS_BUF_C EQU 34H ;缓冲区字数,这里是2
OFFSET EQU 35H ;取码指针偏移量
;********************************************
DIS_BUFL EQU 40H ;显示缓冲低字节区(40H~60H攻32字节)
DIS_BUFH EQU 60H ;显示缓冲高字节区(60H~80H攻32字节)
LOD_BUFL EQU 80H ;加载缓冲低字节区(80H~90H)
LOD_BUFH EQU 90H ;加载缓冲高字节区(90H~A0H)
ORG 0000H
LJMP START
ORG 0100H
START:
MOV SCON,#00H ;串行口初始化为方式0
MOV ZISHU,#14
LCALL CLRBUF ;把显示缓冲区清零
MOV DPTR,#TABLE
MOV R2,ZISHU
; SETB P1.4 ;初始状态译码器无效
NEXT: MOV R0,#LOD_BUFL
MOV R1,#LOD_BUFH
LCALL LOADING ;把字型码加载到加载缓冲区
MOV R3,#16 ;这个字是否每一行都移动了?
LOOP3: LCALL SHIFT ;把显示缓冲区内的字型移位
MOV SHOWTIME,#10
LOOP2: MOV R4,#16 ;一个字需要扫描的16次行
MOV SAOMIAO,#0H ;扫描指针清零
MOV QUMA,#0H ;取码指针清零
LOOP1: MOV A,SAOMIAO
MOV P1,A ;扫描指针输入
INC SAOMIAO ;扫描指针+1
MOV DIS_BUF_C,#2H ;缓冲区有2个字
LCALL DIS_LINE
INC QUMA ;取码指针+1
LCALL DELAY
; CLR P1.4
DJNZ R4,LOOP1 ;一个字需要扫描的16次行
DJNZ SHOWTIME,LOOP2 ;一个字的显示时间是否完成?
DJNZ R3,LOOP3 ;是否一个字的每一行的移动了
DJNZ R2,NEXT
LJMP $
;****************************************************************************
DIS_LINE: ;输入一行子程序,入口参数DIS_BUF_C,与缓冲区字数相等
PUSH PSW
PUSH ACC
MOV OFFSET,#0H ;取码指针偏移量,多一个字就多+16
NE1: MOV R0,#DIS_BUFL
MOV A,R0
ADD A,QUMA
ADD A,OFFSET
MOV R0,A
MOV A,@R0
CLR TI
MOV SBUF,A
JNB TI,$
CLR TI ;清发送完标志
MOV R0,#DIS_BUFH
MOV A,R0
ADD A,QUMA
ADD A,OFFSET
MOV R0,A
MOV A,@R0
CLR TI
MOV SBUF,A
JNB TI,$
CLR TI ;清发送完标志
MOV A,OFFSET
ADD A,#16 ;取下一个字需要加16的偏移量
MOV OFFSET,A
DJNZ DIS_BUF_C,NE1
POP ACC
POP PSW
RET
;**********************************************************************************
;把显示缓冲区清零
CLRBUF:
MOV R0,#DIS_BUFL
L1: MOV @R0,#0
INC R0
CJNE R0,#80H,L1
RET
;**********************************************************************************
;把字型码加载到加载缓冲区
LOADING:
PUSH 02h ;push r2
MOV R2,#16
L2:
MOV A,#0
MOVC A,@A+DPTR
MOV @R0,A ;把偶数个数字码存放在R0开始的缓冲区,共可以存放16个字码
INC R0
INC DPTR
CLR A
MOVC A,@A+DPTR
MOV @R1,A ;把奇数个数字码存放在R1开始的缓冲区,共可以存放16个字码
INC R1
INC DPTR
DJNZ R2,L2
POP 02h ;pop r2
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SHIFT:
PUSH PSW
PUSH ACC
SETB RS1 ;选择另外一组工作寄存器
MOV R3,#00H ;偏移量
MOV R4,#16
LOOPS:
CLR C ;清进位标志C
MOV A,#LOD_BUFH
ADD A,R3
MOV R0,A
MOV A,@R0
RLC A ;带进位左移,高字节的最高位移进Cy
MOV @R0,A ;移位后放回缓冲区
MOV A,#LOD_BUFL
PUSH PSW ;保护Cy,避免ADD进位影响
ADD A,R3
MOV R0,A
MOV A,@R0
POP PSW
RLC A ;高字节最高位移进低字节最低位 低字节高位进入Cy
MOV @R0,A
MOV A,#DIS_BUFH
PUSH PSW
ADD A,R3
ADD A,#16 ;取下一个字的高字节需要+16的偏移量
MOV R0,A
MOV A,@R0
POP PSW
RLC A
MOV @R0,A
MOV A,#DIS_BUFL
PUSH PSW
ADD A,R3
ADD A,#16
MOV R0,A
MOV A,@R0
POP PSW
RLC A
MOV @R0,A
MOV A,#DIS_BUFH ;显示缓冲区地址送A
PUSH PSW
ADD A,R3
MOV R0,A
MOV A,@R0
POP PSW
RLC A ;上缓冲区低字节的高位进入 这个缓冲区高字节低位,
MOV @R0,A
MOV A,#DIS_BUFL
PUSH PSW
ADD A,R3
MOV R0,A
MOV A,@R0
POP PSW
RLC A
MOV @R0,A
INC R3 ;偏移量+1,准备移下一对字节(下一行)
DJNZ R4,LOOPS ;一个字的16行是否都移动了?
CLR RS1
POP ACC
POP PSW
RET
;***********************************************************************************
DELAY:
SETB RS0
MOV R2,#200
J: DJNZ R2,J
CLR RS0
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TABLE :
DB 00H, 00H, 7fH, 0fcH, 7fH, 0fcH, 66H, 0ccH
DB 66H, 0ccH, 66H, 0ccH, 66H, 0ccH, 66H, 0ccH
DB 6eH, 0fcH, 7cH, 7cH, 78H, 0cH, 60H, 0cH
DB 7fH, 0fcH, 7fH, 0fcH, 60H, 0cH, 00H, 00H
DB 00H, 00H, 18H, 0cH, 19H, 8cH, 19H, 8cH
DB 19H, 8cH, 19H, 8cH, 19H, 8cH, 19H, 8cH
DB 19H, 8cH, 19H, 8cH, 19H, 8cH, 31H, 8cH
DB 31H, 8cH, 61H, 8cH, 40H, 0cH, 00H, 00H
DB 18h, 00h, 5ah, 0f8h, 5ah, 0f8h, 5ah, 0d8h
DB 7eh, 0d8h, 00h, 0d8h, 0feh, 0d8h, 0feh, 0d8h
DB 06h, 0d8h, 7eh, 0d8h, 60h, 0d8h, 6eh, 0d8h
DB 7dh, 9ah, 73h, 1eh, 02h, 0eh, 00h, 00h
DB 00h, 00h, 3fh, 0fch, 3fh, 0fch, 31h, 8ch
DB 3fh, 0fch, 3fh, 0fch, 31h, 8ch, 3fh, 0fch
DB 3fh, 0fch, 01h, 00h, 6dh, 8ch, 6ch, 86h
DB 0cch, 32h, 0cfh, 0f0h, 07h, 0f0h, 00h, 00h
DB 18h, 60h, 18h, 60h, 59h, 0fch, 59h, 0fch, 7ch
DB 60h, 0ffh, 0feh, 0dbh, 0feh, 18h, 18h
DB 3dh, 0feh, 0f9h, 0feh, 0d8h, 18h, 19h, 98h
DB 18h, 0d8h, 18h, 38h, 18h, 30h, 00h, 00h
DB 00H, 00H, 0cH, 60H, 0cH, 60H, 0cH, 60H
DB 18H, 30H, 10H, 18H, 33H, 0cH, 63H, 06H
DB 46H, 00H, 06H, 60H, 0cH, 60H, 18H, 30H
DB 3fH, 0f8H, 3fH, 18H, 00H, 00H, 00H, 00H
DB 00H, 00H, 3fH, 0fcH, 3fH, 0fcH, 00H, 0cH
DB 7fH, 0ecH, 7fH, 0ecH, 00H, 0cH, 3fH, 0ccH
DB 3fH, 0ccH, 30H, 0ccH, 30H, 0ccH, 3fH, 0ccH
DB 3fH, 0ccH, 00H, 3cH, 00H, 38H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 01H,00H,01H,00H,02H,80H,04H,40H
DB 08H,20H,12H,10H,21H,8EH,0C0H,84H
DB 00H,00H,1FH,0F0H,00H,10H,00H,20H
DB 00H,20H,00H,40H,00H,80H,01H,00H
;天
DB 00H,08H,7FH,0FCH,01H,00H,01H,00H
DB 01H,00H,01H,04H,0FFH,0FEH,01H,00H
DB 02H,80H,02H,80H,04H,40H,04H,40H
DB 08H,20H,10H,10H,20H,0EH,0C0H,04H
;是
DB 0FH,0E0H,08H,20H,08H,20H,0FH,0E0H
DB 08H,20H,08H,20H,0FH,0E0H,00H,04H
DB 0FFH,0FEH,01H,00H,09H,20H,09H,0F0H
DB 09H,00H,15H,00H,23H,00H,40H,0FEH
;空格
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
;年
DB 08H,00H,08H,08H,0FH,0FCH,11H,00H
DB 11H,00H,21H,10H,5FH,0F8H,11H,00H
DB 11H,00H,11H,04H,0FFH,0FEH,01H,00H
DB 01H,00H,01H,00H,01H,00H,01H,00H
;空格
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
;月
DB 00H,10H,0FH,0F8H,08H,10H,08H,10H
DB 08H,10H,0FH,0F0H,08H,10H,08H,10H
DB 08H,10H,0FH,0F0H,08H,10H,08H,10H
DB 10H,10H,10H,10H,20H,50H,40H,20H
;空格
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
;日
DB 00H,10H,1FH,0F8H,10H,10H,10H,10H
DB 10H,10H,10H,10H,10H,10H,1FH,0F0H
DB 10H,10H,10H,10H,10H,10H,10H,10H
DB 10H,10H,1FH,0F0H,10H,10H,00H,00H
;空格
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
;星
DB 00H,08H,3FH,0FCH,20H,08H,3FH,0F8H
DB 20H,08H,3FH,0F8H,01H,00H,21H,08H
DB 3FH,0FCH,21H,00H,41H,10H,0BFH,0F8H
DB 01H,00H,01H,04H,0FFH,0FEH,00H,00H
;期
DB 22H,04H,22H,7EH,22H,44H,7FH,44H
DB 22H,44H,3EH,7CH,22H,44H,3EH,44H
DB 22H,44H,22H,7CH,0FFH,0C4H,00H,44H
DB 24H,44H,22H,84H,41H,14H,82H,08H
;空格
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
;空格
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -