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

📄 timer.c

📁 会议计时器
💻 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 + -