📄 display.asm
字号:
RS BIT P3.0 ;数据寄存器与命令寄存器选择信号
RW BIT P3.1 ;读/写选择信号
E BIT P3.2 ;启动命令信号
TIMES EQU 30H ;1定义变量
SEC EQU 31H
MINU EQU 32H
SECGW EQU 33H
SECSW EQU 34H
MINUGW EQU 35H
MINUSW EQU 36H
ORG 0000H ;2 指定程序在ROM中的开始位置,写中断向量表
AJMP START
ORG 000BH
AJMP TIME50
START:MOV SP,#60H ;3 初始化,启动定时器
MOV TH0,#03CH
MOV TL0,#0AFH
MOV TMOD,#01H
SETB TR0
SETB ET0
SETB EA
;4 初始化变量
MOV TIMES,#0H
MOV SEC,#0H
MOV MINU,#0H
MOV SECGW,#0
MOV SECSW,#0
MOV MINUGW,#0
MOV MINUSW,#0
MAIN:
LCALL YS; ;去掉这几行回出现多余的字符
LCALL TEST;
LCALL F_BUSY;
;初始化液晶显示器,往命令寄存器送11个命令字
MOV P1,#00000001B
LCALL WCOMMAND ;清屏并置AC为0
MOV P1,#3CH ;功能设置,8位接口,2 行显示,5X7点阵
LCALL WCOMMAND ;等待直至LCM不忙
MOV P1,#0CH ;开显示及光标,不闪烁
LCALL WCOMMAND
MOV P1,#06H ;显示不移位,AC为增量方式
CALL WCOMMAND
MOV P1,#80H ;写入显示起始地址,第一行第一个位置
CALL WCOMMAND
XS: MOV A,SEC ;5 主程序,循环显示秒变量SEC
MOV B,#10
DIV AB
MOV SECGW,B
MOV SECSW,A ;把秒拆成个位与十位
MOV A,MINU
MOV B,#10
DIV AB
MOV MINUGW,B
MOV MINUSW,A ;把分拆成个位与十位
;把数据送往数据寄存器,并按初始化的格式显示
MOV A,MINUSW
ADD A,#30H
MOV P1,A
LCALL WDATA ;显示分的十位
MOV A,MINUGW
ADD A,#30H
MOV P1,A
LCALL WDATA ;显示分的个位
MOV A,SECSW
MOV P1,#3AH
LCALL WDATA ;显示:
MOV A,SECSW
ADD A,#30H
MOV P1,A
LCALL WDATA ;显示秒的十位
MOV A,SECGW
ADD A,#30H
MOV P1,A
LCALL WDATA ;显示秒的个位
MOV P1,#80H ;光标回到第一行开始位置
LCALL WCOMMAND
AJMP XS ;循环显示
;***********定时中断服务子程序************
TIME50:
INC TIMES ;6 中断服务程序 修改秒变量SEC
MOV R0,TIMES
CJNE R0,#20,EXIT
INC SEC
MOV TIMES,#0
MOV R0,SEC
CJNE R0,#60,EXIT
INC MINU
MOV SEC,#0
MOV R0,MINU
CJNE R0,#60,EXIT
MOV MINU,#0
EXIT: MOV TH0,#03CH
MOV TL0,#0AFH
RETI
DELAY: MOV R3,#100
DEL1: MOV R4,#100
DJNZ R4,$
DJNZ R3,DEL1
RET
;***********写入控制命令字子程序**********************
WCOMMAND: CLR RS;
CLR RW;
CLR E;
CALL F_BUSY;
SETB E;
RET
;***********写入数据寄存器***************************
WDATA: SETB RS;
CLR RW;
CLR E;
CALL F_BUSY;
SETB E;
RET
;***********查"忙"标志子程序*************************
F_BUSY: PUSH PSW ;
PUSH ACC ;
PUSH 0A0H ;P2口进栈保护
PUSH 90H ;P1口进栈保护
LOOP: MOV P1,#0FFH ;判断液晶显示器是否忙的子程序
CLR RS
SETB RW
CLR E
NOP
SETB E
JB P1.7,LOOP ;如果P1.7为高电平表示忙就循环等待
POP 90H
POP 0A0H
POP ACC ;不忙,恢复现场返回
POP PSW;
RET
;****************延时子程序(5ms)*************************
YS: PUSH 01H;
PUSH 02H;
MOV R1,#25;
DL5_PA: MOV R2,#100;
DJNZ R2,$;
DJNZ R1,DL5_PA;
POP 02H;
POP 01H;
RET
;**********************测试子程序***************************
TEST: MOV P1,#38H;
CLR RS;
CLR RW;
CLR E;
NOP
SETB E;
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -