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

📄 timer.c

📁 使用Mega128单片机编写的液晶、串口、菜单的C程序。
💻 C
字号:

#include <macros.h>
#include "stdtypes.h"
#include "key.h"
#include "port.h"
#include "timer.h"



enum
{ 
 KEY_STATUS_IDLE, 
 KEY_STATUS_DOWN
} key_status;

UNS8 time_couter;

//TIMER0 initialize - prescale:1024
// WGM: Normal
// desired value: 10mSec
// actual value:  9.861mSec (1.4%)
void timer0_init(void)
{
 TCCR0 = 0x00; //stop
 ASSR  = 0x00; //set async mode
 TCNT0 = SET_COUNT; //set count
 TCCR0 = 0x07; //start timer
 TIMSK = TIMSK | (1 << TOIE0);
 
 key_status=KEY_STATUS_IDLE;

}

#pragma interrupt_handler timer0_ovf_isr:17
void timer0_ovf_isr(void)
{

UNS8 keyvalue;


  keyvalue=key_read();
  TCNT0 = SET_COUNT;
  
/*read the key value*/
  if (keyvalue)
  {
    key_read_temp = keyvalue;
    up_cnt = 0;
	
   /*key value sample step2*/
    if(key_status == KEY_STATUS_IDLE)
    {
      key_status = KEY_STATUS_DOWN;   
    }
    else
    {
      if(down_cnt < 0xFFFF)
      {
        down_cnt ++;
        if ((down_cnt != 0) && (down_cnt % 10 == 0))/*press the long time*/
        {
          g_ReceiveKeyFlag = 1;
          g_KeyValue = key_read();
        }
      }
    }
  }
  else
  {
    if(key_status == KEY_STATUS_DOWN)
    {
      if (up_cnt >= 5)
      {
        if ((down_cnt >= 5) && (down_cnt <= 10))
        {
          g_ReceiveKeyFlag = 1;
          g_KeyValue = key_read_temp;      
        }      
        down_cnt = 0;
        up_cnt = 0;
        key_status = KEY_STATUS_IDLE;
	  }
      else
      {
        up_cnt ++;/*key value sample step3*/
      }
    }
    else
    { /*key value sample step1*/
      key_status = KEY_STATUS_IDLE;
    }
  }  
}  
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -