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

📄 timer.txt

📁 用单片机制作的定时开关控制器 定时开关控制器在各种场合都有着极为广泛的用途。本文利用凯思迪公司的K-51A单片机实验板设计的定时开关控制器具有简单易制、价格低廉、控制点数多、控制时间可精确到秒等特点
💻 TXT
字号:
;* 三路六个状态开关控制器 *
;* *
;*****************************************
;* S1----对时按钮;S2--对分按钮 *
;* S3--对秒按钮;S4--退出对时 * 
;* S5--设定预设值按钮 *
;*****************************************
TS EQU 2DH ;* TS 为秒计数器(二进制,0~24)
TM EQU 2EH ;* TM 为分计数器(二进制,0~60) 
TH EQU 2FH ;* TH 为时计数器(二进制,0~60) 
K5 EQU 26H ;S5状态
KEYCODE EQU 29H ;*KEYCODE 为键盘值
TT0 EQU 2BH ;*与T0配合构成为秒脉冲发生器
CCB EQU 20H ;预设时间到标志,为01H时表示时间到
OFF EQU 0FFH ;预设值复位标志
DPS0 EQU 11000000B ;秒个位选通
DPS1 EQU 11001000B ;秒十位选通
DPM0 EQU 11010000B ;分个位选通
DPM1 EQU 11011000B ;分十位选通
DPH0 EQU 11100000B ;时个位选通
DPH1 EQU 11101000B ;时十位选通

K1ON DATA 30H ;*第一个开启时间 30H 
K1OFF DATA 33H ;*第一个关闭时间 33H 
K2ON DATA 36H ;*第二个开启时间 36H 
K2OFF DATA 39H ;*第二个关闭时间 39H 
K3ON DATA 3CH ;*第三个开启时间 3CH 
K3OFF DATA 3FH ;*第三个关闭时间 3FH 


ORG 0000H 
AJMP MAIN

ORG 000BH ;定时器0(T0)中断入口
SJMP I_T0

ORG 001BH ;定时器1(T1)中断入口
I_T1: AJMP MAIN1 
RETI 
;********* 定时器0中断服务 **************
ORG 0060H ;定时器T0中断服务程序
I_T0: PUSH ACC
PUSH PSW 
MOV TH0,#0DCH ;0.01s时间,常数因子DC00H
MOV R3,TT0 
DJNZ R3,I_T01 ;中断次数<100(每次中断0.01S),转出.
MOV R3,#100 ;中断次数=100次,重新下一个计数.
MOV A,TS ;秒计数器加1
ADD A,#01H
MOV TS,A
SUBB A,#60 ;秒计数器>59? Y,秒计数器=00
JC I_T01
MOV TS,#00H
MOV A,TM ;分计数器加1
ADD A,#01H
MOV TM,A
SUBB A,#60 ;分计数器>59? Y,分计数器=00
JC I_T01
MOV TM,#00H
MOV A,TH ;时计数器加1
ADD A,#01H
MOV TH,A
SUBB A,#24 ;时计数器>23? Y,时计数器=00
JC I_T01
MOV TH,#00H 
I_T01: MOV TT0,R3
POP PSW
POP ACC
NOP
NOP
RETI

;************ 主程序 ********************
ORG 00F0H
MAIN: MOV P0,#0FFH ;主程序,初始化
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0F8H ;p3.0~p3.2置低电平,使三个控制口关闭
MOV SP,#50H ;初始化堆栈指针 
MOV TMOD,#11H ;T0工作于16位定时器
MOV TT0,#100 ;中断次数,每次0.01s*100=1s
MOV TH0,#0DCH ;T0初值
MOV TL0,#00H
MOV TS,#00H ;时间赋初值
MOV TM,#00H
MOV TH,#00H
CLR EX0 ;外部中断0失效
CLR EX1 ;外部中断1失效
CLR ES ;串行口中断失效
SETB ET0 ;开T0
SETB TR0 ;激活T0
SETB EA ;开总中断
MOV K5,#00H ;S5键状态赋0
mov r5,#14H ;预设值全部赋FFH,数码管显示959595
mov r1,#K1ON 
kk: mov @r1,#OFF
INC R1
DJNZ r5,kk
MAIN1: MOV R6,#50H ;循环显示80次,消除按键抖动
DISP: MOV KEYCODE,#00H
MOV R1,#TS 
MOV A,K5 
ADD A,R1
MOV R1,A
NOP
NOP
ACALL DISPLY 
DJNZ R6,DISP
MOV A,K5 
JNZ PP2
NOP
NOP
ACALL COMP 
PP2: MOV DPTR,#KEY 
MOV A,KEYCODE 
JMP @A+DPTR 
KEY: SJMP MAIN1
SJMP KEY1 
SJMP KEY2 
SJMP KEY3 
SJMP KEY4 
SJMP KEY5 
KEY1: MOV A,K5 
JNZ KEY12 
CLR TR0 
KEY12: MOV A,@R1
CLR C
INC A 
MOV @R1,A
SUBB A,#24 
JC KEY11
MOV @R1,#00H
KEY11: SJMP MAIN1
NOP
KEY2: MOV A,K5 
JNZ KEY22
CLR TR0 
KEY22: DEC R1
MOV A,@R1
CLR C
INC A 
MOV @R1,A
SUBB A,#60 
JC KEY21
MOV @R1,#00H
KEY21: SJMP MAIN1
NOP
KEY3: MOV A,K5 
JNZ KEY32
CLR TR0 
KEY32: DEC R1
DEC R1
MOV A,@R1
CLR C
INC A
MOV @R1,A
SUBB A,#60 
JC KEY31
MOV @R1,#00H
KEY31: SJMP MAIN1 
NOP
KEY4: MOV K5,#00H 
MOV TH0,#0DCH 
MOV TL0,#00H
SETB TR0
SJMP MAIN1
KEY5: MOV A,K5 
CLR C
SUBB A,#12H 
JZ KEY51
MOV A,K5
ADD A,#03H
MOV K5,A
AJMP KEY52
KEY51: MOV K5,#00H
KEY52: LJMP MAIN1 

;*********** 键盘和显示子程序 *************
ORG 0200H ;显示子程序
DISPLY: MOV A,@R1 
MOV B,#0AH
DIV AB 
SWAP A
ORL A,#0FH 
MOV P1,A
MOV A,P3 
ANL A,#0FH
ORL A,#DPS1
MOV P3,A
NOP
NOP
ACALL DSPDEL 
MOV C,P3.7 
JC NP1
MOV KEYCODE,#08H 
NP1: MOV P1,#0FFH 
NOP
NOP
MOV A,B 
SWAP A
ORL A,#0FH
MOV P1,A
MOV A,P3
ANL A,#07H
ORL A,#DPS0
MOV P3,A
ACALL DSPDEL
MOV C,P3.7
JC SS5
MOV KEYCODE,#0AH 
SS5: MOV P1,#0FFH 
NOP
INC R1
MOV A,@R1 
MOV B,#0AH
DIV AB 
SWAP A 
ORL A,#0FH
MOV P1,A
MOV A,P3
ANL A,#07H
ORL A,#DPM1
MOV P3,A
ACALL DSPDEL
MOV C,P3.7 
JC NP2
MOV KEYCODE,#04H 
NOP
NP2: MOV P1,#0FFH 
NOP
NOP
MOV A,B
SWAP A 
ORL A,#07H
MOV P1,A
MOV A,P3
ANL A,#07H
ORL A,#DPM0
MOV P3,A
ACALL DSPDEL
MOV C,P3.7 
JC NP3
MOV KEYCODE,#06H 
NOP 
NP3: MOV P1,#0F7H 
NOP
INC R1
MOV A,@R1 
MOV B,#0AH 
DIV AB 
SWAP A 
JNZ DISPLY1
MOV A,#0FFH
DISPLY1:ORL A,#0FH
MOV P1,A
MOV A,P3
ANL A,#07H
ORL A,#DPH1
MOV P3,A
ACALL DSPDEL
NOP
MOV A,B
SWAP A 
ORL A,#07H
MOV P1,A
MOV A,P3
ANL A,#07H
ORL A,#DPH0
MOV P3,A
ACALL DSPDEL
MOV C,P3.7 
JC NP4
MOV KEYCODE,#02H 
NOP
NP4: MOV P1,#0F7H 
NOP
RET


DSPDEL: MOV R7,#0FFH 
DJNZ R7,$
RET
;************ 比较设定值 *****************

COMP: NOP
YY1_1: CLR C
MOV R0,#K1ON
NOP
NOP
ACALL COMP1
MOV A,CCB
JZ YY1_2 
MOV A,P3 
ORL A,#01H 
MOV P3,A
YY1_2: CLR C
MOV R0,#K1OFF
NOP
NOP
ACALL COMP1
MOV A,CCB
JZ YY2_1 
MOV A,P3
ANL A,#0FEH 
MOV P3,A
YY2_1: CLR C
MOV R0,#K2ON
NOP
NOP
ACALL COMP1
MOV A,CCB
JZ YY2_2 
MOV A,P3
ORL A,#02H 
MOV P3,A
YY2_2: CLR C
MOV R0,#K2OFF
NOP
NOP
ACALL COMP1
MOV A,CCB
JZ YY3_1 
MOV A,P3
ANL A,#0FDH 
MOV P3,A
YY3_1: CLR C
MOV R0,#K3ON
NOP
NOP
ACALL COMP1
MOV A,CCB
JZ YY3_2 
MOV A,P3
ORL A,#04H 
MOV P3,A
YY3_2: CLR C
MOV R0,#K3OFF
NOP
NOP
ACALL COMP1
MOV A,CCB
JZ YY4 
MOV A,P3
ANL A,#0FBH 
MOV P3,A
NOP
NOP
YY4: RET

COMP1: CLR C
MOV A,R0 
ADD A,#02H 
MOV R0,A 
MOV A,TH
SUBB A,@R0
JNZ COMP2 
CLR C 
MOV A,TM
DEC R0 
SUBB A,@R0
JNZ COMP2 
CLR C 
MOV A,TS
DEC R0 
SUBB A,@R0
JNZ COMP2 
MOV CCB,#01H 
MOV @R0,#OFF 
INC R0
MOV @R0,#OFF
INC R0
MOV @R0,#OFF
SJMP COMP3
COMP2: MOV CCB,#00H 
COMP3: RET


END

⌨️ 快捷键说明

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