工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

倒计时课程设计

发布人:沉默的offer 时间:2018-08-07 收藏
倒数定时器课程设计功能说明:
倒数定时器基本功能如下:
1.七段LED显示器来显示目前倒数时间,显示格式为“分分:秒秒”;
2.具有2个按键操作来设置现在想要倒数的时间,中途可作调整;
3.开始倒数计时结束后,继电器会做出相应判断。
4.重置后内定倒数时间为1min,显示“01:00”。
操作键动作如下:

1.操作键K1:可调整1min~99min及停止或中途调整定时;
2.操作键K2:设置倒数为调整分钟的十位还是个位及确认设置完成。
具体操作:1.复位后,按K1暂停定时,同时秒数为“1”;
2.按K1调整倒数定时器分钟的十位数,按K2调整结束;
3.再按K1调整倒数定时器分钟的个位数,按K2确认设置完成;
4.如需再次调整可重复1~3步骤,但无需复位。
倒数定时器的控制电路分为以下几部分:
1.单片机2051
2.七段LED显示器
3.按键控制

程序如下:
LOEQU24;定时器0计时中断低字节
HIEQU99;定时器0计时中断高字节
COEQU200
;-----------------------------------------------
RY1EQUP3.7
ALBEQU20H.0;定时设置标志
BUFEQU30H;30H~33H连续4字节存放七段显示器数据
HOUREQU34H;存放小时变量
MINEQU35H;存放分钟变量
SECEQU36H;存放秒钟变量
DEDAEQU37H;5ms计数值
SECOEQU38H;存放旧的秒数
HHEQU39H;定时1小时变量
MMEQU3AH;定时1分钟变量
HHSEQU3BH;定时2小时变量
MMSEQU3CH;定时2分钟变量
;-----------------------------------------------
K1EQUP3.4;按键1引脚定义
K2EQUP3.5;按键2引脚定义
RY1EQUp3.7;继电器控制引脚ORG0000H;程序代码由地址0开始执行
JMPBEGIN
ORG0BH;定时器0中断地址设置
JMPT0_INT
;-----------------------------------------------
BEGIN:
CLRRY1
MOVHH,#8;内定时间为12点
MOVMM,#0
MOVHHS,#22
MOVMMS,#0CALLINIT;初始化变量
CALLINIT_TIMER;初始化定时器
;-----------------------------------------------
LOOP;无穷循环
CALLTIME_PRO;时间计时处理
CALLSCAN1;扫描显示器
;-----------------------------------------------
JBK1M1;未按下K1则继续扫描
JNBK1,$
;K1按下-----------------------------------------
CALLSET_TIME;设置目前时间
JMPLOOP
;-----------------------------------------------
M1:JBK2,LOOP;未按下K2则继续扫描
JNBK2,LOOP
;K2按下----------------------------------------
CALLSET_ATIME;设置定时时间
JMPLOOP
;延时子程序-------------------------------------
DELAY:;总延时R5*10ms
MOVR6,#50
D1:MOVR7,#100
DJNZR7,$
DJNZR6,D1
DJNZR5,DELAY
RET
;短暂延时子程序---------------------------------
DELAY1:;控制七段显示器延迟时间
MOVR6,#1
D2:MOVR7,#100
DJNZR7,$
DJNZR6,D1
DJNZR5,DELAY1
RET
;七段显示器字型数据-----------------------------
TLBLE:
DB3FH,06H,5BH,4FH,66H
DB6DH,7DH,07H,7FH,6FH
DB77H,7CH,58H,5EH,79H
DB71H
;-----------------------------------------------
SCAN1:
MOVR0,#BUF;指向显示器显示缓冲起始地址
MOVR2,#4;循环4次
MOVACC,#0FEH;加载扫描输出信号初值
S1:
PUSHACC
MOVA,@R0;取出七段显示器数据
MOVP1,ACC;由P1口送出七段显示器数据POPACC
MOVP3,ACC;由P3口送出扫描输出信号MOVR5,#5;延时
CALLDELAY1;改变扫描码EX:XXXX1101
RLA;累加器左移一位
INCR0;显示器显示缓冲区地址加1
DJNZR2,S1;循环判断是否继续
RET;-----------------------------------------------
INIT:;初始化控制变量
MOVDEDA,#0;5ms计数值清0
MOVSECO,#0;旧秒数清0
MOVSEC,#0;秒钟变量清0
MOVMIN,#0;分钟变量清0
MOVHOUR,#12;时钟变量显示12
RET
;-----------------------------------------------
INIT_TIMER:;初始化定时器接口,使用定时器0模式0计时
MOVTMOD,#00H;设置定时器0工作模式为模式0
MOVIE,#10000010B;启用定时器0中断产生
MOVTL0,#LO;加载低字节
MOVTH0,#HI;加载高字节
SETBTR0;启用定时器0开始计时
RET
;-----------------------------------------------
T0_INT:;定时器0计时中断程序每隔5ms中断一次
PUSHACC;将累加器放入堆栈
MOVTL0,#LO;加载低字节
MOVTH0,#HI;加载高字节
INCDEDA;5ms计数加1MOVA,DEDA
CJNEA,#CO,TT1;是否1s到了?
MOVDEDA,#0;计数值清0
INCSECMOVA,SEC
CJNEA,#60,TT1;是否1min到了?
MOVSEC,#0;计秒数值清0
INCMINMOVA,MIN
CJNEA,#60,TT1;是否1h到了?
MOVMIN,#0;计分数值清0
INCHOURMOVA,HOUR
CJNEA,#24,TT1;是否24h到了?
MOVSEC,#0;计秒数值清0
MOVMIN,#0;计分数值清0
MOVHOUR,#0;计时数值清0TT1:
POPACC;将累加器由堆栈取出
RETI;转换小时分钟数据-------------------------------
CONV:
MOVA,HOUR
MOVB,#10
DIVAB

MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVBUF,AMOVA,B
MOVCA,#A+DPTR
MOVBUF+1,AMOVA,MIN
MOVB,#10
DIVAB

MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVBUF+2,AMOVA,B
MOVCA,#A+DPTR
MOVBUF+3,A
RET
;-----------------------------------------------
SET_TIME:
CALLCONV
CALLSCAN1
JBK1,X1
JNBK1,$
JMPLOOK_ATIME
X1:
JBK2,X2
JNBK2,$
CLRTR0;定时器动作暂停
MOVSEC,#0;秒钟数清0
L0:
CALLSCAN1;扫描显示器
JBK1,L1;未按下K1则继续扫描
INCHOUR
MOVA,HOUR
CJNEA,#24,L11
MOVHOUR,#0

L11:
CALLCONV
CALLSCANS
JMPL0L1:
JBK2,L0;未按下K2则继续扫描
JNBK2,$
L2:
CALLSCAN1;扫描显示器
JBK1,L3;未按下K1则继续扫描
INCMIN
MOVA,MIN
CJNEA,#60,L21
MOVMIN,#0
L21:
CALLCONV
CALLSCANSL3:JBK2,L2;未按下K2则继续扫描
JNBK2,$
SETBTR0
JMPLOOP
X2:JMPSET_TIME
;-----------------------------------------------
SCANS:;扫描七段显示器
MOVR4,#55
SS:
CALLSCAN1
DJNZR4,SS
RET
;-----------------------------------------------
TIME_OUT:
SETBRY1
RET
;-----------------------------------------------
TIME_OUT2:
CLRRY1
RET
;-----------------------------------------------
LOOK_ATIME:
CALLCONVAMOVB,#0
LO1:CALLSCAN1
DJNZB,LO1CALLCONVB
MOVB,#0
LO2:CALLSCAN1
DJNZB,LO2CALLCONV
RET
;-----------------------------------------------
CONVA:
MOVA,HH
MOVB,#10
DIVAB

MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVBUF,AMOVA,B
MOVCA,#A+DPTR
MOVBUF+1,AMOVA,MM
MOVB,#10
DIVAB

MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVBUF+2,AMOVA,B
MOVCA,#A+DPTR
MOVBUF+3,A
RET
;-----------------------------------------------
CONVB:
MOVA,HHS
MOVB,#10
DIVAB

MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVBUF,AMOVA,B
MOVCA,#A+DPTR
MOVBUF+1,AMOVA,MMS
MOVB,#10
DIVAB

MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVBUF+2,A

MOVA,B
MOVCA,#A+DPTR
MOVBUF+3,A
RET
;-----------------------------------------------
SET_ATIME:;设置定时时间CALLCONVA
CALLSCAN1
JBK1,V1
JNBK1,$
CALLSET_BTIME
V1:
JBK2,V2
JNBK2,$
N0:
CALLSCAN1
JBK1,N1
INCHH
MOVA,HH
CJNEA,#24,N11
MOVHH,#0
N11:
CALLCONVA
CALLSCANS
JMPN0
N1:
JBK2,N0
JNBK2,$N2:
CALLSCAN1
JBK1,N3
INCMM
MOVA,MM
CJNEA,#60,N21
MOVMM,#0
N21:
CALLCONVA
CALLSCANS
JMPN2N3:
JBK2,N2
JNBK2,$;-----------------------------------------------
CALLCONVB
N4:
CALLSCAN1
JBK1,N5
INCHHS
MOVA,HHS
CJNEA,#24,N51
MOVHHS,#0
N51:
CALLCONVB
CALLSCANS
JMPN4N5:
JBK2,N4
JNBK2,$N6:
CALLSCAN1
JBK1,N7
INCMMS
MOVA,MMS
CJNEA,#60,N61
MOVMMS,#0
N61:
CALLCONVB
CALLSCANS
JMPN6
N7:
JBK2,N6
JNBK2,$
CALLCONV
RET
;-----------------------------------------------
SET_BTIME:
JBK1,B1
JNBK1,$
CPLALB
JMPLOOP
B1:JBK2,B2
JNBK2,$
JMPLOOP
B2:JMPSET_BTIME;-----------------------------------------------
TIME_PRO:
MOVA,SEC
MOVB,SEC0
CJNEA,B,TI1
JMPTI2
TI1:
CALLCONV
MOVSEC0,SEC
TI2:
JBALB,TI3
JBALB,T14
RET
TI3:
MOVA,HOUR
MOVB,HH
CJNEA,B,BK

MOVA,MIN
MOVB,MM
CJNEA,B,BK
CALLTIME_OUT
BK:RET
;-----------------------------------------------
TI4:
MOVA,HOUR
MOVB,HHS
CJNEA,B,BK

MOVA,MIN
MOVB,MMS
CJNEA,B,BK1
CALLTIME_OUT
BK1:
RET
END

关键词:

评论

技术专区