📄 5路倒计时器源码.txt
字号:
JB ACC.1, ULK ;等健弹起
MOV A, SMM
INC A ;SMM加1
DA A ;BCD调整
MOV SMM, A
CJNE A, #60,$+3
JC CXD
MOV SMM, #0
CXD: SJMP BBT ;刷新显示.扫描健盘
;---------判是K2健?-------------------------
CJNE A, #2, AAWQ
FFR: ACALL KEY
JB ACC.2, FFR ;等健弹起
MOV A, SMM
ADD A, #99H ;SMM减1
DA A ;BCD调整
MOV SMM, A
CJNE A, #0,TTF
MOV SMM, #60
TTF: SJMP BBT ;刷新显示.扫描健盘
;----------K3--------------------------------
AAWQ: ACALL KEY
JB ACC.3, AAWQ ;等健弹起
;-------------------------------------------------
GGN: ACALL BBXX ;SS秒反白显示
ACALL BGRD ;显当前路数.时间值格式.状态
NLB: ACALL KEY ;调扫描健盘
JZ NLB
ACALL SD12M ;延时12MS
ACALL KEY ;调扫描健盘
JZ NLB ;返扫描健盘
;-----------判是K1健?--------------按下健
CJNE A, #1,PKI ;不是按下K1健
GGF: ACALL KEY ;调扫描健盘
JB ACC.1, GGF ;等健弹起
MOV A, SS
INC A ;当前秒单元加1
DA A ;BCD调整
MOV SS, A
CJNE A,#60,$+3 ;秒钟由0-60
JC PER
MOV SS, #00H
PER: SJMP GGN ;刷新显示.扫描健盘
;---------判是K2健?--------------------
PKI: CJNE A, #2,PKY ;不是按下K2健
SOP: ACALL KEY ;调扫描健盘
JB ACC.2, SOP ;等健弹起
MOV A, SS
ADD A, #99H ;当前秒单元减1
DA A ;BCD调整
MOV SS, A
CJNE A,#0,HHK ;秒由0-60
MOV SS,#60
HHK: SJMP GGN ;刷新显示.扫描健盘
;-------K3健--------------------------
PKY: ACALL KEY ;调扫描健盘
JB ACC.3, PKY ;等K3健弹起
;---------SSS---------------------------
RRP: ACALL XXBB ;SSS秒反白显示
ACALL BGRD ;显当前路数.时间值格式.状态
GGH: ACALL KEY
JZ GGH
ACALL SD12M
ACALL KEY
JZ GGH
;----------判是K1健?----------------------
CJNE A, #1, SSP;不是按下K1健
JMA: ACALL KEY
JB ACC.1, JMA ;等健弹起
MOV A, SSS
INC A ;SSS加1
DA A ;BCD调整
MOV SSS, A
CJNE A, #60, $+3
JC EES
MOV SSS, #0
EES: SJMP RRP ;刷新显示.扫描健盘
;----------判是K2健?--------------------------
SSP: CJNE A, #2, XXJ;不是按下K2健
MQW: ACALL KEY
JB ACC.2, MQW ;等健弹起
MOV A, SSS
ADD A, #99H ;SSS减1
DA A ;BCD调整
MOV SSS, A
CJNE A, #0,CFD
MOV SSS, #60
CFD: SJMP RRP ;刷新显示.扫描健盘
;----------K3------------------------------
XXJ: ACALL KEY
JB ACC.3, XXJ ;等K3健弹起
;%%%%%%%%%%%状态设置%%%%%%%%%%%%%%%%%%
JJB: ACALL CVFB ;状态反白显示
ACALL BGRD ;显当前路数.时间值格式.状态
KLM ACALL KEY ;调扫描健盘
JZ KLM
ACALL SD12M ;延时12MS
ACALL KEY ;调扫描健盘
JZ KLM
;-------判是K1健?---------------------
CJNE A, #1,DRY ;不是按下K1健
CFC: ACALL KEY ;调扫描健盘
JB ACC.1, CFC ;等健弹起
MOV MVB, #0FFH ;当前路ON状态
SJMP JJB ;刷新显示.扫描健盘
;--------判是K2健?--------------------
DRY: CJNE A,#2,NBJ ;不是按下K2健
ZXC: ACALL KEY ;调扫描健盘
JB ACC.2, ZXC ;等健弹起
MOV MVB, #0 ;当前路OFF状态
SJMP JJB ;刷新显示.扫描健盘
;--------K3健--------------------------------
NBJ ACALL KEY ;调扫描健盘
JB ACC.3, NBJ ;等K3健弹起
ACALL BCDK ;当前路数.时间值格式.状态写入内存区
LJMP BXC ;退出设置返显当前路数.时间值格式.状态
;*****************中断设置***********************************
;----------3秒中断启动T1---------------------------
DNAK: MOV TH1, #02H ;3秒程序
MOV TL1, #18H ;FOSC=12MHz,65ms
CLR F0 ;标志
ORL TMOD, #10H ;T1方式1
ORL IE, #88H ;开总允汻允汻T1中断
MOV SOV, #00H ;清计数
MOV BBS, #00H ;清计秒
SETB TR1 ;启动T1
RET
;-----------100小时中断启动T0-------------------------
DNBK: MOV TH0, #3CH
MOV TL0, #0B0H ;FOSC=12MHz,50ms
ORL TMOD, #01H ;T0方式1
ORL IE, #82H ;开总允汻允汻T0中断
CLR N100 ;计满100小时标志
SETB TR0 ;启动T0
RET
;-------------3秒中断---------------BCD
INT1: PUSH ACC ;进入中断服务
PUSH PSW
MOV TH1, #02H ;重装值
MOV TL1, #18H ;FOSC=12MHz,65ms
INC SOV ;计数加1
MOV A, SOV
CJNE A,#16, CLAK ;16次为1秒
CLR SOV ;清计数
MOV A, BBS
INC A ;秒加1
DA A ;BCD调整
MOV BBS, A
CJNE A,#3,CLAK ;返回中断
CLR BBS
SETB F0 ;置标志
POP PSW
POP ACC
CLAK: RETI ;中断返回
NOP
NOP
LJMP FDD ;陷阱-返起始处
;-------100小时中断-----------------BCD
INT0: CLR EA ;关中断
PUSH ACC
PUSH PSW ;入栈
MOV TH0,#3CH
MOV TL0,#0B0H ;FOSC=12MHz,50ms
INC MDA ;计数器加1
MOV A, MDA
CJNE A, #20,DKNB;中断20次为1秒
MOV MDA, #0
MOV A, SBB
INC A ;秒加1
DA A ;BCD调整
MOV SBB, A
CJNE A,#60,$+3
JC DKNB ;中断返回
MOV SBB, #0 ;清0秒
MOV A, SZE
INC A ;分加1
DA A ;BCD调整
MOV SZE, A
CJNE A,#60,$+3
JC DKNB ;中断返回
MOV SZE, #0 ;清0分
MOV A, DSA
INC A ;时加1
DA A ;BCD调整
MOV DSA, A
CJNE A,#100,DKNB;最长100小时
MOV DSA, #0 ;清0时
SETB N100 ;计满100小时标志
DKNB: POP ACC ;出栈
POP PSW
SETB EA ;开中断
RETI ;中断返回
NOP
NOP
LJMP FDD ;陷阱-返起始处
;****************各子程序*********************
;000000000--扫描健盘-0000000000000000
KEY: ORL P2, #07H
MOV R4, #20H
KFG: DJNZ R4, KFG ;小延时
MOV A, P2
ANL A, #07H ;取低3位
XRL A, #07H ;取反低3位
RET
;0000000-上电显示 POWER.TIME 020-82828006 -000000000000000
DISY0: MOV DAT, #80H ;写入显示起始地址(第1行第一个位置)
ACALL ENABLE ;写指令
MOV DPTR, #TAB1;显示第1行字表
MOV DNA, #16 ;每行显16个字
ACALL DSP0 ;写显示数据
;------------写2行----------------------------------------
MOV DAT, #0C0H ;写入显示起始地址(第2行第一个位置)
ACALL ENABLE ;写指令
MOV DPTR, #TAB2;显示字符表
MOV DNA, #16 ;每行显16个字
ACALL DSP0 ;写显示数据
RET ;退出
;------查固表--写数据子程序-------------------
DSP0: MOV R2, DNA ;每行写16个字
DSP1: ACALL RDY ;判忙
CLR A ;固定查表法
MOVC A, @A+DPTR
MOV P1, A ;写数据到口
SETB E ;拉高E
SETB RS ;选数据寄存器
CLR RW ;写数据
CLR E ;执行
NOP
NOP
SETB E ;拉高E
INC DPTR ;下一个数据
DJNZ R2, DSP1 ;显完16个字
RET ;返回
;---------写命令子程序----------------
ENABLE:ACALL RDY ;判忙
MOV P1, #0FFH ;复位P1
SETB E ;拉高E
CLR RS ;选指令寄存器
CLR RW ;写
MOV P1, DAT ;送指令
CLR E ;执行
NOP
NOP
SETB E ;拉高E
RET ;返回
;---------判忙子程序------------
RDY: MOV P1, #0FFH
SETB E ;拉高E
CLR RS ;指令寄存器
SETB RW ;读
CLR E ;执行
NOP
NOP
SETB E ;拉高E
JB P1.7, RDY ;如果P1.7为高电平表示忙就循环等待
RET
TAB1: DB 20H,20H,20H,50H,4FH,57H,45H,52H,5FH,54H,49H,4DH,45H,20H,20H,20H
TAB2: DB
54H,45H,58H,3BH,20H,31H,33H,36H,35H,30H,39H,36H,31H,37H,32H,35H
;--------POWER-TIME ; TEX: 13650961725-------------------------
TAB3: DB 20H,4FH,46H,46H,20H,20H,50H,4FH,57H,45H,52H,5FH,54H,49H,4DH,45H
TAB4: DB
0FCH,20H,6CH,6FH,77H,20H,20H,7AH,65H,6EH,20H,20H,7AH,6FH,6EH,67H
;--------【OFF POWER.TIME】low zen zong-------------------------
TAB5: DB
20H,20H,4FH,4EH,20H,50H,4FH,57H,45H,52H,5FH,54H,49H,4DH,45H,20H
TAB6: DB
27H,27H,27H,20H,30H,32H,30H,5FH,38H,32H,38H,32H,38H,30H,30H,36H
;----------【ON POWER.TIME】>>> 020-82828006--------------------
LJMP FDD ;陷阱-返起始处
;0000000000-当前路数.时间值格式.状态写入内存区-000000000000000000
BCDK: MOV A, SWE ;取当前路数
DEC A
MOV B, #8H ;计算这路首址
MUL A, B ;乘每路8字节
MOV R0,START+A ;得当前路首址
MOV R2, #8 ;每路8字节
MOV R1, #28H ;28H-2FH当前显存区地址
BTP: MOV A, @R1 ;取当前显存区数
MOV @R0, A ;写入这路内存区
INC R1
INC R0
DJNZ R2, BTP
RET
;0000000000-显当前路数.时间值格式.状态-000000000000000000000000000
BGRD: MOV DAT, #80H ;写入显示起始地址(第1行第一个位置)
ACALL ENABLE ;写指令
MOV DPTR, #TABB
;---------输出当前路数---------------------------
MOV DDV, #3CH ;<(第1行第1个位置)
ACALL GUT ;输出1字节
MOV A, SWE ;取路数
DEC A
MOV DDV, A
ACALL GUT ;输出路数(第1行第2个位置)
MOV DDV, #27H ,>(第1行第3个位置)
ACALL GUT ;输出1字节
;-------------输出时间值格式--------------------------------------
MOV DDV, #20H ;输出2个空格位
ACALL DSPP
MOV DDV, HH ;取时
ACALL OPT ;输出数据
MOV DDV, #20H ;空格
ACALL DSPP ;输出2个空格位
MOV DDV, SHH ;取关闭值
ACALL OPT ;输出数据
MOV DDV, #20H ;空格
ACALL DSPP ;输出2个空格位
MOV DDV, MM ;取分
ACALL OPT ;输出数据
;------第2行输出时间值格式-----------------
MOV DAT, #0C0H ;写入显示起始地址(第2行第一个位置)
ACALL ENABLE ;写指令
MOV DDV, SMM ;取关闭值
ACALL OPT ;输出数据
MOV DDV, #20H ;空格
ACALL DSPP ;输出2个空格位
MOV DDV, SS ;取秒
ACALL OPT ;输出数据
MOV DDV, #20H ;空格
ACALL DSPP ;输出2个空格位
MOV DDV, SSS ;取关闭值
ACALL OPT ;输出数据
MOV DDV, #20H ;空格
ACALL DSPP ;输出2个空格位
;--------输出--显示--状态--------------
MOV A, MVB ;取状态
JZ CJU
MOV DDV, #4FH ;输出ON(4FH,4EH)
ACALL GUT ;输出1字节
MOV DDV, #4EH
ACALL GUT ;输出1字节
RET ;显示返回
CJU: MOV DDV, #4FH ;输出OFF(4FH,46H,46H)
ACALL GUT ;输出1字节
MOV DDV, #46H
ACALL GUT ;输出1字节
MOV DDV, #46H
ACALL GUT ;输出1字节
RET ;显示返回
;------------输出1字节---------------
GUT: ACALL RDY ;判忙
MOV P1, DDV ;输出
SETB E ;拉高E
SETB RS ;选数据寄存器
CLR RW ;写数据
CLR E ;执行
NOP
NOP
SETB E ;拉高E
RET
;---------输出2个空格位-----------------
DSPP: MOV R3, #2
ACALL GUT ;输出
DJNZ R3, DSPP
RET
;----------输出数据---------------------
OPT: MOV A, DDV
MOV R4, A
ANL A, #0F0H ;取十位
SWAP A ;换到低位
MOV DPTR, #TABB
MOVC A,@A+DPTR ;查表
MOV DDV, A
ACALL GUT ;输出十位
MOV A, R4
ANL A, #0FH ;取时个位
MOVC A,@A+DPTR ;查表
MOV DDV, A
ACALL GUT ;输出个位
RET
TABB: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
;00000000000--显示关机:【OFF POWER.TIME】--0000000000000000000
XXSD: MOV DAT, #80H ;写入显示起始地址(第1行第一个位置)<5>
ACALL ENABLE ;写指令
MOV DPTR, #TAB3;显示第1行字表
MOV DNA, #16 ;每行显16个字
ACALL DSP0 ;写显示数据
;------------写2行---------------------------------------------
MOV DAT, #0C0H ;写入显示起始地址(第2行第一个位置)<6>
ACALL ENABLE ;写指令
MOV DPTR, #TAB4;显示字符表
MOV DNA, #16 ;每行显16个字
ACALL DSP0 ;写显示数据
RET ;退出
;000000000000--延时12MS-0000000000000000000000
SD12M:
;-------HH时反白显示------------------------
BBGG:
;-------SHH时反白显示-----------------------------
GGBB:
;-------MM分反白显示-----------------------
BBVV:
;-------SMM分反白显示----------------------------
VVBB:
;-------SS秒反白显示------------------------
BBXX:
;-------SSS秒反白显示----------------------------
XXBB:
;-------MVB状态反白显示----------------------
CVFB:
;000000000-显示总开【ON POWER.TIME】-000000000000000000000000
STON: MOV DAT, #80H ;写入显示起始地址(第1行第一个位置)
ACALL ENABLE ;写指令
MOV DPTR, #TAB5;显示第1行字表
MOV DNA, #16 ;每行显16个字
ACALL DSP0 ;写显示数据
;------------写2行---------------------------------------------
MOV DAT, #0C0H ;写入显示起始地址(第2行第一个位置)
ACALL ENABLE ;写指令
MOV DPTR, #TAB6;显示字符表
MOV DNA, #16 ;每行显16个字
ACALL DSP0 ;写显示数据
RET ;退出
;******************************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -