原创 再次的改进LCD1602驱动程序

2009-5-24 16:33 2070 5 4 分类: MCU/ 嵌入式

读状态/数据:使能信号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

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条