📄 lcd.asm
字号:
r16 .set 280h
r17 .set 282h
r18 .set 284h
r21 .set 286h
r22 .set 288h ;r22 为调用显示一次的列数
r23 .set 28ah ;r24显示起始页
r24 .set 28ch ;r24显示起始列
r25 .set 28eh ;r25显示结束页
r26 .set 290h
keydata .set 292h ;存放键值
rowdata .set 294h ;存放行数
scandata .set 296h ;存放扫描值
keybuffer .set 298h ;读写键值缓冲
dp_user .set 5h
keydata1 .set 29ah
lcdtab .set 29ch
lcddata .set 29eh
pbdatdir .set 709ah
dp_pf2 .set 0e1h
padatdir .set 7098h
pcdatdir .set 709ch
mcra .set 7090h
mcrb .set 7092h
mcrc .set 7094h
pedatdir .set 7095h
pfdatdir .set 7096h
;;;;;;以F口的低四位为输出,C口的7,6,5,0为输入,调试以通
.data
;-- 文字: 百 --
;-- 宋体24; 此字体下对应的点阵为:宽x高=32x32 --
tab24
.word 000H,000H,000H,004H,004H,00CH,00CH,00CH,00CH,00CH,004H,004H,004H,006H,006H,006H
.word 007H,003H,002H,002H,002H,003H,003H,003H,003H,003H,001H,001H,001H,000H,000H,000H
.word 000H,000H,000H,000H,000H,000H,000H,000H,000H,007H,00FH,00FH,00CH,00CH,004H,004H
.word 0C4H,0E4H,07CH,00CH,002H,003H,003H,004H,000H,000H,000H,000H,000H,000H,000H,000H
.word 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,0FFH,0FFH,001H,001H,021H,021H
.word 021H,021H,021H,021H,031H,0FFH,0FFH,000H,000H,000H,000H,000H,000H,000H,000H,000H
.word 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,0C0H,0F0H,080H,000H,000H,000H
.word 000H,000H,000H,000H,000H,0E0H,0C0H,000H,000H,000H,000H,000H,000H,000H,000H,000H
;-- 文字: 科 --
;-- 楷体_GB231224; 此字体下对应的点阵为:宽x高=32x32 --
tab23
.word 000H,000H,000H,000H,000H,000H,000H,03FH,07FH,060H,000H,001H,001H,001H,001H,000H
.word 000H,018H,01CH,00CH,005H,007H,002H,002H,001H,001H,000H,000H,000H,000H,000H,000H
.word 000H,001H,001H,001H,001H,001H,001H,0FFH,0FFH,000H,000H,08CH,08CH,008H,008H,000H
.word 020H,031H,033H,013H,0FFH,0FFH,01FH,009H,00CH,00CH,00CH,004H,006H,004H,000H,000H
.word 000H,000H,000H,080H,080H,080H,080H,0FFH,0FFH,080H,080H,0C0H,040H,040H,040H,040H
.word 040H,000H,000H,000H,0E0H,0FFH,000H,080H,0C0H,070H,010H,008H,004H,002H,002H,000H
.word 000H,000H,000H,000H,000H,000H,000H,0C0H,0FEH,000H,000H,000H,000H,000H,000H,000H
.word 000H,000H,000H,000H,000H,0F0H,0E0H,000H,000H,000H,000H,000H,000H,000H,000H,000H
;-- 文字: 融 --
;-- 楷体_GB231224; 此字体下对应的点阵为:宽x高=32x32 --
tab22
.word 000H,000H,000H,000H,000H,000H,000H,000H,018H,01FH,030H,000H,000H,000H,000H,000H
.word 000H,008H,008H,008H,008H,00CH,00CH,00CH,004H,004H,004H,000H,000H,000H,000H,000H
.word 000H,000H,000H,018H,03FH,031H,031H,011H,010H,0FFH,010H,008H,008H,00FH,00CH,000H
.word 001H,003H,0C3H,0F1H,099H,089H,089H,049H,07DH,060H,000H,000H,001H,000H,000H,000H
.word 000H,000H,002H,00FH,01EH,034H,004H,084H,086H,0FEH,082H,083H,083H,0C3H,003H,002H
.word 0FEH,0FFH,000H,008H,048H,0E8H,01FH,008H,078H,0C4H,084H,0FEH,0FFH,000H,000H,000H
.word 000H,000H,000H,080H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
.word 000H,0E0H,070H,040H,040H,000H,000H,000H,000H,000H,000H,000H,0E0H,000H,000H,000H
;-- 文字: 创 --
;-- 楷体_GB231224; 此字体下对应的点阵为:宽x高=32x32 --
tab21
.word 000H,000H,000H,000H,000H,01FH,03FH,020H,000H,000H,000H,000H,000H,000H,000H,000H
.word 000H,001H,001H,01FH,01EH,007H,001H,000H,000H,000H,000H,000H,000H,000H,000H,000H
.word 000H,000H,000H,000H,000H,0FFH,0E0H,000H,000H,000H,07FH,0FFH,080H,000H,020H,0E0H
.word 0C0H,0C3H,087H,006H,002H,082H,0C2H,072H,03BH,00EH,006H,003H,001H,000H,000H,000H
.word 000H,000H,000H,000H,000H,0FFH,000H,000H,000H,000H,0F0H,0F0H,000H,000H,001H,007H
.word 000H,080H,0F8H,01CH,010H,000H,000H,007H,0FFH,000H,000H,000H,000H,080H,040H,000H
.word 000H,000H,000H,000H,000H,0F8H,0FCH,038H,030H,020H,040H,000H,000H,000H,0C0H,0C0H
.word 0C0H,040H,060H,060H,040H,0C0H,0C0H,080H,000H,000H,000H,000H,000H,000H,000H,000H
.include "240xa.inc"
.def _c_int0
.text
_c_int0
setc INTM
clrc SXM
clrc OVM
clrc CNF
ldp #dp_pf2-1
lacl #0E01h
sacl SCSR1
nop
ldp #0e0h
splk #0e8h,WDCR
ldp #0
splk #0h,IMR
splk #0ffffh,IFR
ldp #dp_user
splk #0,r22
out r22,WSGR
ldp #dp_pf2
lacl #00h
sacl mcra ;初始化mcra,定义a的0,1口为i/o
lacl mcrb
lacl #0ff00h
sacl mcrb ;初始化mcrb,定义c 的2,3,4口为i/o
lacl #000h
sacl mcrc ;初始化mcrc,定义e口为i/o
nop
ldp #5
lacl #0
sacl lcdtab
sacl keydata
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
long1:
lacl #0ff00h
ldp #0e1h
sacl PADATDIR ;a的0,1口输出且为0
rpt #20 ;延时
nop
lacl #0ff00h
sacl PCDATDIR ;c的2,3,4口输出且为0
rpt #20
nop
lacl #0ff00h
sacl pedatdir ;c的2,3,4口输出且为0
rpt #20
nop
ldp #dp_user
splk #3eh,r16 ;关液晶显示3e
call write_ins0
call write_ins1
rpt #100
nop
rpt #100
nop
rpt #100
nop
ldp #dp_user
splk #3fh,r16 ;开液晶显示3f
call write_ins0
call write_ins1
rpt #100
nop
rpt #100
nop
; B long100
l1: ldp #dp_user
splk #0c0h,r16 ;起始行对应行
call write_ins0
nop
long2: ldp #dp_user
splk #0bfh,r16 ;确定初始页;call write_ins0
call write_ins0
ldp #dp_user
splk #40h,r16 ;确定初始列
call write_ins0
ldp #dp_user
long31: ldp #dp_user
call display_cs0
call display_cs1
ldp #dp_user
splk #20h,r22 ;r22 为调用显示一次的列数
ldp #dp_user
splk #0bdh,r23 ;r23显示起始页
ldp #dp_user
splk #60h,r24 ;r24显示起始列
ldp #dp_user
splk #0bah,r25 ;r25显示结束页
lacc #0
add #tab24 ;取第一行的地址数
sacl lcdtab
call display4 ;显示第一个字
call delay
call delay
call delay
call delay
ldp #dp_user
long32: ldp #dp_user
splk #20h,r22 ;r22 为调用显示一次的列数
ldp #dp_user
splk #0bdh,r23 ;r23显示起始页
ldp #dp_user
splk #40h,r24 ;r24显示起始列
ldp #dp_user
splk #0bah,r25 ;r25显示结束页
lacc #0
add #tab23 ;取第一行的地址数
sacl lcdtab
call display4 ;显示第一个字
call delay
call delay
call delay
call delay
ldp #dp_user
long33:
ldp #dp_user
splk #20h,r22 ;r22 为调用显示一次的列数
ldp #dp_user
splk #0bdh,r23 ;r23显示起始页
ldp #dp_user
splk #60h,r24 ;r24显示起始列
ldp #dp_user
splk #0bah,r25 ;r25显示结束页
lacc #0
add #tab22 ;取第一行的地址数
sacl lcdtab
call display5 ;显示第一个字
call delay
call delay
call delay
call delay
ldp #dp_user
long34: ldp #dp_user
splk #20h,r22 ;r22 为调用显示一次的列数
ldp #dp_user
splk #0bdh,r23 ;r23显示起始页
ldp #dp_user
splk #40h,r24 ;r24显示起始列
ldp #dp_user
splk #0bah,r25 ;r25显示结束页
lacc #0
add #tab21 ;取第一行的地址数
sacl lcdtab
call display5 ;显示第一个字
call delay
call delay
call delay
call delay
ldp #dp_user
long41: ldp #dp_user
call display_cs0
call display_cs1
ldp #dp_user
splk #20h,r22 ;r22 为调用显示一次的列数
ldp #dp_user
splk #0bdh,r23 ;r23显示起始页
ldp #dp_user
splk #60h,r24 ;r24显示起始列
ldp #dp_user
splk #0bah,r25 ;r25显示结束页
lacc #0
add #tab23 ;取第一行的地址数
sacl lcdtab
call display4 ;显示第一个字
call delay
call delay
call delay
call delay
ldp #dp_user
long42: ldp #dp_user
splk #20h,r22 ;r22 为调用显示一次的列数
ldp #dp_user
splk #0bdh,r23 ;r23显示起始页
ldp #dp_user
splk #40h,r24 ;r24显示起始列
ldp #dp_user
splk #0bah,r25 ;r25显示结束页
lacc #0
add #tab22 ;取第一行的地址数
sacl lcdtab
call display4 ;显示第一个字
call delay
call delay
call delay
call delay
ldp #dp_user
long43:
ldp #dp_user
splk #20h,r22 ;r22 为调用显示一次的列数
ldp #dp_user
splk #0bdh,r23 ;r23显示起始页
ldp #dp_user
splk #60h,r24 ;r24显示起始列
ldp #dp_user
splk #0bah,r25 ;r25显示结束页
lacc #0
add #tab21 ;取第一行的地址数
sacl lcdtab
call display5 ;显示第一个字
call delay
call delay
call delay
call delay
ldp #dp_user
long51: ldp #dp_user
call display_cs0
call display_cs1
ldp #dp_user
splk #20h,r22 ;r22 为调用显示一次的列数
ldp #dp_user
splk #0bdh,r23 ;r23显示起始页
ldp #dp_user
splk #60h,r24 ;r24显示起始列
ldp #dp_user
splk #0bah,r25 ;r25显示结束页
lacc #0
add #tab22 ;取第一行的地址数
sacl lcdtab
call display4 ;显示第一个字
call delay
call delay
call delay
call delay
ldp #dp_user
long52: ldp #dp_user
splk #20h,r22 ;r22 为调用显示一次的列数
ldp #dp_user
splk #0bdh,r23 ;r23显示起始页
ldp #dp_user
splk #40h,r24 ;r24显示起始列
ldp #dp_user
splk #0bah,r25 ;r25显示结束页
lacc #0
add #tab21 ;取第一行的地址数
sacl lcdtab
call display4 ;显示第一个字
call delay
call delay
call delay
call delay
ldp #dp_user
long61: ldp #dp_user
call display_cs0
call display_cs1
ldp #dp_user
splk #20h,r22 ;r22 为调用显示一次的列数
ldp #dp_user
splk #0bdh,r23 ;r23显示起始页
ldp #dp_user
splk #60h,r24 ;r24显示起始列
ldp #dp_user
splk #0bah,r25 ;r25显示结束页
lacc #0
add #tab21 ;取第一行的地址数
sacl lcdtab
call display4 ;显示第一个字
call delay
call delay
call delay
call delay
ldp #dp_user
call display_cs0
call display_cs1
b l1
ret
;;;;;;;;;
;可以调用的在任何位置显示一个数
;入口参数:
;r22 为调用显示一次的列数
;r24显示起始页
;r24显示起始列
;r25显示结束页
;;;;;;;;;
display4:
ldp #dp_user
lacl r22 ;保存r22,即写第一次的总列数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -