E32_433开发板程序
This commit is contained in:
122
Core/Src/key.c
Normal file
122
Core/Src/key.c
Normal file
@ -0,0 +1,122 @@
|
||||
#include "main.h"
|
||||
|
||||
#define KEY_SHORT_PRESS_TIME_MS 100
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t count ;
|
||||
bool continue_enable;
|
||||
bool is_press;
|
||||
bool is_continue;
|
||||
}key_config_t;
|
||||
|
||||
static key_config_t key_group[3] =
|
||||
{
|
||||
[ KEY_NAME_UP ] = {
|
||||
.count = 0,
|
||||
.is_press = 0,
|
||||
.continue_enable = false,
|
||||
.is_continue = false,
|
||||
},
|
||||
|
||||
[ KEY_NAME_DOWN ] = {
|
||||
.count = 0,
|
||||
.is_press = 0,
|
||||
.continue_enable = false,
|
||||
.is_continue = false,
|
||||
},
|
||||
|
||||
[ KEY_NAME_ENTER ] = {
|
||||
.count = 0,
|
||||
.is_press = 0,
|
||||
.continue_enable = false,
|
||||
.is_continue = false,
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
bool key_check_press( key_name_t name )
|
||||
{
|
||||
bool ret = false;
|
||||
|
||||
/* <20>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ״̬ */
|
||||
ret = key_group[name].is_press;
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>flash<73><68><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>δ<EFBFBD><CEB4><EFBFBD> */
|
||||
key_group[name].is_press = false;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void key_set_continue( key_name_t name , bool enable )
|
||||
{
|
||||
key_group[name].continue_enable = enable;
|
||||
}
|
||||
|
||||
static inline void key_press( key_name_t name )
|
||||
{
|
||||
key_group[name].count ++;
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD><CCB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʱ<EFBFBD><CAB1> */
|
||||
if( key_group[name].count > KEY_SHORT_PRESS_TIME_MS )
|
||||
{
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
|
||||
if( key_group[name].continue_enable == false )
|
||||
{
|
||||
/* <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD>ζ̰<CEB6><CCB0>´<EFBFBD><C2B4><EFBFBD><EFBFBD>ж<EFBFBD> */
|
||||
if( key_group[name].is_continue == false )
|
||||
{
|
||||
/* <20><>ֹ<EFBFBD>´δ<C2B4><CEB4><EFBFBD> ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD> <20><><EFBFBD><EFBFBD>false*/
|
||||
key_group[name].is_continue = true;
|
||||
/* <20><>һ<EFBFBD>θ<EFBFBD><CEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ʶ */
|
||||
key_group[name].is_press = true;
|
||||
}
|
||||
}
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
|
||||
else
|
||||
{
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ʶ */
|
||||
key_group[name].is_press = true;
|
||||
/* <20><><EFBFBD>¼<EFBFBD>ʱ */
|
||||
key_group[name].count = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static inline void key_release( key_name_t name )
|
||||
{
|
||||
key_group[ name ].count = 0;
|
||||
key_group[ name ].is_continue = false;
|
||||
}
|
||||
|
||||
|
||||
void key_timer_1ms_interrupt_callback(void)
|
||||
{
|
||||
if( HAL_GPIO_ReadPin( KEY_UP_GPIO_Port, KEY_UP_Pin ) == RESET )
|
||||
{
|
||||
key_press( KEY_NAME_UP );
|
||||
}
|
||||
else
|
||||
{
|
||||
key_release( KEY_NAME_UP );
|
||||
}
|
||||
|
||||
if( HAL_GPIO_ReadPin( KEY_DOWN_GPIO_Port, KEY_DOWN_Pin ) == RESET )
|
||||
{
|
||||
key_press( KEY_NAME_DOWN );
|
||||
}
|
||||
else
|
||||
{
|
||||
key_release( KEY_NAME_DOWN );
|
||||
}
|
||||
|
||||
if( HAL_GPIO_ReadPin( KEY_ENTER_GPIO_Port, KEY_ENTER_Pin ) == RESET )
|
||||
{
|
||||
key_press( KEY_NAME_ENTER );
|
||||
}
|
||||
else
|
||||
{
|
||||
key_release( KEY_NAME_ENTER );
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user