想做按键长按功能,想法是按键按下后记录时间按键松开后再触发一次中断再次记录时间计算时间差,
现在问题是下降沿可以触发,上升沿无法触发
static void zclSampleSw_HandleKeys( byte shift, byte keys )
{
if(keys & HAL_KEY_SW_6){
key(keys);
}
}
static void key(byte keys){
static uint32 keyPressTime = 0;
if(PICTL & 1){//下降沿触发,按键按下
HAL_KEY_starting_time = osal_getClock();//获取当前系统时间
}else{//上升沿触发,按键抬起
keyPressTime = ( osal_getClock() - HAL_KEY_starting_time );//计算按下时间
if(keyPressTime<=KEY_HOLD_SHORT_INTERVAL){//计算出时间小于预设时间(短按)
printf("short\r\n");
}else if(keyPressTime>KEY_HOLD_LONG_INTERVAL && keyPressTime<KEY_HOLD_LONG_LONG_INTERVAL){//计算出时间处于两个预设值之间,执行相应功能
HalLedBlink(HAL_LED_1,10,50,1000);
printf("long\r\n");
}else if(keyPressTime>KEY_HOLD_LONG_LONG_INTERVAL){//大于预设值
}
}
PICTL^=1;
}