27,511
社区成员




typedef struct
{
下面是一个函数指针,指向判断按键手否按下的函数
uint8_t (*IsKeyDownFunc)(void); 按键按下的判断函数,1表示按下
uint8_t Count; 滤波器计数器
uint16_t LongCount; 长按计数器
uint16_t LongTime; 按键按下持续时间, 0表示不检测长按
uint8_t State; 按键当前状态(按下还是弹起)
uint8_t RepeatSpeed; 连续按键周期
uint8_t RepeatCount; 连续按键计数器
}KEY_T;
typedef struct
{
下面是一个函数指针,指向判断按键手否按下的函数
uint8_t (*IsKeyDownFunc)(void); 按键按下的判断函数,1表示按下
uint8_t Count; 滤波器计数器
uint16_t LongCount; 长按计数器
uint16_t LongTime; 按键按下持续时间, 0表示不检测长按
uint8_t State; 按键当前状态(按下还是弹起)
uint8_t RepeatSpeed; 连续按键周期
uint8_t RepeatCount; 连续按键计数器
}KEY_T;
/* 对按键FIFO读写指针清零 */
s_tKey.Read = 0;
s_tKey.Write = 0;
s_tKey.Read2 = 0;
typedef struct
{
uint8_t Buf[KEY_FIFO_SIZE]; /* 键值缓冲区 */
uint8_t Read; /* 缓冲区读指针1 */
uint8_t Write; /* 缓冲区写指针 */
uint8_t Read2; /* 缓冲区读指针2 */
}KEY_FIFO_T;
static KEY_FIFO_T s_tKey; /* 按键FIFO变量,结构体 */
//bsp_PutKey(); 将一个键值压入按键FIFO.用来模拟一个按键
void bsp_PutKey(uint8_t _KeyCode)
{
s_tKey.Buf[s_tKey.Write] = _KeyCode;
if (++s_tKey.Write >= KEY_FIFO_SIZE)
{
s_tKey.Write = 0;
}
}
//bsp_GetKey(); 从FIFO缓冲区中读取一个键值.
uint8_t bsp_GetKey(void)
{
uint8_t ret;
if (s_tKey.Read == s_tKey.Write)
{
return KEY_NONE;
}
else
{
ret = s_tKey.Buf[s_tKey.Read];
if (++s_tKey.Read >= KEY_FIFO_SIZE)
{
s_tKey.Read = 0;
}
return ret;
}
}