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

📄 lcd初始化.inc

📁 85c51的t6963字符写入方式驱动程序
💻 INC
字号:
;LCD初始化程序--------------------------------------------------------------
lcd_ini:
;文本显示区域设置
                        mov lcd_data1,#00h;设置文本显示区域首地址
                        mov lcd_data2,#10h;(从显存10000h至1200h单元为为本显示区)
                        mov lcd_com_reg,#40h
                        lcall lcd_two_data_wr;调用写双字节参数指令子程序
                        mov lcd_data1,#20h;set文本显示区宽度
                        mov lcd_data2,#00h
                        mov lcd_com_reg,#41h;文本显示区宽度设置指令代码
                        lcall lcd_two_data_wr
;图形显示区域设置
                        mov lcd_data1,#00h;设置图形显示区域首地址
                        mov lcd_data2,#00h;(显存0000h-1000h单元为图形显示区域)
                        mov lcd_com_reg,#42h;图形显示区域首地址设置指令代码
                        lcall lcd_two_data_wr;调用写双字节参数指令子程序
                        mov lcd_data1,#20h;set图形显示区宽度
                        mov lcd_data2,#00h
                        mov lcd_com_reg,#43h;图形显示区宽度设置指令代码
                        lcall lcd_two_data_wr
;显示方式及显示开关设置
                        mov lcd_com_reg,#81h;显示方式设定
                        lcall lcd_not_data_wr;调用not data read-in program
                        mov lcd_com_reg,#9ch;显示开关设置(94为文本显示,98为图形显示,9c为文本+图形显示)
                        lcall lcd_not_data_wr;调用无参数写入子程序

;清除图形显示区域
                        mov lcd_data1,#00h
                        mov lcd_data2,#00h
                        mov lcd_com_reg,#24h;设置写入数据首地址(1000h)
                        lcall lcd_two_data_wr
                        lcall auto_write_set;设置自动写入方式
                        push 03h
                        push 04h
                        mov r3,#00h;设置循环量(共清除5120byte,其中文本显示区512byte,CGRAM区)
                        mov r4,#10h;34h
                        lcall lcd_not_data_wr;调用无参数写入子程序
clear_1:                lcall st3;判断auto read-in 状态位

                        mov a,#00h;正常显示数据
                        jnb mirror_bit,clear_1a;判断是否进行反向显示
                        mov a,#0ffh;反向显示数据

clear_1a:               lcall pr13;调用data read-in program
                        djnz r3,clear_1;循环read-in data(共写入28kb byte data)
                        djnz r4,clear_1
                        lcall auto_write_over;设置自动写入终止
;清除文本显示区域
                        mov lcd_data1,#00h
                        mov lcd_data2,#10h
                        mov lcd_com_reg,#24h;设置写入数据首地址(1000h)
                        lcall lcd_two_data_wr
                        lcall auto_write_set;设置自动写入方式
                        mov r3,#00h
                        mov r4,#10h
                        lcall lcd_not_data_wr;调用无参数写入子程序
clear_2:                lcall st3;判断auto read-in 状态位
                        mov a,#0h
                        lcall pr13;调用data read-in program
                        djnz r3,clear_2;循环read-in data(共写入28kb byte data)
                        djnz r4,clear_2
                        lcall auto_write_over;设置自动写入终止
                        pop 04h
                        pop 03h
                        ret
;auto read-in mode set------------------------------------------------------
auto_write_set:         mov lcd_com_reg,#0b0h;set auto read-in mode
                        lcall lcd_not_data_wr
                        ret
;auto read-in mode over-----------------------------------------------------
auto_write_over:        mov lcd_com_reg,#0b3h;set auto read-in stop instruction
                        lcall lcd_not_data_wr
                        ret
;单字节数据写入方式设定-----------------------------------------------------
one_byte_data_write_set:mov lcd_com_reg,#0c0h;设置单字节写入方式
                        lcall lcd_one_data_wr
                        ret
