?? button.h
字號:
/****************************************************************************
* Copyright (C), 2009-2010, www.armfly.com
*
* 文件名: button.h
* 內容簡述: 頭文件
*
* 文件歷史:
* 版本號 日期 作者 說明
* v0.1 2009-12-28 armfly 創建該文件
*
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __BUTTON_H
#define __BUTTON_H
/* 按鍵濾波時間50ms, 單位10ms
只有連續檢測到50ms狀態不變才認為有效,包括彈起和按下兩種事件
*/
#define BUTTON_FILTER_TIME 5
#define BUTTON_LONG_TIME 100 /* 持續1秒,認為長按事件 */
/*
每個按鍵對應1個全局的結構體變量。
其成員變量是實現濾波和多種按鍵狀態所必須的
*/
typedef struct
{
/* 下面是一個函數指針,指向判斷按鍵手否按下的函數 */
uint8_t (*IsKeyDownFunc)(void); /* 按鍵按下的判斷函數,1表示按下 */
uint8_t Count; /* 濾波器計數器 */
uint8_t FilterTime; /* 濾波時間(最大255,表示2550ms) */
uint16_t LongCount; /* 長按計數器 */
uint16_t LongTime; /* 按鍵按下持續時間, 0表示不檢測長按 */
uint8_t State; /* 按鍵當前狀態(按下還是彈起) */
uint8_t KeyCodeUp; /* 按鍵彈起的鍵值代碼, 0表示不檢測按鍵彈起 */
uint8_t KeyCodeDown; /* 按鍵按下的鍵值代碼, 0表示不檢測按鍵按下 */
uint8_t KeyCodeLong; /* 按鍵長按的鍵值代碼, 0表示不檢測長按 */
}BUTTON_T;
/* 定義鍵值代碼
推薦使用enum, 不用#define,原因:
(1) 便于新增鍵值,方便調整順序,使代碼看起來舒服點
(2) 編譯器可幫我們避免鍵值重復。
*/
typedef enum
{
KEY_NONE = 0, /* 0 表示按鍵事件 */
/* 為了演示,需要檢測USER鍵彈起事件和長按事件 */
KEY_DOWN_USER, /* User鍵按下 */
KEY_UP_USER, /* User鍵彈起 */
KEY_HOLD_USER, /* User鍵長按 */
KEY_DOWN_WAKEUP, /* WakeUp鍵按下 */
KEY_DOWN_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_ENUM;
/*
按鍵FIFO用到變量
*/
#define KEY_FIFO_SIZE 20
typedef struct
{
uint8_t Buf[KEY_FIFO_SIZE]; /* 鍵值緩沖區 */
uint8_t Read; /* 緩沖區讀指針 */
uint8_t Write; /* 緩沖區寫指針 */
}KEY_FIFO_T;
void InitButtonVar(void);
void PutKey(uint8_t _KeyCode);
uint8_t GetKey(void);
void KeyPro(void);
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -