⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 5路倒计时器源码.txt

📁 配合液晶1602及3个健独立5路控制倒计时,每路可独立没置开启时间,开启时长,关闭时间
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; 5路孤立控制倒计时器源代码  fosc=12MHz
; 健盘接线: K1--P2.0  K2--P2.1  K3--P2.2
; 5路孤立控制输出 P3.0  P3.1  P3.2  P3.3  P3.4 ; L有效
; P1    HS162-4    数据口8位
; -----定义声明---HS162-4---------------------------
RS	EQU	P3.7    ;H数 L指
RW	EQU	P3.6    ;H读 L写
E	EQU	P3.5    ;片选(H-L)
DAT     EQU	3CH     ;命令单元
DNA     EQU     3DH     ;每行显X个字符
DDV	EQU	3EH	;数据单元
;--------------------------------------------
SWE	EQU	30H	;当前路数弟1......5
MVB	EQU	31H	;当前路状态0FFH-->ON
SVVA	EQU	32H	;当前时单元
SVVB	EQU	33H	;当前分单元
SVVC	EQU	34H	;当前秒单元
;-----------3秒T1中断------------------------
SOV	EQU     35H	;计数器单元T1
BBS	EQU	36H	;计秒单元T1
;-----------100小时T0中断------------------------
MDA	EQU	37H	;计数器单元T0
SBB	EQU	38H	;计秒单元T0
SZE	EQU	39H	;计分单元T0
DSA	EQU	3AH	;计时单元T0
N100	BIT	00H,	;计满100小时标志
OPEN	BIT	01H	;总开关
;------------输出标志------------------------
RVB	BIT	02H	;弟1路输出标志
RVC	BIT	03H	;弟2路输出标志
RVD	BIT	04H	;弟3路输出标志
RVE	BIT	05H	;弟4路输出标志
RVF	BIT	06H	;弟5路输出标志
;---------------------------------------
START	EQU	3BH	;首址单元
SWE	EQU	28H	;路数单元 
HH	EQU	29H	;倒时值单元
SHH	EQU	2AH	;时关闭值单元
MM	EQU	2BH	;倒分值单元
SMM	EQU	2CH	;分关闭值单元
SS	EQU	2DH	;倒秒值单元
SSS	EQU	2EH	;秒关闭值单元
MVB	EQU	2FH	;开关状态单元
;--------当前路数.时间值格式.状态 8字节------------------- 
; 28H    29H    2AH    2BH     2CH    2DH     2EH     2FH
; SWE  ;  HH    SHH   ; MM     SMM   ; SS     SSS   ; MVB
; 路数 ; 倒时值 关闭值; 倒分值 关闭值; 倒秒值 关闭值; 状态
;---------------------------------------------------------
	ORG     00H
	AJMP    FDSA	;主程序
	ORG     03H
	LJMP	INT0	;计时0-100小时中断
	ORG	13H
	LJMP	INT1	;3秒中断
	ORG	30H
;***********上电显示*********************************
FDSA:	MOV  P3, #1FH	;关闭P3输出
	ACALL   DISY0	;显示POWER.TIME 13650961725
	ACALL	DNAK	;调3秒计时程序
	JNB	F0, $	;等待3秒
	CLR	TR1	;停止计时
;------主程序----初始------------------------------
FDD:	MOV  P1, #0FFH	;关闭P1
	MOV  20H, #0	;清所有标志
	MOV  R0, #28H
	MOV  R2, #64	;共有64个单元
	CLR  A
	MOV @R0, A	;清0
	INC  R0
	DJNZ R2, PDF
	MOV  SWE, #1	;上电默认显弟1路状态
	MOV  SP, #71H
	MOV  START, #40H;设5路时间值首址
;------------初始HS-162-4--------------------------
        MOV DAT, #01H   ;清屏  <1>
        ACALL  ENABLE   ;写指令
        MOV DAT, #38H   ;8位2行5x7点阵  <2>
        ACALL  ENABLE   ;写指令
        MOV DAT, #0FH   ;显示器开、光标开、闪烁开 <3>
        ACALL  ENABLE   ;写指令
        MOV DAT, #06H   ;文字不动,光标自动右移 <4>
        ACALL  ENABLE   ;写指令	
;------------进入功能健--------------------------------------
BXC:	ACALL	BGRD	;显当前路数.时间值格式.状态
KMK:	ACALL	KEY	;调扫描健盘
	JZ	KMK	;无健按下
	ACALL	SD12M	;延时12MS
	ACALL	KEY	;调扫描健盘
	JZ	KMK
;---------K1健选择路数----------------
GKY:	CJNE  A, #1, AD2;不是按下K1健
XCZ:	ACALL	KEY	;调扫描健盘
	JB  ACC.1  XCZ	;等健弹起
	INC	SWE	;当前路加1
	MOV  A, SWE
	CJNE A, #6,$+3
	JC   DAE	;1-5路范围
	MOV  SWE, #1
DAE:	SJMP	BXC	;刷新路数.时间值.状态
;----------K2健进入当前路设置---------------
AD2:	CJNE  A, #2, AD3;不是按下K2健
XCM:	ACALL	KEY	;调扫描健盘
	JB  ACC.2, XCM	;等健弹起
DAB:	AJMP	SDKC	;进入当前路设置	
;-------K3健长按3秒?-----------------------
AD3:	ACALL	DNAK	;调计时程序
AMB:	ACALL	KEY	;调扫描健盘
	JB  ACC.3, AMB	;等K3健弹起
	JB  F0, VGF	;弹起,己按下了3秒
	CLR	TR1	;弹起,末够3秒停止计时
	SJMP	MMK	;再查K1健
VGF:	ACALL   XXSD	;显示:【OFF POWER.TIME】
	ACALL	DNAK	;调3秒计时程序
	JNB	F0, $   ;等待3秒
	MOV  PCON, #06H	;进入掉电摸式GF0=1
;--------再按K1-K3执行倒计时----------------------
MMK:	CJNE  A, #1, BXC;不是按下K1-K3健
	CJNE  A, #3, BXC;返刷新路数.时间值.状态
CGA:	ACALL	KEY	
	JB  ACC.1, CGA  ;等K1健弹起 	
	JB  ACC.3  CGA	;等K3健弹起
PPA:	ACALL	STON	;显示【ON POWER.TIME】
	SETB	OPEN	;开总开关--执行倒计时
	ACALL	DNBK	;启动T0
;*********进入倒计时扫描****************************
;--------------弟1路------------------
BHM:	JNB  OPEN, BXC	;总开关未开
	MOV  R0,START+7H;弟1路状态
	MOV  A, @R0	;取状态
	CJNE A,#0FFH,TO2T;弟1路未开查弟2路
	JB   RVB, KKI	;己输出.查关闭值
	MOV  R0,START+1H;弟1路指针
	MOV  A, @R0	;取倒时值
	CJNE A,DSA,CKG	;时不相等
	INC  R0
	INC  R0		;指向倒分值
	MOV  A, @R0	
	CJNE A,SZE,CKG	;分不相等
	INC  R0
	INC  R0		;指向倒秒值
	MOV  A, @R0	
	CJNE A,SBB,CKG	;秒不相等
	SETB  RVB	;输出标志
	CLR   P3.0	;时分秒都相等输出...
	SJMP  TO2T	;查弟2路
CKG:	CLR   RVB
	SETB   P3.0	;关闭弟1路
	SJMP  TO2T	;查弟2路
;-----------查关闭值-----------------------
KKI:	MOV  R0,START+2H;指向关闭值
	MOV  A, @R0	;取关闭值
	CJNE A,DSA,TO2T	;时不相等
	INC  R0
	INC  R0
	MOV A,SZE,TO2T	;分不相等
	INC  R0
	INC  R0
	MOV A,SBB,TO2T	;秒不相等
	CLR  RVB	;时分秒都相等
	SETB  P3.0	;关闭弟1路		
;------------弟2路-------------------------
TO2T:	MOV  R0,START+0FH;弟2路状态
	MOV  A, @R0	;取状态
	CJNE A,#0FFH,KTRO;弟2路未开查弟3路
	JB  RVC, KKA	;己输出.查关闭值
	MOV  R0,START+9H;指弟2路倒时值
	MOV  A, @R0	;取倒时值
	CJNE A, DSA,XLE	;时不相等
	INC  R0
	INC  R0
	MOV  A, @R0	;指向倒分值
	CJNE A, SZE,XLE	;分不相等
	INC  R0
	INC  R0
	MOV A, @R0	;指向倒秒值
	CJNE A, SBB,XLE	
	SETB  RVC	;输出标志
	CLR  P3.1	;时分秒都相等输出...
	SJMP  KTRO	;查弟3路
XLE:	CLR   RVC
	SETB   P3.1	;关闭弟2路
	SJMP  KTRO	;查弟3路
;-----------查关闭值-----------------------
KKA:	MOV R0,START+OAH;指向关闭值
	MOV  A, @R0
	CJNE A,DSA,KTRO	;时不相等
	INC  R0
	INC  R0
	MOV  A, @R0
	CJNE A,SZE,KTRO	;分不相等
	INC  R0
	INC  R0
	MOV  A, @R0
	CJNE A,SBB,KTRO	;秒不相等
	CLR  RVC	;时分秒都相等
	SETB  P3.1	;关闭弟2路
;-------------弟3路------------------------
KTRO:	MOV  R0,START+17H;弟3路状态
	MOV  A, @R0	;取状态
	CJNE A,#0FFH,CDFR;弟3路未开查弟4路
	JB  RVD, KKB	;己输出.查关闭值
	MOV R0,START+11H;指弟3路
	MOV  A, @R0	;取倒时值
	CJNE A,DSA,JJJ	;时不相等
	INC  R0
	INC  R0
	MOV  A, @R0	;指向倒分值
	CJNE A,SZE,JJJ	;分不相等
	INC  R0
	INC  R0
	MOV  A, @R0	;指向倒秒值
	CJNE A,SBB,JJJ
	SETB  RVD	;输出标志
	CLR   P3.2	;时分秒都相等输出...
	SJMP  CDFR	;查弟4路
JJJ:	CLR   RVD
	SETB   P3.2	;关闭弟3路
	SJMP  CDRF	;查弟4路
;------------查关闭值----------------------
KKB:	MOV  R0,START+12H;指向关闭值
	MOV  A, @R0
	CJNE A,DSA,CDFR	;时不相等
	INC  R0
	INC  R0
	MOV A, @R0
	CJNE A,SZE,CDRF	;分不相等
	INC  R0
	INC  R0
	MOV  A, @R0
	CJNE A,SBB,CDRF	;秒不相等
	CLR  RVD	;时分秒都相等
	SETB  P3.2	;关闭弟3路
;------------弟4路-------------------------
CDFR:	MOV R0,START+1FH;弟4路状态
	MOV  A, @R0	;取状态
	CJNE A,#0FFH,PPWW;弟4路未开查弟5路
	JB  RVE, KKC	;己输出.查关闭值
	MOV R0,START+19H;指弟4路倒时值
	MOV  A, @R0	;取倒时值
	CJNE A,DSA,MPKS	;时不相等
	INC  R0
	INC  R0
	MOV  A, @R0	
	CJNE A,SZE,MPKS	;分不相等
	INC  R0
	INC  R0
	MOV  A, @R0	
	CJNE A,SBB,MPKS	;秒不相等
	SETB  RVE	;输出标志
	CLR   P3.3	;时分秒都相等输出...
	SJMP    PPWW	;查弟5路
MPKS:	CLR   RVE
	SETB    P3.3	;关闭弟4路
	SJMP   PPWW	;查弟5路
;------------查关闭值----------------------
KKC:	MOV R0,START+1AH;指向关闭值
	MOV A, @R0
	CJNE A,DSA,PPWW	;时不相等
	INC  R0
	INC  R0
	MOV  A, @R0
	CJNE A,SZE,PPWW	;分不相等
	INC  R0
	INC  R0
	MOV A, @R0
	CJNE A,SBB,PPWW	;秒不相等
	CLR  RVE	;时分秒都相等
	SETB  P3.3	;关闭弟4路
;------------弟5路-------------------------
PPWW:	MOV  R0,START+27H;弟5路状态
	MOV  A, @R0	;取状态
	CJNE A,#0FFH,OKOK;弟5路未开查K2健
	JB  RVF, KKD	;己输出.查关闭值
	MOV R0,START+21H;指弟5路倒时值
	MOV  A, @R0	;取倒时值
	CJNE A,DSA,GGDS	;时不相等
	INC  R0
	INC  R0
	MOV  A, @R0
	CJNE A,SZE,GGDS	;分不相等
	INC  R0
	INC  R0
	MOV  A, @R0	
	CJNE A,SBB,GGDS	;秒不相等
	SETB   RVF	;输出标志
	CLR    P3.4	;时分秒都相等输出...
	SJMP	OKOK	;查誓停健K2
GGDS:	CLR    RVF
	SETB     P3.4	;关闭弟5路
	SJMP   OKOK	;查誓停健K2
;-------------查关闭值-----------------------
KKD:	MOV R0,START+22H;指向关闭值
	MOV  A, @R0
	CJNE A,DSA,OKOK	;时不相等
	INC  R0
	INC  R0
	MOV A, @R0
	CJNE A,SZE,OKOK	;分不相等
	INC  R0
	INC  R0
	MOV  A, @R0
	CJNE A,SBB,OKOK	;秒不相等
	CLR  RVF	;时分秒都相等
	SETB  P3.4	;关闭弟5路
;---------停止计时K2健--------------------------
OKOK:	JB  N100, FDD	;到100小时返主程序
	ACALL  KEY
	JZ	BHM	;循环检查倒计时
	ACALL  SD12M	;延时12MS
HVY:	ACALL  KEY
	JZ	BHM	;循环检查倒计时
	CJNE A,#2,BHM	;不是按K2健循环检查倒计时
	JB  ACC.2, HVY	;等K2健弹起
	CLR	EA	;关中断停止计时
	CLR   TR0	;停止T0
	CLR    OPEN	;关总开关
	LJMP	BXC	;返回主程序
;***********进入相应路设置************************
SDKC:	ACALL	BBGG	;HH反白显示
	ACALL	BGRD	;显当前路数.时间值格式.状态
CKD:	ACALL	KEY	;调扫描健盘
	JZ	CKD
	ACALL	SD12M	;延时12MS
	ACALL	KEY	;调扫描健盘
	JZ	CKD
;-------判是K1健?---------------------按下健
AAW:	CJNE  A, #1,HJL	;不是按下K1健
XZZ:	ACALL	  KEY	;调扫描健盘
	JB  ACC.1  XZZ	;等健弹起
	MOV  A,	HH	
	INC  A		;当前时单元加1
	DA   A		;BCD调整
	MOV  HH, A
	CJNE A,#50,$+3	;由0-50小时内设置
	JC	BMD
	MOV  HH, #00
BMD:	SJMP	SDKC	;刷新显示.扫描健盘
;--------判是K2健?-------------------------
HJL:	CJNE  A, #2,XSC	;不是按下K2健
TTC:	ACALL	  KEY	;调扫描健盘
	JB  ACC.2, TTC	;等健弹起	
	MOV  A, HH
	ADD  A, #99H	;当前时单元减1
	DA  A		;BCD调整
	MOV  HH, A
	CJNE A, #0,FEX
	MOV  HH, #50	;由0-50小时内设置
FEX:	SJMP	SDKC	;刷新显示.扫描健盘
;------------K3健---------------------
XSC:	ACALL	  KEY	;调扫描健盘
	JB  ACC.3, XSC	;等K3健弹起
;-------------------------------------------
GGBB:	ACALL   GGBB	;SHH时反白显示
	ACALL	BGRD	;显当前路数.时间值格式.状态
CCD:	ACALL	KEY	;调扫描健盘
	JZ	CCD
	ACALL	SD12M	;延时12MS
	ACALL	KEY	;调扫描健盘
	JZ	CCD
;-----------判是K1健?-------------------------
MADC:	CJNE  A, #1, KPR;不是按下K1健
CTY:	ACALL   KEY
	JB  ACC.1, CTY	;等健弹起
	MOV  A,  SHH
	INC  A		;单元加1
	DA  A		;BCD调整
	MOV  SHH, A
	CJNE A,#50,$+3
	JC  HBN
	MOV  SHH, #0
HBN:	SJMP  GGBB	;刷新显示.扫描健盘
;-----------判是K2健?---------------------------
VBU:	CJNE  A, #2, UWQ;不是按下K2健
LLL:	ACALL  KEY
	JZ   LLL	;等健弹起
	MOV  A, SHH
	ADD  A, #99H	;单元减1
	DA   A		;BCD调整
	MOV  SHH, A
	CJNE  A, #0, LFG
	MOV  SHH, #50
LFG:	SJMP   GGBB	;刷新显示.扫描健盘
;--------------K3-----------------------------
BSA:	ACALL   KEY
	JB  ACC.3, BSA	;等健弹起
;-------------------------------------------------
OON:	ACALL	BBVV	;MM分钟反白显示
	ACALL	BGRD	;显当前路数.时间值格式.状态
NOB:	ACALL	KEY	;调扫描健盘
	JZ	NOB
	ACALL	SD12M	;延时12MS
	ACALL	KEY	;调扫描健盘
	JZ	NOB	;返扫描健盘
;-----------判是K1健?--------------按下健
	CJNE  A, #1,AAA ;不是按下K1健
SSS:	ACALL	  KEY	;调扫描健盘
	JB  ACC.1, SSS	;等健弹起
	MOV  A,	MM	
	INC  A		;当前分单元加1
	DA   A		;BCD调整
	MOV  MM, A
	CJNE A,#60,$+3  ;分钟由0-60
	JC	BBG
	MOV  MM, #0
BBG:	SJMP	OON	;刷新显示.扫描健盘
;-------------判是K2健?----------------
AAA:	CJNE  A, #2,VVV	;不是按下K2健
XCC:	ACALL	  KEY	;调扫描健盘
	JB  ACC.2, XCC	;等健弹起
	MOV  A,	MM	
	ADD  A, #99H	;分减1
	DA  A		;BCD调整
	MOV  MM, A
	CJNE A,#0,OKI	;分钟由0-60
	MOV  MM,#60
OKI:	SJMP	OON	;刷新显示.扫描健盘
;--------------K3健--------------------
VVV:	ACALL	  KEY	;调扫描健盘
	JB  ACC.3, VVV	;等K3健弹起
;-----------SMM-------------------------------
BBT:	ACALL  VVBB	;SMM分反白显示
	ACALL	BGRD	;显当前路数.时间值格式.状态
DDJ:	ACALL  KEY
	JZ   DDJ
	ACALL  SD12M
	ACALL  KEY
	JZ   DDJ
;---------判是K1健?-----------------------
	CJNE  A, #1, XXX;不是按下K1健
ULK:	ACALL   KEY

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -