打印

哪位有玩过带中文字库的12864啊,可否帮我看看那程序怎么了

[复制链接]
2622|7
手机看帖
扫描二维码
随时随地手机跟帖
楼主

不知道你的和俺的是不是一样的,给你一个别人写的

;-----------------------------------------------------
;清屏
clear_screen:
    mov     byte_display_page_memory, #0
    lcall   clear_line_screen
    mov     byte_display_page_memory, #2
    lcall   clear_line_screen
    mov     byte_display_page_memory, #4
    lcall   clear_line_screen
    mov     byte_display_page_memory, #6
;    lcall clear_line_screen
;    ret
clear_line_screen:
    mov     byte_display_row_memory, #0
    mov     r3, #08h
clear_line_screen_1:
    mov     dptr, #char_kong
    lcall   display_write_32_data
    djnz    r3, clear_line_screen_1
    ret
;---------------------------------------------------
;全屏
fill_line_screen:
    mov     byte_display_row_memory, #0
    mov     r3, #08h
fill_line_screen_1:
    mov     dptr, #char_man
    lcall   display_write_32_data
    djnz    r3, fill_line_screen_1
    ret
;-----------------------------------------------------
;连续输出16字节数据到LCD屏
display_write_16_data:
    mov     r5, #8
display_write_16_data_1:
    lcall   display_select_page
    lcall   display_select_row
    clr     a
    movc    a, @a+dptr
    lcall   display_write_data
    inc     dptr
    djnz    r5, display_write_16_data_1
    inc     byte_display_page_memory
    clr     c
    mov     a, byte_display_row_memory
    subb    a, #8
    mov     byte_display_row_memory, a
    mov     r5, #8
display_write_16_data_2:
    lcall   display_select_page
    lcall   display_select_row
    clr     a
    movc    a, @a+dptr
    lcall   display_write_data
    inc     dptr
    djnz    r5, display_write_16_data_2
    dec     byte_display_page_memory
    ret
;---------------------------------------------------
;连续输出32字节数据到LCD屏
display_write_32_data:
    mov     r5, #16
display_write_32_data_1:
    lcall   display_select_page
    lcall   display_select_row
    clr     a
    movc    a, @a+dptr
    lcall   display_write_data
    inc     dptr
    djnz    r5, display_write_32_data_1
    inc     byte_display_page_memory
    clr     c
    mov     a, byte_display_row_memory
    subb    a, #16
    mov     byte_display_row_memory, a
    mov     r5, #16
display_write_32_data_2:
    lcall   display_select_page
    lcall   display_select_row
    clr     a
    movc    a, @a+dptr
    lcall   display_write_data
    inc     dptr
    djnz    r5, display_write_32_data_2
    dec     byte_display_page_memory
    ret
;-----------------------------------------------------------
display_write_data:         ;数据在A中
    nop
    ;如果列的数目大于63,则应该显示到右半屏幕,否则应该显示在左半屏幕
    ;注意,此处显示手册上给出的说明不准确
    jb      byte_display_row_memory.6, display_write_data_left
    setb    pin_display_right_cs
    sjmp    display_write_data_leftright
display_write_data_left:
    setb    pin_display_left_cs

display_write_data_leftright:
    clr     pin_display_rw
    setb    pin_display_di
    nop
    setb    pin_display_enable
    mov     p0, a
    nop
    clr     pin_display_enable
    nop
    setb    pin_display_rw
    clr     pin_display_right_cs
    clr     pin_display_left_cs
    nop
    inc     byte_display_row_memory
;    ljmp    delay_100us
;    lcall   delay_100us
    ret
;-----------------------------------------------------
display_on:
    mov     a, #3fh
    sjmp    display_write_instrument
display_off:
    mov     a, #3eh
    sjmp    display_write_instrument
;-------------------------
display_select_z:  ;此处是修改DDR和屏幕的对应关系
    mov     a, #0c0h
    sjmp    display_write_instrument
;-------------------------
display_select_page:
display_select_x:  ;此处是选择要写入的DDR的页码
    mov     a, byte_display_page_memory
    orl     a, #0f8h
    clr     acc.6
    sjmp    display_write_instrument
;-------------------------
display_select_row:
display_select_y:
    mov     a, byte_display_row_memory
    orl     a, #0c0h
    clr     acc.7
;    sjmp  display_write_instrument
;    ret
;-------------------------
display_write_instrument:   ;指令在A中
    setb    pin_display_right_cs
    setb    pin_display_left_cs
    clr     pin_display_rw
    clr     pin_display_di
    nop
    setb    pin_display_enable
    mov     p0, a
    nop
    clr     pin_display_enable
    nop
    setb    pin_display_rw
    clr     pin_display_right_cs
    clr     pin_display_left_cs
;    ljmp    delay_100us
;    lcall   delay_100us
    ret
display_write_16_data_a:
    mov     r5, #16
display_write_16_data_b:
    lcall   display_select_page
    lcall   display_select_row
    clr     a
    movc    a, @a+dptr
    lcall   display_write_data
    inc     dptr
    djnz    r5, display_write_16_data_b
    inc     byte_display_page_memory
    clr     c
    mov     a, byte_display_row_memory
    subb    a, #16
    mov     byte_display_row_memory, a
    ret
;-----------------------------------------------------
说明一下:这个屏是分左右半屏的,型号好像是rt12864A,不带字库。你可以看瑞特公司的文档,有例程

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则