倒数定时器课程设计
功能说明:倒数定时器基本功能如下: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.按键控制
程序如下:LO EQU 24;定时器0计时中断低字节
HI EQU 99;定时器0计时中断高字节
CO EQU 200
;-----------------------------------------------
RY1 EQU P3.7
ALB EQU 20H.0;定时设置标志
BUF EQU 30H;30H~33H连续4字节存放七段显示器数据
HOUR EQU 34H;存放小时变量
MIN EQU 35H;存放分钟变量
SEC EQU 36H;存放秒钟变量
DEDA EQU 37H;5ms计数值
SECO EQU 38H;存放旧的秒数
HH EQU 39H;定时1小时变量
MM EQU 3AH;定时1分钟变量
HHS EQU 3BH;定时2小时变量
MMS EQU 3CH;定时2分钟变量
;-----------------------------------------------
K1 EQU P3.4;按键1引脚定义
K2 EQU P3.5;按键2引脚定义
RY1 EQU p3.7;继电器控制引脚
ORG 0000H;程序代码由地址0开始执行
JMP BEGIN
ORG 0BH;定时器0中断地址设置
JMP T0_INT
;-----------------------------------------------
BEGIN:
CLR RY1
MOV HH,#8;内定时间为12点
MOV MM,#0
MOV HHS,#22
MOV MMS,#0
CALL INIT;初始化变量
CALL INIT_TIMER;初始化定时器
;-----------------------------------------------
LOOP;无穷循环
CALL TIME_PRO;时间计时处理
CALL SCAN1;扫描显示器
;-----------------------------------------------
JB K1 M1;未按下K1则继续扫描
JNB K1,$
;K1按下-----------------------------------------
CALL SET_TIME;设置目前时间
JMP LOOP
;-----------------------------------------------
M1:JB K2,LOOP; 未按下K2则继续扫描
JNB K2,LOOP
;K2按下----------------------------------------
CALL SET_ATIME;设置定时时间
JMP LOOP
;延时子程序-------------------------------------
DELAY:;总延时R5*10ms
MOV R6,#50
D1:MOV R7,#100
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,DELAY
RET
;短暂延时子程序---------------------------------
DELAY1:;控制七段显示器延迟时间
MOV R6,#1
D2:MOV R7,#100
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,DELAY1
RET
;七段显示器字型数据-----------------------------
TLBLE:
DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
DB 77H,7CH,58H,5EH,79H
DB 71H
;-----------------------------------------------
SCAN1:
MOV R0,#BUF;指向显示器显示缓冲起始地址
MOV R2,#4;循环4次
MOV ACC,#0FEH;加载扫描输出信号初值
S1:
PUSH ACC
MOV A,@R0;取出七段显示器数据
MOV P1,ACC;由P1口送出七段显示器数据
POP ACC
MOV P3,ACC;由P3口送出扫描输出信号
MOV R5,#5;延时
CALL DELAY1
;改变扫描码 EX:XXXX1101
RL A;累加器左移一位
INC R0;显示器显示缓冲区地址加1
DJNZ R2,S1;循环判断是否继续
RET
;-----------------------------------------------
INIT:;初始化控制变量
MOV DEDA,#0;5ms计数值清0
MOV SECO,#0;旧秒数清0
MOV SEC,#0;秒钟变量清0
MOV MIN,#0;分钟变量清0
MOV HOUR,#12;时钟变量显示12
RET
;-----------------------------------------------
INIT_TIMER:;初始化定时器接口,使用定时器0模式0计时
MOV TMOD,#00H;设置定时器0工作模式为模式0
MOV IE,#10000010B;启用定时器0中断产生
MOV TL0,#LO;加载低字节
MOV TH0,#HI;加载高字节
SETB TR0;启用定时器0开始计时
RET
;-----------------------------------------------
T0_INT:;定时器0计时中断程序每隔5ms中断一次
PUSH ACC;将累加器放入堆栈
MOV TL0,#LO;加载低字节
MOV TH0,#HI;加载高字节
INC DEDA;5ms计数加1
MOV A,DEDA
CJNE A,#CO,TT1;是否1s到了?
MOV DEDA,#0;计数值清0
INC SEC
MOV A,SEC
CJNE A,#60,TT1;是否1min到了?
MOV SEC,#0;计秒数值清0
INC MIN
MOV A,MIN
CJNE A,#60,TT1;是否1h到了?
MOV MIN,#0;计分数值清0
INC HOUR
MOV A,HOUR
CJNE A,#24,TT1;是否24h到了?
MOV SEC,#0;计秒数值清0
MOV MIN,#0;计分数值清0
MOV HOUR,#0;计时数值清0
TT1:
POP ACC;将累加器由堆栈取出
RETI
;转换小时分钟数据-------------------------------
CONV:
MOV A,HOUR
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV BUF,A
MOV A,B
MOVC A,#A+DPTR
MOV BUF+1,A
MOV A,MIN
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV BUF+2,A
MOV A,B
MOVC A,#A+DPTR
MOV BUF+3,A
RET
;-----------------------------------------------
SET_TIME:
CALL CONV
CALL SCAN1
JB K1,X1
JNB K1,$
JMP LOOK_ATIME
X1:
JB K2,X2
JNB K2,$
CLR TR0;定时器动作暂停
MOV SEC,#0;秒钟数清0
L0:
CALL SCAN1;扫描显示器
JB K1,L1;未按下K1则继续扫描
INC HOUR
MOV A,HOUR
CJNE A,#24,L11
MOV HOUR,#0
L11:
CALL CONV
CALL SCANS
JMP L0
L1:
JB K2,L0;未按下K2则继续扫描
JNB K2,$
L2:
CALL SCAN1;扫描显示器
JB K1,L3;未按下K1则继续扫描
INC MIN
MOV A,MIN
CJNE A,#60,L21
MOV MIN,#0
L21:
CALL CONV
CALL SCANS
L3:JB K2,L2;未按下K2则继续扫描
JNB K2,$
SETB TR0
[1] [2] 下一页
本文关键字:课程 自动控制-单片机,电子制作 - 自动控制-单片机