給大家分享一個很有用的函數指針的按鍵驅動程序
0.png (46 KB, 下載次數: 45)
下載附件
2018-5-10 16:49 上傳
單片機源程序如下:
- /******************************************************************************
- 版權所有 (C), 2008-2018, 杭州信多達電器有限公司
- ******************************************************************************
- 文 件 名 : KeyDriver.c
- 版 本 號 : 初稿
- 生成日期 : 2018年4月10日
- 最近修改 :
- 功能描述 : 通用按鍵處理驅動模塊,統一產生按鍵信息用于應用層處理
- 函數列表 :
- 修改歷史 :
- 1.日 期 : 2018年4月10日
- 作 者 : 錢百靜
- 修改內容 : 創建文件
- ******************************************************************************/
- /*----------------------------------------------*
- * 包含頭文件 *
- *----------------------------------------------*/
- #include "KeyDriver.h"
- /*----------------------------------------------*
- * 外部變量說明 *
- *----------------------------------------------*/
- /*----------------------------------------------*
- * 外部函數原型說明 *
- *----------------------------------------------*/
- /*----------------------------------------------*
- * 內部函數原型說明 *
- *----------------------------------------------*/
- /*----------------------------------------------*
- * 全局變量 *
- *----------------------------------------------*/
- /*----------------------------------------------*
- * 模塊級變量 *
- *----------------------------------------------*/
- /*----------------------------------------------*
- * 常量定義 *
- *----------------------------------------------*/
- /*----------------------------------------------*
- * 宏定義 *
- *----------------------------------------------*/
- /*****************************************************************************
- 函 數 名: void f_KeyDriverTimer(KeyDriver const *pKeyDriver)
- 功能描述:
- 輸入參數: pKeyDriver:按鍵驅動指針
- 返 回 值:
- 注 意: 系統10ms時基調用
-
- 修改歷史:
- 1.日 期 : 2018年4月11日
- 作 者 : 錢百靜
- 修改內容 : 新生成函數
- *****************************************************************************/
- void f_KeyDriverDeal(KEY_DRIVER *pKeyDriver)
- {
- uchar i;
- //系統10ms判斷
-
- if (NULL == pKeyDriver->pHardDriver || NULL == pKeyDriver->dealCallback)
- {
- return;
- }
- //按鍵輸入獲取
- pKeyDriver->pHardDriver->GetKeys(pKeyDriver);
- switch (pKeyDriver->dealStep)
- {
- case KEY_DEAL_IDLE://按鍵空閑狀態
- pKeyDriver->data.pressTm = 0;
- pKeyDriver->data.name = KEY_DRIVER_NO_KEY;
- //有按鍵按下
- if (KEY_DRIVER_NO_KEY != pKeyDriver->data.newName)
- {
- pKeyDriver->dealStep = KEY_DEAL_PRESS;
- pKeyDriver->data.state |= KEY_PRESSED;//產生按下信息
- }
- pKeyDriver->data.name = pKeyDriver->data.newName;
-
- break;
- case KEY_DEAL_PRESS://按鍵按下狀態
- pKeyDriver->flag.bit.bHasKey = true;
-
- if (pKeyDriver->data.pressTm < 0xffff)//后續用通用函數處理
- {
- pKeyDriver->data.pressTm ++;
- }
-
- if (pKeyDriver->flag.bit.bDealDone)//當前產生的按鍵信息已處理,直接等待釋放
- {
- pKeyDriver->dealStep = KEY_DEAL_WATE_RELEASE;
- }
- //自定義狀態產生
- for (i = 0; ; i++)
- {
- if (SetTimeInf(i) == 0xff)
- {
- break;
- }
- //按鍵狀態只產生一次
- if (pKeyDriver->data.pressTm == GetTime(i))
- {
- pKeyDriver->data.state |= SetTimeInf(i);
- break;
- }
- }
- break;
- case KEY_DEAL_WATE_RELEASE://按鍵等待釋放狀態
- //等待全部按鍵釋放,釋放時產生釋放狀態,按鍵已處理不產生釋放信息
- if (KEY_DRIVER_NO_KEY == pKeyDriver->data.newName)
- {
- pKeyDriver->dealStep = KEY_DEAL_IDLE;
- if (!pKeyDriver->flag.bit.bDealDone)
- {
- pKeyDriver->data.state |= KEY_RELEASE;
- }
- }
- break;
- default:
- pKeyDriver->data.name = KEY_DRIVER_NO_KEY;
- pKeyDriver->data.newName = KEY_DRIVER_NO_KEY;
- pKeyDriver->dealStep = KEY_DEAL_IDLE;
- break;
- }
- //按鍵處理函數
- pKeyDriver->dealCallback(pKeyDriver);
- //處理后數據清除
- pKeyDriver->data.state = KEY_STATE_IDLE;
- }
- /*****************************************************************************
- 函 數 名: void f_KeyDriverInit( KeyDriver const *pKeyDriver,
- KeyHardwareDriver const *pKeyDriverHardware,
- KeyDriverCallback const pKeyDealFunc)
- 功能描述:
- 輸入參數: pKeyDriver:按鍵驅動指針;
- pKeyDriverHardware:按鍵驅動硬件層指針;
- pKeyDealFunc:按鍵處理回調函數
- 返 回 值:
- 注 意: 初始化注冊調用一次
-
- 修改歷史:
- 1.日 期 : 2018年4月11日
- 作 者 : 錢百靜
- 修改內容 : 新生成函數
- *****************************************************************************/
- void f_KeyDriverInit( KEY_DRIVER *pKeyDriver,
- KEY_HARDWARE_DRIVER const *pKeyDriverHardware,
- KeyDriverCallback const pKeyDealFunc)
- {
- //f_MemSet(pKeyDriver, 0, sizeof(KEY_DRIVER));
- pKeyDriver->pHardDriver = pKeyDriverHardware;
- pKeyDriver->dealCallback = pKeyDealFunc;
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
Src.rar
(5.89 KB, 下載次數: 36)
2018-5-10 13:32 上傳
點擊文件名下載附件
按鍵驅動程序源碼 下載積分: 黑幣 -5
|