📄 关于液晶的显示程序.txt
字号:
ORG 0000H
AJMP MAIN ;主程序
ORG 0003H
AJMP NT0 ;外部中断
ORG 000BH
AJMP TCT0 ; 定时器
ORG 0030H
MAIN:MOV SP, #60H ;设置堆栈
CLR 00H ;工作状态标志位,0为设置,1为工作
CLR 01H ;指示灯状态标志位,0为LED不亮,1为亮
CLR 02H ;控制信号标志,0为P3.7低,1为高
MOV 22H, #00H ;100ms计数器清零
MOV 23H, #00H ;秒计数器清零
MOV 24H, #10 ;分计数器预置10min
MOV TH0, #3CH ;100ms计数器初值
MOV TL0, #0B0H
MOV TMOD, #02H
SETB EA ;
SETB ET0 ;允许定时器T0中断
SETB EX0 ;允许外部中断0中断
SETB IT0
CLR TR0
MOV 34H, #01H ;显示缓冲器预置数(十位)
MOV 35H, #00H ;显示缓冲器预置数(个位)
L: ACALL LED ;调指示灯状态控制程序
JNB 00H, L ;查询工作状态指示,0为"设置"(00H状态不为1时转至L处)
ACALL BINBCD ;二进制转十进制
ACALL DIS ;显示倒计时器中的值
JB 02H, OUT ;查询控制输出位,1为P3.5高报警(02H状态为1时转至LED处)
AJMP L
LED:JB 01H,LED0 ;01H状态为1时,程序转之LED0处
CLR P3.7
RET
LED0:SETB P3.7
RET
BINBCD:MOV A, 24H ;取二进制数
MOV B, #10
DIV AB ;A中存十位数,B中存个位数
MOV 30H, A ;存十位数
MOV 31H, B ;B中存个位数
RET
DIS: MOV R0, #30H
MOV DPTR, #TAB
MOV A, @R0
MOVC A, @A+DPTR
MOV P1, A ;显示十位
SETB P3.3
(在这加10ms延时程序也可不加,只不过显示的不对)
INC R0
CLR P3.3
MOV A, @R0
MOVC A, @A+DPTR
MOV P1, A ;显示个位
SETB P3.2
(在这加10ms延时程序也可不加,只不过显示的不对)
CLR P3.2
RET
OUT1:JNB P3.4, $ ;消抖
CLR P3.5 ;按P3.5清除报警输出
CLR 02H
SETB EX0
CLR 00H
AJMP L ;设置状态
OUT: CLR EX0
CLR TR0
SETB P3.5 ;P3.5高,报警
JNB P3.4, OUT1 ;按P3.4清除输出
AJMP OUT
DIS1: MOV R0, #34H
MOV DPTR, #TAB
MOV A, @R0
MOVC A, @A+DPTR
MOV P1, A ;显示十位
CLR P3.3
(在这加10ms延时程序也可不加,只不过显示的不对)
INC R0
SETB P3.3
MOV A, @R0
MOVC A, @A+DPTR
MOV P1, A ;显示个位
CLR P3.2
(在这加10ms延时程序也可不加,只不过显示的不对)
SETB P3.2
RET
NT0: CLR EX0 ;关中断
PUSH ACC
PUSH PSW
CLR P3.7 ;工作状态LED灭
ACALL DIS1 ;调设定值显示
RETURN:SETB EX0
SETB TR0
POP PSW
POP ACC
RETI
KEY: JB P3.0, RETURN
KEY0: ACALL DIS1
JNB P3.0, KEY0 ;等待键释放
KEY2: JB P3.1, KEY3 ;判K2键按下?未按下,转判断k3
ACALL DIS1
INC 34H
MOV A, 34H
CJNE A, #0AH,KEY22
MOV 34H, #00H
KEY22:ACALL DIS1
JNB P3.1, KEY22
AJMP KEY2
KEY3: ACALL DIS1
JB P3.4, KEY1
INC 35H
MOV A, 35H
CJNE A, #0AH,KEY33
MOV 35H, #00H
KEY33: ACALL DIS1
JNB P3.4, KEY33
AJMP KEY3
KEY1: ACALL DIS1
JB P3.0, KEY2
BCDBIN:MOV B, #10
MOV A, 34H
MUL AB
ADD A, 35H
MOV 24H, A
RET
KEY10: ACALL DIS1
JNB P3.0, KEY10
ACALL BCDBIN
SETB 00H
TCT0: PUSH ACC
PUSH PSW
INC 22H ;100ms单元加1
MOV A, 22H
CJNE A, #10,EXIT
MOV 22H, #00H
INC 23H ;秒单元加1
CPL 01H
MOV A, 23H
CJNE A, #60,EXIT
MOV 23H, #00H
DEC 24H ;分单元减一
MOV A, 24H
CJNE A, #00H,EXIT ;分计数单元不为“0”,继续
CLR TR0
SETB 02H
SETB 01H
CLR 00H
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,03H
EXIT: POP PSW
POP ACC
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -