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