您的位置:首页技术文栏毕业课程设计
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

倒计时课程设计

[日期:2008-03-23 ] [来源:net 作者:佚名] [字体: (投递新闻)
倒数定时器课程设计

功能说明:

倒数定时器基本功能如下:
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
   JMP LOOP
X2:JMP SET_TIME
;-----------------------------------------------
SCANS:;扫描七段显示器
   MOV R4,#55
SS:
   CALL SCAN1
   DJNZ R4,SS
   RET
;-----------------------------------------------
TIME_OUT:
   SETB RY1
   RET
;-----------------------------------------------
TIME_OUT2:
    CLR RY1
    RET
;-----------------------------------------------
LOOK_ATIME:
  CALL CONVA

   MOV B,#0
LO1:CALL SCAN1
   DJNZ B,LO1

   CALL CONVB
   MOV B,#0
LO2:CALL SCAN1
   DJNZ B,LO2

   CALL CONV
   RET
;-----------------------------------------------
CONVA:
   MOV A,HH
   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,MM
   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 
;-----------------------------------------------
CONVB:
   MOV A,HHS
   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,MMS
   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_ATIME:;设置定时时间

   CALL CONVA
   CALL SCAN1
   JB K1,V1
   JNB K1,$
   CALL SET_BTIME
V1:
   JB K2,V2
   JNB K2,$
N0:
   CALL SCAN1
   JB K1,N1
   INC HH
   MOV A,HH
   CJNE A,#24,N11
   MOV HH,#0
N11:
   CALL CONVA
   CALL SCANS
   JMP N0
N1:
   JB K2,N0
   JNB K2,$

N2:
   CALL SCAN1
   JB K1,N3
   INC MM
   MOV A,MM
   CJNE A,#60,N21
   MOV MM,#0
N21:
   CALL CONVA
   CALL SCANS
   JMP N2

N3:  
   JB K2,N2
   JNB K2,$

;-----------------------------------------------
   CALL CONVB
N4:
   CALL SCAN1
   JB K1,N5
   INC HHS
   MOV A,HHS
   CJNE A,#24,N51
   MOV HHS,#0
N51:
   CALL CONVB
   CALL SCANS
   JMP N4

N5: 
   JB K2,N4
   JNB K2,$

N6:
   CALL SCAN1
   JB K1,N7
   INC MMS
   MOV A,MMS
   CJNE A,#60,N61
   MOV MMS,#0
N61:
   CALL CONVB
   CALL SCANS
   JMP N6
N7:
  JB K2,N6
  JNB K2,$
  CALL CONV
  RET  
;-----------------------------------------------
SET_BTIME:
   JB K1,B1
   JNB K1,$
   CPL ALB
   JMP LOOP 
B1:JB K2,B2
   JNB K2,$
   JMP LOOP
B2:JMP SET_BTIME

;-----------------------------------------------
TIME_PRO:
   MOV A,SEC
   MOV B,SEC0
   CJNE A,B,TI1
   JMP TI2
TI1:
   CALL CONV
   MOV SEC0,SEC
TI2:
   JB ALB, TI3
   JB ALB, T14
   RET
TI3:
   MOV A,HOUR
   MOV B,HH
   CJNE A,B,BK
   
   MOV A,MIN
   MOV B,MM
   CJNE A,B,BK
   CALL TIME_OUT
BK:RET
;-----------------------------------------------
TI4:
   MOV A,HOUR
   MOV B,HHS
   CJNE A,B,BK
   
   MOV A,MIN
   MOV B,MMS
   CJNE A,B,BK1
   CALL TIME_OUT
BK1:
   RET
END
阅读:
录入:petta

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
赞助商广告