基于STM32按键的防抖和松开处理:状态机( 二 )


Key1、Key2、Key3的原理同上 。
然后就去处理按键
if(Key_up.eKeyStatus==KEY_PRESSED){HAL_UART_Transmit(&huart2, (uint8_t *)"Key_up", 6, 0xFFFF);Key_up.eKeyStatus=KEY_PROCESSED;}if(Key0.eKeyStatus==KEY_PRESSED){HAL_UART_Transmit(&huart2, (uint8_t *)"Key0", 4, 0xFFFF);Key0.eKeyStatus=KEY_PROCESSED;}if(Key1.eKeyStatus==KEY_PRESSED){HAL_UART_Transmit(&huart2, (uint8_t *)"Key1", 4, 0xFFFF);Key1.eKeyStatus=KEY_PROCESSED;}if(Key2.eKeyStatus==KEY_PRESSED){HAL_UART_Transmit(&huart2, (uint8_t *)"Key2", 4, 0xFFFF);Key2.eKeyStatus=KEY_PROCESSED;}
这里当检测到按键按下时,向串口发送其按键的名字,然后将按键标记为处理过的按键 。
当然可能有些朋友觉得这样有点烦,假如我要从0加到100(假设就一个按键),就得按100下,那就是需要连续响应,这里只需你在处理完按键,将标记为处理过的按键步骤改为将清0然后,标记按键为释放 。这样你一直按着就会不断的去响应,清0 主要起一个延时的作用,不然响应太快!
if(Key_up.eKeyStatus==KEY_PRESSED){test++;HAL_UART_Transmit(&huart2, (uint8_t *)&test, 1, 0xFFFF);Key_up.byCounter=0;Key_up.eKeyStatus=KEY_RELEASED;}
采用在这种机制,当按键一直在按下状态,也不会影响其他按键的操作 。