📄 timer.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 + -