⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tes12864.asm

📁 12864LCD驱动 12864LCD驱动 12864LCD驱动 12864LCD驱动 12864LCD驱动 12864LCD驱动 12864LCD驱动 12864LCD驱动
💻 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 + -