;宏定义
LCDIO EQU P0 ;LCD数据总线连接P0口
RS EQU P2.0 ;Register select 连接P2.0
RW EQU P2.1 ;Read/Write 连接P2.1
E EQU P2.2 ;Enable 连接P2.2
BF EQU P0.7
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: ACALL LCD_INIT
MOV A, #80H ;设置写入第一行
ACALL W_CMD
MOV DPTR, #TAB1
MOV R0, #0
LINE1:MOV A, R0
MOVC A, @A+DPTR
ACALL W_DAT
INC R0
CJNE R0, #10, LINE1
MOV A, #0C0H ;设置写入第二行
ACALL W_CMD
MOV DPTR, #TAB2
MOV R0, #0
LINE2:MOV A, R0
MOVC A, @A+DPTR
ACALL W_DAT
INC R0
CJNE R0, #10, LINE2
LOOP: AJMP LOOP
;**************** LCD1602初始化 *********************
LCD_INIT:
MOV A, #01H ;写入清屏命令
ACALL W_CMD
MOV A, #38H ;设置显示模式16*2显示
ACALL W_CMD
MOV A, #0CH ;设置屏幕显示,无光标
ACALL W_CMD
MOV A, #14 ;设置右移
ACALL W_CMD
RET
;***************************************************
;**************** LCD1602忙标志 *********************
WAIT: MOV LCDIO,#0FFH
CLR RS
SETB RW
CLR E
NOP
SETB E
JB BF, WAIT
RET
;***************************************************
;***************** 写入命令函数 *********************
W_CMD:MOV LCDIO, A ;把命令写到IO口处
CLR RS ;清0,选择命令寄存器
CLR RW
SETB E ;模拟下降沿,命令写入LCD中
NOP
CLR E
ACALL DELAY ;延时
RET
;***************************************************
;***************** 写入数据函数 *********************
W_DAT:MOV LCDIO, A
SETB RS ;置1,选择数据寄存器
CLR RW ;清0,为写入,置1,为读取
SETB E ;模拟下降沿
NOP
CLR E
ACALL DELAY ;延时
RET
;***************************************************
;****************** 延时函数 ***********************
DELAY: MOV R7,#150
D1: MOV R6,#100
D2: DJNZ R6,D2
DJNZ R7,D1
RET
;***************************************************
TAB1: DB '0123456789'
TAB2: DB 'ABCDEFGHIJ'
END
LCD1602的51汇编驱动
猜你喜欢
转载自blog.csdn.net/weixin_50303783/article/details/111318693
今日推荐
周排行