;read status byte-----------------------------------------------------------
r_st:                   mov dptr_reg,#1
                        MOV DPTR,#lcd_c_add;设置指令通道地址
                        xch a,dph
                        anl a,p2
                        xch a,dph
                        MOVX A,@DPTR;read state byte
                        mov dptr_reg,#0
                        RET
;判断LCD status bit,STA0 STA1-----------------------------------------------
;D0      STA0: LCD指令读写状态      1:准备好      0:忙
;D1      STA1: LCD数据读写状态      1:准备好      0:忙
st01:
                        push 02h
                        mov r2,#00h
st01_1:                 lcall r_st;调用read status byte program
                        djnz r2,st01_2
                        lcall alarm_2
                        ajmp $
st01_2:                 jnb acc.0,st01_1;判断STA0 status
                        jnb acc.1,st01_1;判断STA1 status
                        pop 02h
                        ret
;判断LCD status bit,STA2----------------------------------------------------
;D2      STA2: LCD数据自动读状态    1:准备好      0:忙
st2:                    push 02h
                        mov r2,#00h
st2_1:                  lcall r_st;调用read status byte program
                        djnz r2,st2_2
                        lcall alarm_2
                        ljmp $
st2_2:                  jnb acc.2,st2_1;判断STA2 status
                        pop 02h
                        ret
;判状LCD status bit STA3----------------------------------------------------
;D3      STA3: LCD数据自动写状态    1:准备好       0:忙
st3:                    push 02h
                        mov r2,#00h
st3_1:                  lcall r_st;调用read status byte program
                        djnz r2,st3_2
                        lcall alarm_2
                        ajmp $
st3_2:                  jnb acc.3,st3_1;判断STA3 status
                        pop 02h
                        ret
;写指令和写数据子程序-------------------------------------------------------
lcd_two_data_wr:        lcall st01;双字节参数指令写入入口
                        mov a,lcd_data1;取第一个参数
                        lcall pr13;写入参数
lcd_one_data_wr:        lcall st01;单字节参数指令写入入口
                        mov a,lcd_data2;取第二个参数
                        lcall pr13
lcd_not_data_wr:        lcall st01;无参数指令写入入口
                        mov a,lcd_com_reg;取指令代码
                        ljmp pr14;写入指令代码
pr13:                   mov dptr_reg,#1
                        mov dptr,#lcd_d_add;设置数据通道地址
pr14:                   mov dptr_reg,#1
                        xch a,dph
                        anl a,p2
                        xch a,dph
                        movx @dptr,a;写入操作数
                        mov dptr_reg,#0
                        ret
;读数据子程序---------------------------------------------------------------
pr2:                    lcall st01                       ;判断状态位
                        mov dptr_reg,#1
                        mov dptr,#lcd_d_add;设置数据通道地址
                        xch a,dph
                        anl a,p2
                        xch a,dph
                        movx a,@dptr;读操作数
                        mov dptr_reg,#0
                        mov lcd_data2,a
                        ret
;图形数据写入位置计算---------------------------------------------------------
figure_data_wr_addr_count:
                        mov a,lcd_y;lcd数据写入位置计算
                        mov b,#32d
                        mul ab
                        add a,lcd_x
                        mov lcd_x,a
                        mov a,b
                        mov lcd_y,a
                        mov lcd_com_reg,#24h
                        lcall lcd_two_data_wr;设置写入位置
                        ret
;字符数据写入位置计算---------------------------------------------------------
ascci_data_wr_addr_count:
                        mov a,lcd_y
                        mov b,#32
                        mul ab
                        add a,lcd_x
                        mov lcd_x,a
                        mov a,b
                        add a,#10h
                        mov lcd_y,a
                        mov lcd_com_reg,#24h
                        lcall lcd_two_data_wr;设置写入位置
                        ret

⌨️ 快捷键说明

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