📄 16x16_164.asm
字号:
C_T0 EQU 30H ;C_T0中断次数
OFFSET EQU 31H ;取码偏移量
ORG 0000H
ljmp start
ORG 000BH
LJMP P_T0
org 0100h
start:
SETB EA ;开启总中断开关
SETB ET0 ;开T0中断
MOV TMOD,#01H ;设置计时器模式 45536d,定时40毫秒
MOV SCON,#00H ;串行口初始化为方式0
MOV TH0,#0b1H ;设置定时器初始值
MOV TL0,#0E0H
MOV C_T0,#10
MOV OFFSET,#0 ;偏移量清零
; SETB TR0 ;启动T0定时器
;;;;;;;;;;;;;;;;;;;;;;;;;;R0=取码指针;R1=一个字需要扫描的次数;R2=扫描指针
LOOP: MOV R1,#16 ;每个字16个码
MOV R2,#00H ;扫描指针清零
MOV R0,#00H ;取码指针初始为0存入R0
L3:
MOV A,R2 ;扫描指针存入A
MOV P1,A ;扫描输出
INC R2 ;扫描指针加1,扫描下一个
MOV A,R0 ;取码指针存入A
ADD A,OFFSET ;加上偏移量
MOV DPTR,#TABLE;取数据表的上半部分的代码
MOVC A,@A+DPTR
CLR TI
MOV SBUF,A
JNB TI,$
CLR TI ;清发送完标志
INC R0 ;取码指针加1,取下一个码。
MOV A,R0
ADD A,OFFSET ;加上偏移量
MOV DPTR,#TABLE ;取数据表下半部份的代码
MOVC A,@A+DPTR
CLR TI
MOV SBUF,A
JNB TI,$
CLR TI ;清发送完标志
MOV A,OFFSET ;offset=offset+32
ADD A,#32
MOV OFFSET,A
DEC R0 ;取码指针减一,开始取第二个字
MOV A,R0 ;取码指针存入A
ADD A,OFFSET ;加上偏移量
MOV DPTR,#TABLE;取数据表的上半部分的代码
MOVC A,@A+DPTR
CLR TI
MOV SBUF,A
JNB TI,$
CLR TI ;清发送完标志
INC R0 ;取码指针加1,取下一个码。
MOV A,R0
ADD A,OFFSET ;加上偏移量
MOV DPTR,#TABLE ;取数据表下半部份的代码
MOVC A,@A+DPTR
CLR TI
MOV SBUF,A
JNB TI,$
CLR TI ;清发送完标志
MOV A,OFFSET ;offset=offset-32
SUBB A,#32
MOV OFFSET,A
INC R0
lcall DELAY
DJNZ R1,L3 ; ;一个字16个码是否完成?
LJMP LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY:
SETB RS0
; MOV R2,#01H
J: MOV R3,#100
K: DJNZ R3,K
; DJNZ R2,J
CLR RS0
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
P_T0:
DJNZ C_T0,QUIT
MOV A,OFFSET
ADD A,#2 ;没隔一段时间偏移量加2,实现滚动
MOV OFFSET,A
CJNE A,#192,LOOP3 ;若A不等于200,则loop3,形成cy标志
LJMP LOOP1
LOOP3: JNC LOOP1 ;offset>200,清零
MOV C_T0,#10 ;中断次数附初值
LJMP QUIT
LOOP1: MOV OFFSET,#0 ;查表偏移量清零
MOV C_T0,#10 ;中断次数附初值
QUIT:
MOV TH0,#0b1H ;设置定时器初始值
MOV TL0,#0E0H
RETI
TABLE :
/*
;空格
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,04H,7FH,0FEH,44H,44H
DB 44H,44H,44H,44H,44H,44H,44H,44H
DB 44H,44H,44H,44H,48H,3CH,50H,04H
DB 40H,04H,7FH,0FCH,40H,04H,00H,00H
;川
DB 00H,04H,10H,04H,10H,84H,10H,84H
DB 10H,84H,10H,84H,10H,84H,10H,84H
DB 10H,84H,10H,84H,10H,84H,10H,84H
DB 10H,84H,20H,04H,40H,04H,00H,04H
;师
DB 08H,04H,0BH,0FEH,48H,20H,48H,20H
DB 48H,24H,49H,0FEH,49H,24H,49H,24H
DB 49H,24H,49H,24H,49H,24H,49H,24H
DB 11H,34H,11H,28H,20H,20H,40H,20H
;范
DB 08H,20H,08H,20H,7FH,0FCH,08H,20H
DB 20H,00H,13H,0F0H,4AH,10H,22H,10H
DB 22H,10H,0AH,50H,0F2H,20H,22H,00H
DB 22H,02H,22H,02H,21H,0FEH,20H,00H
;大
DB 01H,00H,01H,00H,01H,00H,01H,00H
DB 01H,04H,0FFH,0FEH,01H,00H,02H,80H
DB 02H,80H,02H,40H,04H,40H,04H,20H
DB 08H,10H,10H,0EH,60H,04H,00H,00H
;学
DB 22H,10H,11H,10H,11H,20H,00H,44H
DB 7FH,0FEH,40H,04H,80H,08H,1FH,0E0H
DB 00H,40H,01H,84H,0FFH,0FEH,01H,00H
DB 01H,00H,01H,00H,05H,00H,02H,00H
;!
DB 00H,00H,18H,00H,18H,00H,18H,00H
DB 18H,00H,18H,00H,18H,00H,18H,00H
DB 18H,00H,18H,00H,18H,00H,00H,00H
DB 18H,00H,18H,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 + -