?? bsp_button.h
字號:
/*
*********************************************************************************************************
*
* 模塊名稱 : 按鍵驅(qū)動模塊
* 文件名稱 : bsp_button.h
* 版 本 : V2.0
* 說 明 : 頭文件
*
* Copyright (C), 2010-2011, 安富萊電子 www.armfly.com
*
*********************************************************************************************************
*/
#ifndef __BSP_BUTTON_H
#define __BSP_BUTTON_H
/* 按鍵濾波時間50ms, 單位10ms
只有連續(xù)檢測到50ms狀態(tài)不變才認(rèn)為有效,包括彈起和按下兩種事件
*/
#define BUTTON_FILTER_TIME 5
#define BUTTON_LONG_TIME 100 /* 持續(xù)1秒,認(rèn)為長按事件 */
/*
每個按鍵對應(yīng)1個全局的結(jié)構(gòu)體變量。
其成員變量是實(shí)現(xiàn)濾波和多種按鍵狀態(tài)所必須的
*/
typedef struct
{
/* 下面是一個函數(shù)指針,指向判斷按鍵手否按下的函數(shù) */
uint8_t (*IsKeyDownFunc)(void); /* 按鍵按下的判斷函數(shù),1表示按下 */
uint8_t Count; /* 濾波器計(jì)數(shù)器 */
uint8_t FilterTime; /* 濾波時間(最大255,表示2550ms) */
uint16_t LongCount; /* 長按計(jì)數(shù)器 */
uint16_t LongTime; /* 按鍵按下持續(xù)時間, 0表示不檢測長按 */
uint8_t State; /* 按鍵當(dāng)前狀態(tài)(按下還是彈起) */
uint8_t KeyCodeUp; /* 按鍵彈起的鍵值代碼, 0表示不檢測按鍵彈起 */
uint8_t KeyCodeDown; /* 按鍵按下的鍵值代碼, 0表示不檢測按鍵按下 */
uint8_t KeyCodeLong; /* 按鍵長按的鍵值代碼, 0表示不檢測長按 */
uint8_t RepeatSpeed; /* 連續(xù)按鍵周期 */
uint8_t RepeatCount; /* 連續(xù)按鍵計(jì)數(shù)器 */
}BUTTON_T;
/* 定義鍵值代碼
推薦使用enum, 不用#define,原因:
(1) 便于新增鍵值,方便調(diào)整順序,使代碼看起來舒服點(diǎn)
(2) 編譯器可幫我們避免鍵值重復(fù)。
*/
typedef enum
{
KEY_NONE = 0, /* 0 表示按鍵事件 */
KEY_DOWN_USER, /* User鍵按下 */
KEY_UP_USER, /* User鍵彈起 */
KEY_LONG_USER, /* User鍵長按 */
KEY_DOWN_WAKEUP, /* WakeUp鍵按下 */
KEY_UP_WAKEUP, /* WakeUp鍵彈起 */
KEY_DOWN_TAMPER, /* Tamper鍵按下 */
KEY_UP_TAMPER, /* Tamper鍵彈起 */
KEY_DOWN_JOY_UP, /* 搖桿UP鍵按下 */
KEY_DOWN_JOY_DOWN, /* 搖桿DOWN鍵按下 */
KEY_DOWN_JOY_LEFT, /* 搖桿LEFT鍵按下 */
KEY_DOWN_JOY_RIGHT, /* 搖桿RIGHT鍵按下 */
KEY_DOWN_JOY_OK, /* 搖桿OK鍵按下 */
KEY_UP_JOY_OK, /* 搖桿OK鍵釋放 */
KEY_DOWN_USER_TAMPER /* 組合鍵,USER鍵和WAKEUP鍵同時按下 */
}KEY_ENUM;
/* 按鍵ID */
enum
{
KID_TAMPER = 0,
KID_WAKEUP,
KID_USER,
KID_JOY_UP,
KID_JOY_DOWN,
KID_JOY_LEFT,
KID_JOY_RIGHT,
KID_JOY_OK
};
/* 按鍵FIFO用到變量 */
#define KEY_FIFO_SIZE 20
typedef struct
{
uint8_t Buf[KEY_FIFO_SIZE]; /* 鍵值緩沖區(qū) */
uint8_t Read; /* 緩沖區(qū)讀指針 */
uint8_t Write; /* 緩沖區(qū)寫指針 */
}KEY_FIFO_T;
/* 供外部調(diào)用的函數(shù)聲明 */
void bsp_InitButton(void);
void bsp_PutKey(uint8_t _KeyCode);
uint8_t bsp_GetKey(void);
void bsp_KeyPro(void);
uint8_t bsp_KeyState(uint8_t _ucKeyID);
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -