📄 tes12864.asm
字号:
;寄存器
lcd_data equ 25h
lcd_com equ 26h
num_page equ 27h ;液晶页号,0--7
num_col equ 28h ;液晶列号,0--127
;管脚
clr_busy equ p3.6 ;清忙信号
X25043_cs equ p3.7 ;看门狗
X25043_sck equ p3.4
X25043_si equ p3.5
X25043_so equ p3.3
;int equ p3.2
EE_cs equ p2.1 ;45DB041的片选
db041_so equ p2.0 ;EEROM的数据脚
EE_scl equ p2.1 ;EEROM的时钟脚
a0 equ p2.2
e equ p2.3
r_w equ p2.4
di equ p2.5 ;液晶管脚
csb equ p2.6
csa equ p2.7
lcd_db equ p0
org 0
sjmp start
org 0040h
start: mov sp,#60h
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
call delay_100ms
call watch_dog
call delay_100ms
call delay_100ms
call watch_dog
call delay_100ms
call watch_dog
call delay_100ms
call delay_100ms
call init_lcd
mov lcd_data,#0ffh
call clr_lcdram
call delay_100ms
call delay_100ms
call watch_dog
call delay_100ms
call delay_100ms
mov lcd_data,#0
call clr_lcdram
call delay_100ms
call delay_100ms
call watch_dog
call delay_100ms
call delay_100ms
call delay_100ms
call delay_100ms
call watch_dog
call delay_100ms
call delay_100ms
mov lcd_data,#0fh
call clr_lcdram
call delay_100ms
call delay_100ms
call watch_dog
call delay_100ms
call delay_100ms
call delay_100ms
call delay_100ms
call watch_dog
call delay_100ms
call delay_100ms
mov lcd_data,#0f0h
call clr_lcdram
call delay_100ms
call delay_100ms
call watch_dog
call delay_100ms
call delay_100ms
call delay_100ms
call delay_100ms
call watch_dog
call delay_100ms
call delay_100ms
mov lcd_data,#0
call clr_lcdram
mov r4,#0 ;r4=页数0--7 ;写汉字程序
ww1: mov dptr,#ninghe1
mov a,r4
orl a,#0b8h
mov lcd_com,a
call prl0
call prr0
mov lcd_com,#40h
call prl0
call prr0
mov r3,#40h;r3=列数
ww2: clr a
movc a,@a+dptr
mov lcd_data,a
call prl1
call prr1
inc dptr
inc dptr
djnz r3,ww2
mov dptr,#ninghe1
inc dptr
inc r4
mov a,r4
orl a,#0b8h
mov lcd_com,a
call prl0
call prr0
mov lcd_com,#40h
call prl0
call prr0
mov r3,#40h
ww3: clr a
movc a,@a+dptr
mov lcd_data,a
call prl1
call prr1
inc dptr
inc dptr
djnz r3,ww3
inc r4
cjne r4,#8,ww1
sjmp $
init_lcd: mov lcd_com,#0c0h
call prl0
call prr0
mov lcd_com,#3fh
call prl0
call prr0
mov lcd_data,#0fh
call clr_lcdram
ret
clr_lcdram: mov r4,#0 ;清液晶屏
clr_lcd1: mov a,r4
orl a,#0b8h
mov lcd_com,a
call prl0
call prr0
mov lcd_com,#40h
call prl0
call prr0
mov r3,#40h
clr_lcd2: ;mov lcd_data,#0
call prl1
call prr1
djnz r3,clr_lcd2
inc r4
cjne r4,#8,clr_lcd1
ret
prl0: setb csa
clr csb
clr di
setb r_w
prl01: mov lcd_db,#0ffh
setb e
mov a,lcd_db
clr e
jb acc.7,prl01
clr r_w
mov lcd_db,lcd_com
setb e
clr e
clr csa
ret
prl1: setb csa
clr csb
clr di
setb r_w
prl11: mov lcd_db,#0ffh
setb e
mov a,lcd_db
clr e
jb acc.7,prl11
setb di
clr r_w
mov lcd_db,lcd_data
setb e
clr e
clr csa
ret
prl2: setb csa
clr csb
clr di
setb r_w
prl21: mov lcd_db,#0ffh
setb e
mov a,lcd_db
clr e
jb acc.7,prl21
setb di
mov lcd_db,#0ffh
setb e
mov lcd_data,lcd_db
clr e
clr csa
ret
prr0: clr csa ;写指令
setb csb
clr di
setb r_w
prr01: mov lcd_db,#0ffh
setb e
mov a,lcd_db
clr e
jb acc.7,prr01
clr r_w
mov lcd_db,lcd_com
setb e
clr e
clr csb
ret
prr1: clr csa ;写数据
setb csb
clr di
setb r_w
prr11: mov lcd_db,#0ffh
setb e
mov a,lcd_db
clr e
jb acc.7,prr11
setb di
clr r_w
mov lcd_db,lcd_data
setb e
clr e
clr csb
ret
prr2: clr csa ;读数据
setb csb
clr di
setb r_w
prr21: mov lcd_db,#0ffh
setb e
mov a,lcd_db
clr e
jb acc.7,prr21
setb di
mov lcd_db,#0ffh
setb e
mov lcd_data,lcd_db
clr e
clr csb
ret
disp_rbyte: push psw ;入口:num_col num_page
setb rs1 ;出口:a=读出的数据
clr rs0
mov a,num_col ;use r4
mov r4,num_col
clr c
subb a,#64
jc disp_rbyte1
anl a,#3fh
orl a,#40h
mov lcd_com,a
call prr0 ;设列地址
mov a,num_page
anl a,#07h
orl a,#0b8h
mov lcd_com,a ;设页地址
call prr0
call prr2 ;读出的数据在lcd_data中
call prr2
sjmp disp_rbyte2
disp_rbyte1: mov a,num_col
anl a,#3fh
orl a,#40h
clr acc.7
mov lcd_com,a
call prl0 ;设列地址
mov a,num_page
anl a,#07h
orl a,#0b8h
clr acc.6
mov lcd_com,a ;设页地址
call prl0
call prl2
call prl2
;设定左屏行号和列号,写数据
disp_rbyte2: pop psw
ret
disp_wbyte: push psw ;入口:num_col列数0-127 num_page页数0-7 lcd_dat数据
setb rs1 ;出口:
clr rs0
mov a,num_col
mov r4,num_col
clr c
subb a,#64
jc disp_wbyte1
anl a,#3fh
orl a,#40h
mov lcd_com,a
call prr0 ;设列地址
mov a,num_page
anl a,#07h
orl a,#0b8h
mov lcd_com,a ;设页地址
call prr0
call prr1
;设定右屏行号和列号,写数据
sjmp disp_wbyte2
disp_wbyte1: mov a,num_col
anl a,#3fh
orl a,#40h
mov lcd_com,a
call prl0 ;设列地址
mov a,num_page
anl a,#07h
orl a,#0b8h
mov lcd_com,a ;设页地址
call prl0
call prl1
;设定左屏行号和列号,写数据
disp_wbyte2: pop psw
ret
delay_100ms: call delay_10ms
call delay_10ms
call delay_10ms
call delay_10ms
call delay_10ms
call delay_10ms
call delay_10ms
call delay_10ms
call delay_10ms
call delay_10ms
ret
delay_10ms: mov r7,#18
de_10ms1: mov r6,#200
de_10ms2: nop
nop
nop
djnz r6,de_10ms2
djnz r7,de_10ms1
ret
watch_dog: clr X25043_cs
setb X25043_cs
ret
ninghe1:
;-- 宁和电子 -- ** 宋体, 12 **
; 当前所选字体下一个汉字对应的点阵为: 宽度x高度=64x16, 调整后为: 64x16
DB 000H,000H,090H,000H,08CH,000H,084H,000H,084H,000H,084H,040H,085H,080H,086H,07FH
DB 084H,000H,084H,000H,084H,000H,084H,000H,094H,000H,08EH,000H,004H,000H,000H,000H
DB 000H,010H,024H,008H,024H,006H,0A4H,001H,0FCH,0FFH,022H,001H,022H,00EH,022H,004H
DB 000H,000H,0F8H,03FH,008H,010H,008H,010H,008H,010H,0F8H,03FH,000H,000H,000H,000H
DB 000H,000H,000H,000H,0F8H,00FH,048H,004H,048H,004H,048H,004H,048H,004H,0FFH,03FH
DB 048H,044H,048H,044H,048H,044H,048H,044H,0F8H,04FH,000H,040H,000H,070H,000H,000H
DB 000H,001H,000H,001H,002H,001H,002H,001H,002H,001H,002H,041H,002H,081H,0E2H,07FH
DB 012H,001H,00AH,001H,006H,001H,002H,001H,000H,001H,080H,001H,000H,001H,000H,000H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -