2021-09-28 14:24:41 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD> FIFO <20><>
|
2021-08-04 10:46:24 +08:00
|
|
|
|
|
2021-09-28 14:24:41 +08:00
|
|
|
|
#include "adc.h"
|
2021-08-04 10:46:24 +08:00
|
|
|
|
|
|
|
|
|
|
#include "key.h"
|
|
|
|
|
|
|
2021-09-28 14:24:41 +08:00
|
|
|
|
#define DIGITAL_KEY_NUM 3 //<2F><><EFBFBD><EFBFBD><EFBFBD>źŰ<C5BA><C5B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
#define ADC_KEY_NUM 4 //ģ<><C4A3><EFBFBD>źŰ<C5BA><C5B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
#define KEY_COUNT (DIGITAL_KEY_NUM + ADC_KEY_NUM)
|
|
|
|
|
|
|
|
|
|
|
|
//ʹ<><CAB9> GPIO ʱ<><CAB1>
|
|
|
|
|
|
#define ALL_KEY_GPIO_CLK_ENABLE() \
|
|
|
|
|
|
{ \
|
|
|
|
|
|
__HAL_RCC_GPIOE_CLK_ENABLE(); \
|
|
|
|
|
|
__HAL_RCC_GPIOC_CLK_ENABLE(); \
|
|
|
|
|
|
__HAL_RCC_GPIOD_CLK_ENABLE(); \
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
|
{
|
|
|
|
|
|
GPIO_TypeDef *gpio;
|
|
|
|
|
|
uint16_t pin;
|
|
|
|
|
|
} X_GPIO_T;
|
|
|
|
|
|
|
|
|
|
|
|
static const X_GPIO_T s_gpio_list[DIGITAL_KEY_NUM] = {
|
|
|
|
|
|
{GPIOE, GPIO_PIN_3}, //KEY1
|
|
|
|
|
|
{GPIOC, GPIO_PIN_5}, //KEY2
|
|
|
|
|
|
{GPIOD, GPIO_PIN_10} //JOY_OK
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
static volatile KEY_T s_tBtn[KEY_COUNT] = {0};
|
|
|
|
|
|
static volatile KEY_FIFO_T s_tKey; //<2F><><EFBFBD><EFBFBD> FIFO <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
static volatile is_key_clear = 1;
|
|
|
|
|
|
|
|
|
|
|
|
static void InitKeyVar(void);
|
|
|
|
|
|
static void InitKeyDigital(void);
|
|
|
|
|
|
static void DetectKey(uint8_t i);
|
|
|
|
|
|
|
|
|
|
|
|
static uint8_t KeyPinActive(uint8_t _id)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_id < DIGITAL_KEY_NUM)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8_t level;
|
|
|
|
|
|
|
|
|
|
|
|
if ((s_gpio_list[_id].gpio->IDR & s_gpio_list[_id].pin) == 0)
|
|
|
|
|
|
return 1;
|
|
|
|
|
|
else
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (_id < DIGITAL_KEY_NUM + ADC_KEY_NUM)
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (_id)
|
|
|
|
|
|
{
|
|
|
|
|
|
case JOY_U:
|
|
|
|
|
|
{
|
|
|
|
|
|
if (ADC_Get_PC0() < 0.01)
|
|
|
|
|
|
return 1;
|
|
|
|
|
|
else
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case JOY_D:
|
|
|
|
|
|
{
|
|
|
|
|
|
if (ADC_Get_PC0() > 3.20)
|
|
|
|
|
|
return 1;
|
|
|
|
|
|
else
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case JOY_L:
|
|
|
|
|
|
{
|
|
|
|
|
|
if (ADC_Get_PC1() < 0.01)
|
|
|
|
|
|
return 1;
|
|
|
|
|
|
else
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case JOY_R:
|
|
|
|
|
|
{
|
|
|
|
|
|
if (ADC_Get_PC1() > 3.20)
|
|
|
|
|
|
return 1;
|
|
|
|
|
|
else
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static uint8_t IsKeyDownFunc(uint8_t _id)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8_t count = 0;
|
|
|
|
|
|
uint8_t save = UINT8_MAX;
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>ж<EFBFBD><D0B6>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (uint8_t i = 0; i < KEY_COUNT; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (KeyPinActive(i))
|
|
|
|
|
|
{
|
|
|
|
|
|
count++;
|
|
|
|
|
|
save = i;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (count == 1 && save == _id)
|
|
|
|
|
|
return 1; //ֻ<>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ч
|
|
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-08-04 10:46:24 +08:00
|
|
|
|
/**
|
2021-09-28 14:24:41 +08:00
|
|
|
|
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2021-08-04 10:46:24 +08:00
|
|
|
|
*/
|
|
|
|
|
|
void KEY_Init(void)
|
|
|
|
|
|
{
|
2021-09-28 14:24:41 +08:00
|
|
|
|
InitKeyVar(); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
InitKeyDigital(); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ְ<EFBFBD><D6B0><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void InitKeyDigital(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
GPIO_InitTypeDef gpio_init;
|
|
|
|
|
|
|
|
|
|
|
|
ALL_KEY_GPIO_CLK_ENABLE();
|
|
|
|
|
|
|
|
|
|
|
|
gpio_init.Mode = GPIO_MODE_INPUT;
|
|
|
|
|
|
gpio_init.Pull = GPIO_PULLUP;
|
|
|
|
|
|
gpio_init.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
|
|
|
|
|
|
|
|
|
|
|
for (uint8_t i = 0; i < DIGITAL_KEY_NUM; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
gpio_init.Pin = s_gpio_list[i].pin;
|
|
|
|
|
|
HAL_GPIO_Init(s_gpio_list[i].gpio, &gpio_init);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void InitKeyVar(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
s_tKey.Read = 0;
|
|
|
|
|
|
s_tKey.Write = 0;
|
|
|
|
|
|
|
|
|
|
|
|
//ȱʡֵ
|
|
|
|
|
|
for (uint8_t i = 0; i < KEY_COUNT; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
s_tBtn[i].LongTime = KEY_LONG_TIME; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ 0 <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ⳤ<EFBFBD><E2B3A4><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
|
|
|
|
|
s_tBtn[i].Count = KEY_FILTER_TIME / 2; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>˲<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
|
s_tBtn[i].State = 0; //<2F><><EFBFBD><EFBFBD>ȱʡ״̬<D7B4><CCAC>0 Ϊδ<CEAA><CEB4><EFBFBD><EFBFBD>
|
|
|
|
|
|
s_tBtn[i].RepeatSpeed = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȣ<D9B6>0 <20><>ʾ<EFBFBD><CABE>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
s_tBtn[i].RepeatCount = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//ҡ<><D2A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD>֧<EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD> 1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
KEY_SetKeyParam(JOY_U, 100, 6);
|
|
|
|
|
|
KEY_SetKeyParam(JOY_D, 100, 6);
|
|
|
|
|
|
KEY_SetKeyParam(JOY_L, 100, 6);
|
|
|
|
|
|
KEY_SetKeyParam(JOY_R, 100, 6);
|
2021-08-04 10:46:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2021-09-28 14:24:41 +08:00
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵѹ<EFBFBD>밴<EFBFBD><EFBFBD> FIFO<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
|
|
|
|
|
* @param _KeyCode: <EFBFBD><EFBFBD>ֵ
|
|
|
|
|
|
*/
|
|
|
|
|
|
void KEY_PutKey(uint8_t _KeyCode)
|
|
|
|
|
|
{
|
|
|
|
|
|
s_tKey.Buf[s_tKey.Write] = _KeyCode;
|
|
|
|
|
|
|
|
|
|
|
|
if (++s_tKey.Write >= KEY_FIFO_SIZE)
|
|
|
|
|
|
{
|
|
|
|
|
|
s_tKey.Write = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD>Ӱ<EFBFBD><EFBFBD><EFBFBD> FIFO <EFBFBD><EFBFBD>ȡһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
|
* @retval <EFBFBD><EFBFBD>ֵ
|
2021-08-04 10:46:24 +08:00
|
|
|
|
*/
|
|
|
|
|
|
uint8_t KEY_GetKey(void)
|
|
|
|
|
|
{
|
2021-09-28 14:24:41 +08:00
|
|
|
|
if (s_tKey.Read == s_tKey.Write)
|
2021-08-04 10:46:24 +08:00
|
|
|
|
{
|
2021-09-28 14:24:41 +08:00
|
|
|
|
return KEY_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8_t ret = s_tKey.Buf[s_tKey.Read];
|
2021-08-04 10:46:24 +08:00
|
|
|
|
|
2021-09-28 14:24:41 +08:00
|
|
|
|
if (++s_tKey.Read >= KEY_FIFO_SIZE)
|
|
|
|
|
|
s_tKey.Read = 0;
|
2021-08-04 10:46:24 +08:00
|
|
|
|
|
2021-09-28 14:24:41 +08:00
|
|
|
|
if (
|
|
|
|
|
|
ret == KEY1_UP ||
|
|
|
|
|
|
ret == KEY2_UP ||
|
|
|
|
|
|
ret == JOY_OK_UP ||
|
|
|
|
|
|
ret == JOY_U_UP ||
|
|
|
|
|
|
ret == JOY_D_UP ||
|
|
|
|
|
|
ret == JOY_L_UP ||
|
|
|
|
|
|
ret == JOY_R_UP)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (is_key_clear)
|
|
|
|
|
|
{
|
|
|
|
|
|
is_key_clear = 0;
|
|
|
|
|
|
return KEY_NONE;
|
|
|
|
|
|
}
|
2021-08-04 10:46:24 +08:00
|
|
|
|
}
|
2021-09-28 14:24:41 +08:00
|
|
|
|
|
|
|
|
|
|
is_key_clear = 0;
|
|
|
|
|
|
return ret;
|
2021-08-04 10:46:24 +08:00
|
|
|
|
}
|
2021-09-28 14:24:41 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD>Ӱ<EFBFBD><EFBFBD><EFBFBD> FIFO <EFBFBD><EFBFBD>ȡһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @retval <EFBFBD><EFBFBD>ֵ
|
|
|
|
|
|
*/
|
|
|
|
|
|
uint8_t KEY_GetKeyWait(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8_t key = KEY_NONE;
|
2021-08-04 10:46:24 +08:00
|
|
|
|
|
2021-09-28 14:24:41 +08:00
|
|
|
|
while (key == KEY_NONE)
|
|
|
|
|
|
key = KEY_GetKey();
|
|
|
|
|
|
|
|
|
|
|
|
return key;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD>ȡij<EFBFBD><EFBFBD>״̬
|
|
|
|
|
|
* @param _ucKeyID: <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
|
|
|
|
|
|
* @retval 1 <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>0 <EFBFBD><EFBFBD>ʾδ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
uint8_t KEY_GetKeyState(KEY_ID_E _ucKeyID)
|
|
|
|
|
|
{
|
|
|
|
|
|
return s_tBtn[_ucKeyID].State;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD>ȴ<EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param _ucKeyID: <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
|
|
|
|
|
|
*/
|
|
|
|
|
|
void KEY_WaitKey(KEY_ID_E _ucKeyID)
|
|
|
|
|
|
{
|
|
|
|
|
|
while (KEY_GetKeyState(_ucKeyID) != 1)
|
|
|
|
|
|
;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD>ð<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param _ucKeyID: <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
|
|
|
|
|
|
* @param _LongTime: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>ʱ<EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param _RepeatSpeed: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
void KEY_SetKeyParam(uint8_t _ucKeyID, uint16_t _LongTime, uint8_t _RepeatSpeed)
|
|
|
|
|
|
{
|
|
|
|
|
|
s_tBtn[_ucKeyID].LongTime = _LongTime; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 0 <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ⳤ<EFBFBD><E2B3A4><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
|
|
|
|
|
s_tBtn[_ucKeyID].RepeatSpeed = _RepeatSpeed; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȣ<D9B6>0 <20><>ʾ<EFBFBD><CABE>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
s_tBtn[_ucKeyID].RepeatCount = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD>հ<EFBFBD><EFBFBD><EFBFBD> FIFO
|
|
|
|
|
|
*/
|
|
|
|
|
|
void KEY_ClearKey(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
s_tKey.Read = s_tKey.Write;
|
|
|
|
|
|
is_key_clear = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void DetectKey(uint8_t i)
|
|
|
|
|
|
{
|
|
|
|
|
|
KEY_T *pBtn;
|
|
|
|
|
|
|
|
|
|
|
|
pBtn = &s_tBtn[i];
|
|
|
|
|
|
if (IsKeyDownFunc(i))
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pBtn->Count < KEY_FILTER_TIME)
|
|
|
|
|
|
{
|
|
|
|
|
|
pBtn->Count = KEY_FILTER_TIME;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (pBtn->Count < 2 * KEY_FILTER_TIME)
|
2021-08-04 10:46:24 +08:00
|
|
|
|
{
|
2021-09-28 14:24:41 +08:00
|
|
|
|
pBtn->Count++;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pBtn->State == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
pBtn->State = 1;
|
|
|
|
|
|
|
|
|
|
|
|
KEY_PutKey((uint8_t)(3 * i + 1));
|
|
|
|
|
|
}
|
2021-08-04 10:46:24 +08:00
|
|
|
|
|
2021-09-28 14:24:41 +08:00
|
|
|
|
if (pBtn->LongTime > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pBtn->LongCount < pBtn->LongTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (++pBtn->LongCount == pBtn->LongTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
KEY_PutKey((uint8_t)(3 * i + 3));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pBtn->RepeatSpeed > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (++pBtn->RepeatCount >= pBtn->RepeatSpeed)
|
|
|
|
|
|
{
|
|
|
|
|
|
pBtn->RepeatCount = 0;
|
|
|
|
|
|
KEY_PutKey((uint8_t)(3 * i + 1));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2021-08-04 10:46:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2021-09-28 14:24:41 +08:00
|
|
|
|
if (pBtn->Count > KEY_FILTER_TIME)
|
|
|
|
|
|
{
|
|
|
|
|
|
pBtn->Count = KEY_FILTER_TIME;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (pBtn->Count != 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
pBtn->Count--;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pBtn->State == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
pBtn->State = 0;
|
|
|
|
|
|
|
|
|
|
|
|
KEY_PutKey((uint8_t)(3 * i + 2));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2021-08-10 15:02:33 +08:00
|
|
|
|
|
2021-09-28 14:24:41 +08:00
|
|
|
|
pBtn->LongCount = 0;
|
|
|
|
|
|
pBtn->RepeatCount = 0;
|
|
|
|
|
|
}
|
2021-08-04 10:46:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2021-09-28 14:24:41 +08:00
|
|
|
|
* @brief ɨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD> SysTick <EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Եĵ<EFBFBD><EFBFBD>ã<EFBFBD>10ms һ<EFBFBD><EFBFBD>
|
2021-08-04 10:46:24 +08:00
|
|
|
|
*/
|
2021-09-28 14:24:41 +08:00
|
|
|
|
void KEY_Scan10ms(void)
|
2021-08-04 10:46:24 +08:00
|
|
|
|
{
|
2021-09-28 14:24:41 +08:00
|
|
|
|
for (uint8_t i = 0; i < KEY_COUNT; i++)
|
|
|
|
|
|
DetectKey(i);
|
2021-08-04 10:46:24 +08:00
|
|
|
|
}
|