AVRX_GCC_TASKDEF(KeyTask, 128, 3)
{
TimerControlBlock delaytimer;
unsigned char KeyValue,KeyValueOld,FilterCounter,LongFilterCounter;
KEY_UP_PORT &= ~KEY_UP_BIT;
KEY_UP_DDR &= ~KEY_UP_BIT;
KEY_DOWN_PORT &= ~KEY_DOWN_BIT;
KEY_DOWN_PORT &= ~KEY_DOWN_BIT;
AvrXDelay(&delaytimer, 1000);
while(1)
{
AvrXDelay(&delaytimer, 5);
KeyValue = ((~KEY_PIN) & KEY_MASK);
if(KeyValue != 0) //有键值
{
if(KeyValue == KeyValueOld) //与旧键值相同
{
if(LongFilterCounter != 0) //已经启用长按去抖
{
LongFilterCounter ++;
if(LongFilterCounter >= 10) BELL_OFF;
if(LongFilterCounter >= 160)
{
// SpeedSetValue++; //长按键运行函数
LongKeyFun(KeyValue);
LongFilterCounter = 157;
}
}
else //没启用长按去抖
{
FilterCounter++; //去抖计数器+1
// BELL_ON;
if(FilterCounter >= 100)
{
BELL_ON;
// SpeedSetValue ++; //短按键运行函数
KeyFun(KeyValue);
LongFilterCounter = 1;
}
}
}
else
{
BELL_OFF;
KeyValueOld = KeyValue;
FilterCounter = 0;
LongFilterCounter = 0;
}
}
else
{
BELL_OFF;
KeyValueOld = KeyValue;
LongFilterCounter = 0;
FilterCounter = 0;
}
}
}
我写的 AVRX的KEY任务 短按键延时 长按键延时 长按键之间缩短延时
|