汇编液晶1602显示程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;--------------------------------------------------
;主程序初始设置
;--------------------------------------------------
COM EQU 20H ;LCD控制端的定义指令寄存器
DAT EQU 21H ;数据寄存器
LCD_PORT EQU P0 ;LCD控制端的定义
HD_LCD_RS EQU P2.0 ;LCD控制端的定义
HD_LCD_RW EQU P2.1 ;LCD控制端的定义
HD_LCD_E EQU P2.2 ;LCD控制端的定义
LCD_0 EQU 30H ;LCD程序用
LCD_1 EQU 31H ;LCD程序用
LCD_2 EQU 32H
LCD_3 EQU 33H
LCD_4 EQU 34H
LCD_5 EQU 35H
LCD_6 EQU 36H
LCD_7 EQU 37H
LCD_8 EQU 38H
LCD_9 EQU 39H
LCD_A EQU 3AH
LCD_B EQU 3BH
LCD_C EQU 3CH
LCD_D EQU 3DH
LCD_E EQU 3EH
LCD_F EQU 3FH
YZKZ EQU 61H ;将61H设置为预置控制
SSKZ EQU 60H ;将60H设置为实时控制
;----------------------------------
; 程序开始
;----------------------------------
ORG 0000H
;----------------------------------
; 主程序初始设置
;----------------------------------
MOV SP,#70H
MOV SSKZ,#00H ;实时显示为零
MOV YZKZ,#00H ;预置显示为零
MOV LCD_PORT,#0FFH ;LCD初始化
LCALL INT ;LCD初始化
MOV LCD_0,#0AH ;S值
MOV LCD_1,#0BH ;K值
MOV LCD_2,#0CH ;Z
MOV LCD_3,#0DH ;:
MOV LCD_5,#0EH ;.
MOV LCD_7,#0FH ;V
MOV LCD_8,#10H ;Y
MOV LCD_9,#0BH ;C
MOV LCD_A,#0CH ;Z
MOV LCD_B,#0DH ;:
MOV LCD_D,#0EH ;.
MOV LCD_F,#0FH ;V
MOV COM,#80H ;LCD的开始地址设置
LCALL LCD_W_CMD
MOV DPTR,#TAB
MOV R2,#16 ;设置循环变量初值
MOV R1,#30H
WRIN:
MOV A,@R1
MOVC A,@A+DPTR
MOV DAT,A
LCALL LCD_W_DAT ;写数据到液晶中
LCALL DELAY
INC R1
DJNZ R2,WRIN
;---------------------------------
;主程序循环体部分
;---------------------------------
WAIT:
LCALL LCD_SHOW
LJMP WAIT
;---------------------------------
;表格及主程序群
; --------------------------------
TAB:
DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
DB 53H,4BH,5AH,3AH,2EH,56H,59H
; --------------------------------;
;初始化子程序
;输入:COM;输出子程序:LCD_W_CMD
; --------------------------------
INT:
MOV COM,#3cH ;设置工作方式(8位总线)
LCALL LCD_W_CMD
MOV COM,#0EH ;Display ON/OFF
LCALL LCD_W_CMD
MOV COM,#01H ;Display Clear
LCALL LCD_W_CMD
MOV COM,#06H ;设置输入方式
LCALL LCD_W_CMD
RET
;--------------------------------
;写指令代码子程序
;输入子程序:LCD_R_STAT;
;输入:无;
;输出子程序:无;输出:LCD_PORT;
;中间变量子程序:PUB_DELAY_100US、NOP5
;中间变量:
A、HD_LCD_RS、HD_LCD_RW、HD_LCD_E。
;--------------------------------
LCD_W_CMD:
PUSH ACC
LCD_W_CMD_A:
LCALL LCD_R_STAT
JNB ACC.7,LCD_W_CMD_B
LCALL PUB_DELAY_100US
SJMP LCD_W_CMD_A
LCD_W_CMD_B:
CLR HD_LCD_RW
LCALL NOP5
CLR HD_LCD_RS
LCALL NOP5
SETB HD_LCD_E
LCALL NOP5
MOV A,COM
MOV LCD_PORT,A
LCALL NOP5
CLR HD_LCD_E
LCALL NOP5
SETB HD_LCD_RW
POP ACC
RET
; --------------------------------
;写显示数据子程序
;输入子程序:LCD_R_STAT;
;输入:无;
;输出子程序:无;输出:LCD_PORT;
;中间变量子程序:PUB_DELAY_100US、NOP5
;中间变量:A、HD_LCD_RS、HD_LCD_RW、HD_LCD_E。
;---------------------------------
LCD_W_DAT:
PUSH ACC
LCD_W_DAT_A:
LCALL LCD_R_STAT
JNB ACC.7,LCD_W_DAT_B
LCALL PUB_DELAY_100US
SJMP LCD_W_DAT_A
LCD_W_DAT_B:
CLR HD_LCD_RW
LCALL NOP5
SETB HD_LCD_RS
LCALL NOP5
SETB HD_LCD_E
LCALL NOP5
MOV A,DAT
MOV LCD_PORT,A
LCALL NOP5
CLR HD_LCD_E
LCALL NOP5
; SETB HD_LCD_RW
POP ACC
RET
; --------------------------------
;读LCD状态子程序
;输入子程序:无;
;输入:LCD_PORT;
;输出子程序:无;输出:A;
;中间变量子程序:NOP5
;中间变量:无。
; --------------------------------
LCD_R_STAT:
SETB HD_LCD_RW
LCALL NOP5
CLR HD_LCD_RS
LCALL NOP5
SETB HD_LCD_E
LCALL NOP5
MOV A,LCD_PORT
LCALL NOP5
CLR HD_LCD_E
LCALL NOP5
CLR HD_LCD_RW
RET
; --------------------------------
;延时子程序1
;中间变量:R6、R7。
;---------------------------------
DELAY:
MOV R6,#00H
MOV R7,#00H
DELAY1:
NOP
DJNZ R7,DELAY1
DJNZ R6,DELAY1
RET
;---------------------------------
;延时子程序2
;中间变量:R6、R7。
;---------------------------------
D10MS:MOV R7,#14H
DLY: MOV R6,#0F8H
DLY1: DJNZ R6,DLY1
DJNZ R7,DLY
RET
;---------------------------------
;延时100us(F=11.0592MHZ)
;中间变量:A。
;---------------------------------
PUB_DELAY_100US:
PUSH ACC
CLR A
PD5_0:
NOP
INC A
CJNE A,#23,PD5_0
POP ACC
RET
NOP5:
NOP
NOP
NOP
RET
;---------------------------------
;LCD显示子程序
;输入子程序:无;
;输入:COM、LCD_4、LCD_6、LCD_C、LCD_E;
;输出子程序:LCD_W_CMD、LCD_W_DAT;
;输出:LCD_PORT;
;中间变量子程序:DELAY
;中间变量:A。
;---------------------------------
LCD_SHOW:
LCALL SEPR ;实时控制显示分解子程
LCALL YZSEPR ;预置显示分解子程
MOV COM,#84H
LCALL LCD_W_CMD
MOV DPTR,#TAB
MOV A,LCD_4
MOVC A,@A+DPTR
MOV DAT,A
LCALL LCD_W_DAT
LCALL DELAY
MOV COM,#86H
LCALL LCD_W_CMD
MOV DPTR,#TAB
MOV A,LCD_6
MOVC A,@A+DPTR
MOV DAT,A
LCALL LCD_W_DAT
LCALL DELAY
MOV COM,#8CH
LCALL LCD_W_CMD
MOV DPTR,#TAB
M
OV A,LCD_C
MOVC A,@A+DPTR
MOV DAT,A
LCALL LCD_W_DAT
LCALL DELAY
MOV COM,#8EH
LCALL LCD_W_CMD
MOV DPTR,#TAB
MOV A,LCD_E
MOVC A,@A+DPTR
MOV DAT,A
LCALL LCD_W_DAT
LCALL DELAY
RET
;---------------------------------
; 实时控制显示分解子程
;输入:SSKZ;
;输出:LCD_4、LCD_6;
;中间变量:A、B。
;---------------------------------
SEPR: MOV A,SSKZ
MOV B,#10
DIV AB
MOV LCD_4,A
MOV LCD_6,B
RET
;---------------------------------
;预置分解子程序
;输入:YZKZ;
;输出:LCD_C、LCD_E;
;中间变量:A、B。
;---------------------------------
YZSEPR: MOV A,YZKZ
MOV B,#10
DIV AB
MOV LCD_C,A
MOV LCD_E,B
RET
END