📄 z1602.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---P0.0* *DB4---P0.4* *RS-------------P2.0*
; *DB1---P0.1* *DB5---P0.5* *RW-------------P2.1*
; *DB2---P0.2* *DB6---P0.6* *E--NAND GATE---P2.7* (参见说明书)
; *DB3---P0.3* *DB7---P0.7* *VLCD接10K可调电阻到GND*
;注:8031的晶振频率为12MHz
;**************************************************************************
RSADDR EQU 0100H
RWADDR EQU 0200H
CSADDR EQU 8000H
XPOS EQU 20H ;列方向地址指针(用于LCDPOS子程序)
YPOS EQU 21H ;行方向地址指针(用于LCDPOS子程序)
ORG 0000H
JMP START
START: MOV SP,#60H
MAIN:
MOV R7,#'0' ;测试主程序
MN_PA: ;整屏循环显示"0"到"9"及空格
CALL LCDRESET
MOV A,R7
CALL LCDFILL
CALL DELAY400MS
INC R7
MOV A,R7
CJNE A,#'9'+1,MN_PA
MOV A,#' '
CALL LCDFILL
CALL DELAY400MS
JMP MAIN
LCDFILL:
MOV B,A
MOV YPOS,#0
LFL_PB: MOV XPOS,#0 ;整屏显示A中所代表字符
LFL_PA: MOV A,B
CALL LCDWRITE
INC XPOS
MOV A,XPOS
CJNE A,#16,LFL_PA
INC YPOS
MOV A,YPOS
CJNE A,#2,LFL_PB
RET
LCDPOS: ;设置第(XPOS,YPOS)个字符的DDRAM地址
PUSH ACC
ANL XPOS,#0FH ;X位置范围(0到15)
ANL YPOS,#01H ;Y位置范围(0到1)
MOV A,YPOS ;(XPOS,YPOS)对应DDRAM地址
CJNE A,#00,LPS_LAY ;(第一行)X: 第0----15个字符
MOV A,XPOS ; DDRAM: 0----0FH
JMP LPS_LAX
LPS_LAY:MOV A,XPOS ;(第二行)X: 第0----15个字符
ADD A,#40H ; DDRAM: 40----4FH
LPS_LAX:ORL A,#80H ;设置DDRAM地址
CALL LCDWC
POP ACC
RET
LCDWRITE: ;定位写字符子程序
CALL LCDPOS ;定位显示地址
CALL LCDWD ;写字符
RET
LCDRESET: ;初始化程序
CALL DELAY5MS ;延时15MS
CALL DELAY5MS
CALL DELAY5MS
MOV A,#38H ;显示模式设置(不检测忙信号)
CALL LCDWCN ;共三次
CALL DELAY5MS
MOV A,#38H
CALL LCDWCN
CALL DELAY5MS
MOV A,#38H
CALL LCDWCN
MOV A,#38H ;显示模式设置(以后均检测忙信号)
CALL LCDWC
MOV A,#08H ;显示关闭
CALL LCDWC
MOV A,#01H ;显示清屏
CALL LCDWC
MOV A,#06H ;显示光标移动设置
CALL LCDWC
MOV A,#0CH ;显示开及光标设置
CALL LCDWC
RET
LCDWC: ;送控制字子程序(检测忙信号)
CALL WAITIDLE
LCDWCN: ;送控制字子程序(不检测忙信号)
MOV DPTR,#CSADDR ;CS=1 RS=0 RW=0
MOVX @DPTR,A
RET
LCDWD: ;写字符子程序
CALL WAITIDLE
MOV DPTR,#CSADDR+RSADDR ;CS=1 RS=1 RW=0
MOVX @DPTR,A
RET
WAITIDLE:
PUSH ACC ;正常读写操作之前必须检测LCD控制器状态
MOV DPTR,#CSADDR+RWADDR ;CS=1 RS=0 RW=1
WTD_PA: MOVX A,@DPTR ;DB7: 0 LCD控制器空闲
JB ACC.7,WTD_PA ; 1 LCD控制器忙
POP ACC
RET
DELAY5MS:
MOV R1,#25 ;延时子程序(5MS)
DL5_PA: MOV R2,#100
DJNZ R2,$
DJNZ R1,DL5_PA
RET
DELAY400MS:
MOV R0,#20 ;延时子程序(400MS)
DL4_PA: MOV R1,#100
DL4_PB: MOV R2,#100
DJNZ R2,$
DJNZ R1,DL4_PB
DJNZ R0,DL4_PA
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -