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

📄 5路倒计时器源码.txt

📁 配合液晶1602及3个健独立5路控制倒计时,每路可独立没置开启时间,开启时长,关闭时间
💻 TXT
📖 第 1 页 / 共 2 页
字号:
	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 + -