📄 lcd.asm
字号:
sacl r21
ldp #dp_user
page_cycle4:
ldp #dp_user
lacl r24 ;r24显示起始列
sacl r16
call write_ins0
ldp #dp_user
lacl r23 ;r23显示起始页
sacl r16
call write_ins0 ;写初始化字
ldp #dp_user
lacl #0c0h ;显示起始行
sacl r16
call write_ins0
arrange_cycle4:ldp #dp_user
lacl lcdtab
ldp #dp_user
tblr lcddata
lacl lcddata
ldp #dp_user
;lacl #0ffh ; 测试输出值函数
sacl r16
call write_data0
ldp #dp_user
lacl lcdtab
add #1
sacl lcdtab
ldp #dp_user
lacl r22
sub #1
sacl r22
lar ar0,#0
ldp #dp_user
lar ar6,r22
mar *,ar6
cmpr 00
bcnd arrange_cycle4,NTC
;call delay
LDP #dp_user
lacl r21
sacl r22
ldp #dp_user
lar ar0,r23
ldp #dp_user
lar ar7,r25 ;r25显示结束页
lacl r23
sub #1h
ldp #dp_user
sacl r23
mar *,ar7
cmpr 00
bcnd page_cycle4,NTC
;call delay
ret
display5:
ldp #dp_user
lacl r22 ;保存r22,即写第一次的总列数
sacl r21
ldp #dp_user
page_cycle5:
ldp #dp_user
lacl r24 ;r24显示起始列
sacl r16
call write_ins1
ldp #dp_user
lacl r23 ;r23显示起始页
sacl r16
call write_ins1 ;写初始化字
ldp #dp_user
lacl #0c0h ;显示起始行
sacl r16
call write_ins1
arrange_cycle5:ldp #dp_user
lacl lcdtab
ldp #dp_user
tblr lcddata
lacl lcddata
ldp #dp_user
;lacl #0ffh ; 测试输出值函数
sacl r16
call write_data1
ldp #dp_user
lacl lcdtab
add #1
sacl lcdtab
ldp #dp_user
lacl r22
sub #1
sacl r22
lar ar0,#0
ldp #dp_user
lar ar6,r22
mar *,ar6
cmpr 00
bcnd arrange_cycle5,NTC
;call delay
LDP #dp_user
lacl r21
sacl r22
ldp #dp_user
lar ar0,r23
ldp #dp_user
lar ar7,r25 ;r25显示结束页
lacl r23
sub #1h
ldp #dp_user
sacl r23
mar *,ar7
cmpr 00
bcnd page_cycle5,NTC
;call delay
ret
write_ins1:
ldp #dp_pf2
lacl #03fch ;a的0,1口输出且为0,e先变低
sacl padatdir
nop
lacl #1c08h
;lacl #1c18h
sacl pcdatdir ;c的4, 3 ,2 口输出且为0, 1,0;其中c的4,3,2代表rs,cs2,cs1
rpt #20
nop
ldp #0e1h
lacl #0301h
sacl padatdir ;a的1,0口输出且为0,1 ,e变高
;rpt #10
nop
ldp #dp_user
lacl r16
or #0ff00h
ldp #0e1h
sacl pedatdir ; 输出初始化信号
rpt #50
nop
ldp #0e1h
lacl #03fch ;a的0,1口输出且为0,e先变低
sacl padatdir ;e变低锁存
rpt #5
nop
ldp #0e1h
lacl #0302h
sacl padatdir ;rw变高
ldp #dp_pf2
lacl #1c0ch
sacl pcdatdir ;c的4, 3 ,2 口输出且为0, 1,1;其中c的4,3,2代表rs,cs2,cs1
ldp #dp_user
rpt #5
nop
ret
write_ins0:
ldp #dp_pf2
lacl #03fch ;a的0,1口输出且为0,e先变低
sacl padatdir
nop
lacl #1c04h
;lacl #1c18h
sacl pcdatdir ;c的4, 3 ,2 口输出且为0, 1,0;其中c的4,3,2代表rs,cs2,cs1
rpt #20
nop
ldp #0e1h
lacl #0301h
sacl padatdir ;a的1,0口输出且为0,1 ,e变高
;rpt #10
nop
ldp #dp_user
lacl r16
or #0ff00h
ldp #0e1h
sacl pedatdir ; 输出初始化信号
rpt #50
nop
ldp #0e1h
lacl #03fch ;a的0,1口输出且为0,e先变低
sacl padatdir ;e变低锁存
rpt #5
nop
ldp #0e1h
lacl #0302h
sacl padatdir ;rw变高
ldp #dp_pf2
lacl #1c0ch
sacl pcdatdir ;c的4, 3 ,2 口输出且为0, 1,1;其中c的4,3,2代表rs,cs2,cs1
ldp #dp_user
rpt #5
nop
ret
write_data1:
ldp #0e1h
lacl #0ff00h ;a的0,1口输出且为0,e先变低
sacl padatdir
nop
ldp #0e1h
lacl #1c18h
sacl pcdatdir ;c的4, 3 ,2 口输出且为1, 1,0;其中c的4,3,2代表rs,cs2,cs1
rpt #10
nop
ldp #0e1h
lacl #0ff01h
sacl padatdir ;a的1,0口输出且为0,1 ,e变高
;rpt #10
nop
ldp #dp_user
lacl r16
or #0ff00h
ldp #0e1h
sacl pedatdir ; 输出初始化信号
rpt #5
nop
ldp #0e1h
lacl #0ff00h ;a的0,1口输出且为0,e先变低
sacl padatdir ;e变低锁存
rpt #5
nop
ldp #0e1h
lacl #0ff02h
sacl padatdir ;rw变高
ldp #dp_pf2
lacl #1c0ch
sacl pcdatdir ;c 的4, 3 ,2 口输出且为0, 1,1;其中c的4,3,2代表rs,cs2,cs1
ldp #dp_user
rpt #5
nop
ret
write_data0:
ldp #0e1h
lacl #0ff00h ;a的0,1口输出且为0,e先变低
sacl padatdir
nop
ldp #0e1h
lacl #1c14h
sacl pcdatdir ;c的4, 3 ,2 口输出且为1, 1,0;其中c的4,3,2代表rs,cs2,cs1
rpt #10
nop
ldp #0e1h
lacl #0ff01h
sacl padatdir ;a的1,0口输出且为0,1 ,e变高
;rpt #10
nop
ldp #dp_user
lacl r16
or #0ff00h
ldp #0e1h
sacl pedatdir ; 输出初始化信号
rpt #5
nop
ldp #0e1h
lacl #0ff00h ;a的0,1口输出且为0,e先变低
sacl padatdir ;e变低锁存
rpt #5
nop
ldp #0e1h
lacl #0ff02h
sacl padatdir ;rw变高
ldp #dp_pf2
lacl #1c0ch
sacl pcdatdir ;c 的4, 3 ,2 口输出且为0, 1,1;其中c的4,3,2代表rs,cs2,cs1
ldp #dp_user
rpt #5
nop
ret
display_cs0: ldp #5h
splk #0c0h,r16
call write_ins0
ldp #5h
splk #0b8h,r17 ;确定初始行
arrange00: ldp #5h
splk #040h,r18 ;确定初始列
ldp #5h
lacl r17
sacl r16 ;写初始行
call write_ins0
ldp #5h
lacl r18 ;写初始列
sacl r16
call write_ins0
arrange01: ldp #5h
splk #00h,r16
call write_data0
; call delay
ldp #5h
lacl r18
add #1h ;列自动加1,且人为设置的加一,起控制作用
sacl r18
; call delay
ldp #5h
mar *,ar6
lar ar6,r18
lar ar0,#128
cmpr 01
bcnd arrange01,TC;列的数未加到64个跳出
ldp #5h
lacl r17
add #1h
sacl r17
call delay
lar ar5,r17
lar ar0,#0c0h
mar *,ar5
cmpr 01
bcnd arrange00,tc ;未到8页循环
ret
display_cs1: ldp #5h
splk #0c0h,r16
call write_ins1
ldp #5h
splk #0b8h,r17 ;确定初始行
arrange10: ldp #5h
splk #040h,r18 ;确定初始列
ldp #5h
lacl r17
sacl r16 ;写初始行
call write_ins1
ldp #5h
lacl r18 ;写初始列
sacl r16
call write_ins1
arrange11: ldp #5h
splk #00h,r16
call write_data1
; call delay
ldp #5h
lacl r18
add #1h ;列自动加1,且人为设置的加一,起控制作用
sacl r18
; call delay
ldp #5h
mar *,ar6
lar ar6,r18
lar ar0,#128
cmpr 01
bcnd arrange11,TC;列的数未加到64个跳出
ldp #5h
lacl r17
add #1h
sacl r17
call delay
lar ar5,r17
lar ar0,#0c0h
mar *,ar5
cmpr 01
bcnd arrange10,tc ;未到8页循
ret
delay:
mar *,ar3
lar ar3,#7fffh
lar ar0,#00h
delay1: sbrk #1h
nop
cmpr 00
bcnd delay1,NTC
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -