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

📄 st7920.asm

📁 12864LCD驱动 12864LCD驱动 12864LCD驱动 12864LCD驱动 12864LCD驱动 12864LCD驱动 12864LCD驱动 12864LCD驱动
💻 ASM
字号:
 ;st7920演示程序
;寄存器
lcd_data        equ     25h     ;LCD数据
lcd_com         equ     26h     ;LCD指令
addr_ddram      equ     27h
addr_hanzi1     equ     28h
addr_hanzi2     equ     29h
;标志位
bit_ASCII       equ     00h     ;=1时写8*16点阵,=0时写16*16汉字
;管脚定义
rs       equ       p3.2
r_w      equ       p3.3
e        equ       p3.4
lcd_db   equ       p1
;rs       equ       p0.5
;r_w      equ       p0.6
;e        equ       p0.7
;lcd_db   equ       p2

                org     0000h
                sjmp    start
                org     0040h
start:          mov     sp,#60h
                call    init_lcd
;                clr     p2.0
;                jmp     main11
                mov     r7,#64
                clr    bit_ASCII
                mov     addr_ddram,#0h    ;设定DDRAM的位址第一行从0到9
                                           ;第二行从10h到19h
                mov     addr_hanzi1,#0b3h   ;汉字代码高字节,8*16点阵代码02h-7fh(bit_ASCII=1)
                mov     addr_hanzi2,#0a1h   ;汉字代码低字节,写8*16点阵时不用置0
main1:          call    write_lcd          ;写字符(汉字)程序
                inc     addr_ddram
                inc     addr_hanzi2
;                push    07h
;                call    delay_1s
;                pop     07h
                djnz    r7,main1
;                clr     p2.1
                sjmp    $


main11:         mov     r7,#16
                setb     bit_ASCII
                mov     addr_ddram,#10h
                mov     ADDR_HANZI1,#30h
                mov     addr_hanzi2,#0
main2:          call    write_lcd
                inc     addr_ddram
                inc     addr_hanzi1
                push    07h
                call    delay_1s
                pop     07h
                djnz    r7,main2
                clr     p2.2
;                sjmp    $
;-----------------------------------------------------------------------
;以下程序为用图形区显示
;-----------------------------------------------------------------------
                MOV     lcd_COM, #3eH   ;set 8 bit option开绘图显示
                call    wc
                 mov     r4,#0
w1:              mov     r5,#0
w2:
                MOV     lcd_COM, #3eH   ;set 8 bit option开绘图显示
                call    wc
                 clr     rs
                 clr     r_w
                 mov     a,r4
                 orl     a,#80h
                 mov     lcd_db,a       ;Y curcor
                 setb    e
                 clr     e
                 mov     a,r5
                 orl     a,#80h
                 mov     lcd_db,a;#82h    ;X curcor,以16个点为单位
                 setb    e
                 clr     e
                 call    delay_50ms
                 mov     lcd_data,#0f0h  ;写入数据,横向,从左到右
                 call    wd
                 call    wd
                 call    wd
                 call    wd
                 inc     r5
                 mov     a,r5
                 cjne    a,#16,w2
                 inc     r4
                 mov     a,r4
                 cjne    a,#128,w1
                sjmp    $

write_lcd:      mov     a,addr_ddram
                setb    acc.7
                mov     lcd_com,a
                call    wc
                mov     a,addr_hanzi1
                mov     lcd_data,a
                call    wd
                jb      bit_ASCII,write_lend
                mov     a,addr_hanzi2
                mov     lcd_data,a
                call    wd
write_lend:     ret

init_lcd:       mov     p0,#0ffh
                mov     p1,#0ffh
                mov     p2,#0ffh
                mov     p3,#0ffh
                call    delay_50ms
;                clr     r_w
;                clr     rs
                mov     lcd_db,#38h
                call    wc
;                setb    e
;                clr     e
                LCALL   DELAY_50ms
                MOV     lcd_db,#38H
                call    wc
;                SETB    E
;                CLR     E
                call    delay_50ms
                MOV     lcd_db,#38H
                call    wc
;                SETB    E
;                CLR     E
                call    delay_50ms
                MOV     lcd_COM, #38H   ;set 8 bit option
                call    wc
                 call    delay_50ms
                MOV     lcd_COM, #01H      ;Clear display
                LCALL   WC
                 call    delay_50ms
                MOV     lcd_COM, #06H      ;Entry Mode set curcor right move
                LCALL   WC
                 call    delay_50ms
                MOV     lcd_COM, #0ch;#0C0H      ;Display on/off set: Cursor on,Blinks on,Display on
                LCALL   WC
                 call    delay_50ms
                ret

wc:                        ;Write command instructions
                CLR     RS
                SETB    R_W
WC1:            MOV     lcd_db,#0FFH       ; **Please set this interface to "1" before MCU read Busy Flag.
                SETB    E
                MOV     A,lcd_db
                CLR     E
                JB      aCC.7,WC1       ;Test busy
                CLR     R_W             ;Write command
                MOV     lcd_db,lcd_COM
                SETB    E
                CLR     E
                ret

WD:     CLR RS
        SETB R_W
WD1:    MOV lcd_db,#0FFH
        SETB E
        MOV A,lcd_db
        CLR E
        JB ACC.7,WD1
        SETB RS
        CLR R_W
        MOV lcd_db,lcd_data
        SETB E
        CLR E
        RET

delay_50ms:    mov     r7,#10
delay1:         mov     r6,#98
delay2:         mul     ab
                mul     ab
                djnz    r6,delay2
                djnz    r7,delay1
                ret
delay_1s:       mov     r5,#20
delay_1s1:      call    delay_50ms
                djnz    r5,delay_1s1
                ret

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -