③判断是否符合短按要求 ( A0_state==0 && A0_last_state==0) ,TIMx->CNT <10000

7.让原来的初始值变为末尾值( A0_last_state=A0_state )

HAL_TIM_Base_Start(&htimx);

uint8_t A0_State;
uint8_t A0_Last_State=1;
uint8_t B0_State;
uint8_t B0_Last_State=1;
uint8_t B1_State;
uint8_t B1_Last_State=1;
uint8_t B2_State;
uint8_t B2_Last_State=1;
void key_scan(){
  A0_State=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
  B0_State=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);
  B1_State=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);
  B2_State=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);

  if(A0_State==0 && A0_Last_State==1){
    TIMx->CNT=0;
  }
  else if(A0_State==0 && A0_Last_State==0){
    if(TIMx->CNT>=1000){
      //长按按键
    }
  }
  else if(A0_State==1 && A0_Last_State==0){
    if(TIMx->CNT<1000){
      //短按按键
    }
  }


  A0_Last_State=A0_State;
  B0_Last_State=B0_State;
  B1_Last_State=B1_State;
  B2_Last_State=B2_State;
}

更多推荐