读状态/数据:使能信号E上升沿有效
写指令/数据:使能信号E下降沿有效
;********************************
;程序名:LCD显示驱动程序
;功能:用LCD1602显示字符'ABCDEF...'
;作者:POLO
;********************************
;端口定义
RS EQU P3.0
RW EQU P3.1
E EQU P3.2
DB7_DB0 EQU P0
DB7 EQU P0.7
;********************************
;主程序
ORG 00H
AJMP START
ORG 30H
START:
MOV R0,#16 ;显示字符的个数
MOV R1,#01000001B ;显示的字符ASCII码
MOV R2,#80H ;设置第一行显示
ACALL INIT_LCD ;调用LCD初始化
LOOP:
MOV A,R2 ;数据存贮器地址
ACALL LCD_BUSY
ACALL WRITE_IR ;调用写指令子程序
MOV A,R1 ;送ASCII码
ACALL LCD_BUSY
ACALL WRITE_DR ;调用写数据子程序
INC R1
INC R2
DJNZ R0,LOOP
AJMP $
;********************************
;液晶初始化子程序
INIT_LCD:
MOV A,#00111000B ;显示功能设置
ACALL LCD_BUSY
ACALL WRITE_IR
MOV A,#00000110B ;输入模式
ACALL LCD_BUSY
ACALL WRITE_IR
MOV A,#00001111B ;显示开关控制
ACALL LCD_BUSY
ACALL WRITE_IR
MOV A,#00000001B ;清屏
ACALL LCD_BUSY
ACALL WRITE_IR
RET
;********************************
;写数据子程序
WRITE_DR:
MOV DB7_DB0,A
SETB RS ;送数据
CLR RW
SETB E
CLR E
RET
;********************************
;写命令子程序
WRITE_IR:
MOV DB7_DB0,A
CLR RS ;送命令
CLR RW
SETB E
CLR E
RET
;********************************
;判忙延时子程序
LCD_BUSY:
MOV DB7_DB0,#80H
CLR RS
SETB RW
CLR E
SETB E
JB DB7,LCD_BUSY ;判断忙标志
RET
END
文章评论(0条评论)
登录后参与讨论