如何检查按钮是否在 500 毫秒内被按下两次(PIC16)?

How to check if a button is pressed twice within 500 ms (PIC16)?

我有一个连接到 RB1 的开关按钮。此按钮用作重置,但需要按两次才能起作用。如果第二次按下发生在 500 毫秒后(相对于第一次按下),它将不执行任何操作。

我想我应该使用计时器或 ccp 模块,但我不确定如何实现它们。你有什么建议?

编辑(我的 ISR):

void interrupt ISR(void){
    GIE = 0;
    if(INTF){
        INTF = 0;
        if(reset_press == 0){
            TMR1 = 0x0BDC;              // counter starts counting at 0x0BDC (3036)
            TMR1ON = 1;                 // Turns on Timer1 (T1CON reg)
        }
        reset_press++;
    }
    else if(TMR1IF==1){                 // checks Timer1 interrupt flag 
        TMR1IF = 0;                     // clears interrupt flag
        if(reset_press == 2){
            reset_count();              // reset function
        }
        TMR1ON = 0;                     // Turns off Timer1 (T1CON reg)
        reset_press = 0; 
    }
    GIE = 1;
}
  • 在初始化时将定时器或 CCP 设置一次 500 毫秒,但不要触发它。 (根据 osc 频率,您可能必须使用额外的字节来保存对应于 500ms 的值)。
  • 进入main的superloop后,检测按键按下;使用标志或计数器来计算按钮按下的次数。一旦检测到第一次按下,启动 500 毫秒计时器。
  • 如果500ms的时间又过去了(你可以在中断中检测到),那意味着你什么都不做,所以重新设置一切;按钮按下计数器、发射计时器等
  • 同时在500ms没有重复之前,如果检测到二次按下;那就是按下计数器的值必须是 2,然后你执行你想要的,然后为下一次两次按钮按下检测重置所有内容。