📄 timer.c
字号:
#include "timer.h"
#include "main.h"
#include "keyboard.h"
#include "led.h"
unsigned char display_buffer[4]; //显示缓冲区,共4位
unsigned char minute=0; //定义默认定时时间
unsigned char second=0;
unsigned char setminute=0,setsecond=20; //设置定时时间
unsigned char n_50m_second; //保存多少个50毫秒的变量
unsigned char coming1=15; //15秒灯光提示
unsigned char coming2=3; // 3秒声音提示
bit beepcome=0; //到时标记位
//unsigned char flicker_time=0; //闪烁频率
//unsigned char display_on=1; //显示开关标志。用来产生闪烁效果
unsigned int status=1; //状态值 1 设置 ; 2 计时
unsigned int alarmtime1=0,alarmtime2=0;
unsigned int alarmspeed=300;
void timer0_isr(void) interrupt 1 using 1 //定时器0中断处理倒计时函数
{
TL0=0xB9;
TH0=0x3C; //定时器重装。定时50mS中断一次
n_50m_second++;
if (n_50m_second>=20) //1秒到
{
n_50m_second=0; //清50毫秒计数
second--; //秒减1
if(second==0xff) //如果秒到00
{
second=59; //秒变59秒
minute--; //分减1
if(minute==0xff) //如果分到00
{
minute=0; //分清0
second=0;
beepcome=1; //标记beepcome
TR0=0;
EA=0; //取消计时中断
}
}
}
}
void timer(void)
{
if (minute ==0 && second<=coming1 && TR0==1) //开始灯光提示
{
alarmtime1+=10;
if (alarmtime1>=alarmspeed) {P0_0=~P0_0;alarmtime1=0;alarmspeed-=2;} //蜂鸣器,LED切换
if (minute ==0 && second<=coming2 && TR0==1) //开始声音提示
{
alarmtime2+=10;
if (alarmtime2>=alarmspeed) {P0_1=~P0_1;alarmtime2=0; }
}
}
switch (status) //1为设置状态,2为计时状态
{
case 1: //============================设置状态===================================
{
if(key==KEY_START) //开始计时
{
minute=setminute; //载入设置时间
second=setsecond;
EA=1; //开始计时
TR0=1;
status=2; //进入计时状态
key=0;
}
if(key==KEY_MIN) //调整分功能
{
setminute++;
if (setminute>=100) setminute=0;
key=0;
}
if(key==KEY_SEC) //调整秒功能
{
setsecond++;
if (setsecond>=60) setsecond=0;
key=0;
}
if(key==KEY_RESET) //重置功能
{
key=0;
}
showset(); //调用显示设置函数
display(display_buffer); //显示结果
break;
}
case 2: //=======================计时状态=====================================
{
if(key==KEY_RESET) //如果设置键按下
{
status=1; //进入设置状态
key=0; //清键值
}
if(key==KEY_MIN) //调整分功能
{
key=0;
}
if(key==KEY_SEC) //调整秒功能
{
key=0;
}
if(key==KEY_START) // 转为暂停
{
TR0=~TR0; //暂停、启动计时器
key=0;
}
showtime(); //调用显示时间函数
display(display_buffer); //显示结果
break;
}
}
}
void showtime(void) //显示当前剩余时间
{
display_buffer[0]=second%10;
display_buffer[1]=second/10;
display_buffer[2]=minute%10;
display_buffer[3]=minute/10;
}
void showset(void) //显示当前设置时间
{
display_buffer[0]=setsecond%10;
display_buffer[1]=setsecond/10;
display_buffer[2]=setminute%10;
display_buffer[3]=setminute/10;
}
/*
void beeping(void)
{
if (beeptime>0)
{
P0_5=0;
P0_0=1;
beeptime--;
}
else
{
P0_5=1;
P0_0=0;
beepcome=0;
beeptime=20;
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -