📄 lcm1602-4.asm
字号:
RS EQU P0.0 ;LCM_RS_PIN
RW EQU P0.1 ;LCM_RW_PIN
E EQU P0.2 ;LCM_E_PIN
LCM_D EQU P0 ;LCM接口
BF BIT P0.7 ;判断LCM是否忙
LCD_BIT BIT 20H.0 ;为0写LCM控制,为1写数值
LCM_BUFF DATA 70H ;LCM写缓冲
ZLING DATA 45H ;控制缓冲
SHUJU DATA 46H ;数值缓冲
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;LCM初始化程序
LCM_RESET: MOV LCM_D, #0FFH
ACALL W_LCD1
LCALL DELAY10
ACALL W_LCD1
LCALL DELAY10
ACALL W_LCD1
LCALL DELAY10
ACALL W_LCD1
CLR LCD_BIT
MOV LCM_BUFF,#0CH
ACALL W_LCD
CLR LCD_BIT
MOV LCM_BUFF,#01H
ACALL W_LCD
CLR LCD_BIT
MOV LCM_BUFF,#06H
ACALL W_LCD
RET
;********************************
;以下为LCD各个子程序程序应用部分
;********************************
WRTC: ;写控制
CLR LCD_BIT
MOV LCM_BUFF,ZLING
ACALL W_LCD
RET
WRTS: ;写数值
SETB LCD_BIT
MOV LCM_BUFF,SHUJU
ACALL W_LCD
RET
;==========================================================================
;送控制指令程序
W_LCD1: CLR LCD_BIT ;送控制指令程序
MOV LCM_BUFF,#28H ;显示模式设置,4位数据,双行显示,5x7点阵
W_LCD: ACALL BUSY_WAIT ;BF查询子程序
MOV A,LCM_D
ANL A,#0FH ;取出P0口的控制,暂放在R7里
MOV R7,A
MOV A,LCM_BUFF ;取控制或数值
ANL A,#0F0H ;先取高位控制或数值
ORL A,R7 ;和P0口的控制一起送回P0口
MOV LCM_D,A
CLR RW
JB LCD_BIT,WD_1 ;为0写控制,为1写数值
CLR RS
SJMP WC_1
WD_1: SETB RS
WC_1: SETB E
CLR E
CLR E
MOV A,LCM_BUFF ;取控制或数值
SWAP A ;
ANL A,#0F0H ;取低字节
MOV R7,A
MOV A,LCM_D ;取出P0口的控制,暂放在R7里
ANL A,#0FH
ORL A,R7 ;和P0口的控制一起送回P0口
MOV LCM_D,A
JB LCD_BIT,WD_2 ;为0写控制,为1写数值
CLR RS
SJMP WC_2
WD_2: SETB RS
WC_2: SETB E
CLR E
RET
;==========================================================================
;BF查询子程序 功能: 直到BF=0才退出该程序
BUSY_WAIT: SETB BF
CLR RS
SETB RW
CLR E
CLR E
SETB E
JB BF,$
;lcall DELAY
RET
;***********************************
;以上为LCD各个子程序程序应用部分
;***********************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -