📄 液晶显示.asm
字号:
; SMC1602接口程序(MCS51模拟口线方式)
;***************************************************************************
;* Title : Accessing to LCD-CONTROLLER *
;* Date : 2000.4.27 *
;* Support telephone: 0731-4167806,4167808(CHANGSHA SUNMAN) *
;* Support fax :0731-4167807 Support E-mail:www@sunman.cn *
;* Create by :褚建军(chujianjun),朱长春(zhuchangchun) *
;* DESCRIPTION:This subroutine shows how to write data to LCD-CONTROLLER *
;***************************************************************************
;连线图: *LCM---8031* *LCM---8031* *LCM------------8031*
; *DB0---P1.0* *DB4---P1.4* *RS-------------P3.5*
; *DB1---P1.1* *DB5---P1.5* *RW-------------P3.4*
; *DB2---P1.2* *DB6---P1.6* *E--------------P3.6* (参见说明书)
; *DB3---P1.3* *DB7---P1.7* *VLCD接10K可调电阻到GND*
;注:8031的晶振频率为12MHz
;**************************************************************************
RS EQU P3.5
RW EQU P3.4
E EQU P3.6
XPOS EQU 20H ;行方向
YPOS EQU 21H ;列方向
ORG 00H
LJMP START
ORG 30H
START:MOV SP,#60H
CLR E
MOV DPTR,#TAB
MOV R2,#0
MN_LP2:MOV R0,#0
MOV YPOS,#0
MOV XPOS,#0
LCALL LCDRESET
MN_LP:MOV A,R0
MOVC A,@A+DPTR
LCALL LCDFILL
INC R0
CJNE R0,#32,MN_LP
LCALL DELAY400MS
INC DPTR
INC R2
CJNE R2,#16,MN_LP2
LJMP START
;-------------------------------LCD 写满屏幕地址和字符数据指令--------------------------------
LCDFILL:
LCALL LCDWRITE
INC XPOS
MOV A,XPOS
CJNE A,#16,RETURN
INC YPOS
MOV A,YPOS
CJNE A,#2,RETURN
RETURN: RET
;-----------------------------------LCD 写一个地址和字符数据指令-----------------------------------
LCDWRITE:
LCALL LCDPOS ;lcd 写地址指令
LCALL LCDWD ;LCD 写字符指令
RET
;------------------------------LCD 写地址指令--------------------------------------------------------
LCDPOS:PUSH ACC
ANL XPOS,#0FH
ANL YPOS,#01H
MOV A,YPOS
CJNE A,#00,LPS_LAY
MOV A,XPOS
LJMP LPS_LAX
LPS_LAY:MOV A,XPOS
ADD A,#40H
LPS_LAX:ORL A,#80H
LCALL LCDWC
POP ACC
RET
;------------------------------------LCD RESET--------------------------------------------------------------------
LCDRESET:
LCALL DELAY5MS
LCALL DELAY5MS
LCALL DELAY5MS
MOV A,#38H
LCALL LCDWCN
LCALL DELAY5MS
MOV A,#38H
LCALL LCDWCN
LCALL DELAY5MS
MOV A,#38H
LCALL LCDWCN
MOV A,#38H
LCALL LCDWC
MOV A,#08H
LCALL LCDWC
MOV A,#01H
LCALL LCDWC
MOV A,#06H
LCALL LCDWC
MOV A,#0CH
LCALL LCDWC
RET
LCDWC:LCALL WAITIDLE
;----------------------------------LCD write not check,写指令------------------------
LCDWCN:CLR RS
CLR RW
MOV P1,A
SETB E
NOP
CLR E
RET
;--------------------------LCD busy check,wait till not busy(读状态,判断是否忙)-----------------------------------
WAITIDLE:
PUSH ACC
MOV P1,#0FFH
CLR RS
SETB RW
SETB E
WTD_PA:NOP
JB P1.7,WTD_PA
CLR E
POP ACC
RET
;--------------------------LCD WRITE TATA(写数据)----------------------------------------
LCDWD:LCALL WAITIDLE
MOV P1,A
CLR RW
SETB RS
SETB E
NOP
CLR E
RET
;----------------------------DELAY---------------------------------
DELAY5MS:MOV R5,#5
DL2: MOV R6,#250
DL1: NOP
NOP
DJNZ R6,DL1
DJNZ R5,DL2
RET
DELAY400MS:
MOV R5,#20 ;延时子程序(400MS)
DL4_PA: MOV R6,#100
DL4_PB: MOV R7,#100
DJNZ R7,$
DJNZ R6,DL4_PB
DJNZ R5,DL4_PA
RET
TAB: DB 'I',' ','l','o','v','e',' ','t','h','r','e','e',' ','t','h','i'
DB 'n','g','s',',','t','h','e',' ','s','u','n',',','t','h','e',' '
DB 'm','o','n','t','h','s',',','a','n','d',',','y','o','u',',',' '
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -