经典按键程序.doc

经典按键程序.doc

ID:53826159

大小:27.00 KB

页数:6页

时间:2020-04-08

经典按键程序.doc_第1页
经典按键程序.doc_第2页
经典按键程序.doc_第3页
经典按键程序.doc_第4页
经典按键程序.doc_第5页
资源描述:

《经典按键程序.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、项目里经常处理按键消抖,本来这个消抖的过程是与具体按下的键无关的,可以前的代码总是在消抖的同时处理具体的按键值,再加上长按短按组合键混在一起,成一锅粥.最近在一个项目中痛下决心,想弄个通用版本的,这样下个项目只要将文件包含一下,处理具体按键值就可以了,不必再关心消抖部分的代码了.另外还发现,这样做可以同时做出几套不同的按键处理方式.思路是:按照面向过程的编程方式,将数据与过程分离.把和按键状态相关的东西统统塞到结构里,把消抖的代码放在一个函数中.//key.h头文件------------------------------------------

2、-------------------#ifndef_KEY_H#define_KEY_H#define_KEY_NONE0#define_HAS_NO_KEY0#define_HAS_KEY_DOWN1#define_HAS_KEY_SURE2#define_HAS_KEY_WAITUP3#define_REENTER1#define_NO_REENTER2typedefstruct{WORDPreDownKey;//上次检测到的键BYTEKeyState;//状态WORDSameKeyCntr;//同一键检测到按下的次数WORDCurKey;/

3、/当前检测到的键,用于处理长按的情况BYTE(*KeyDownCallBack)(WORD,WORD);//键确认按下的回调函数指针void(*KeyUpCallBack)(WORD);//键抬起的回调函数指针}struct_KeyInfo;voidDitherlessKey(struct_KeyInfo*pInfo);//消抖的处理函数#endif//_KEY_H//消抖动的代码--------------------------------------------------------------#include"Key.h"//定时消抖的按

4、键处理函数,通常在定时中断中调用,voidDitherlessKey(struct_KeyInfo*pInfo){switch(pInfo->KeyState){case_HAS_NO_KEY:pInfo->SameKeyCntr=0;if(pInfo->CurKey!=_KEY_NONE){pInfo->KeyState=_HAS_KEY_DOWN;//进入有键按下状态}break;case_HAS_KEY_DOWN:if(pInfo->PreDownKey==pInfo->CurKey){pInfo->KeyState=_HAS_KEY_SUR

5、E;//确认键已按下状态}else{pInfo->KeyState=_HAS_NO_KEY;//回到无键状态}break;case_HAS_KEY_SURE:if(pInfo->CurKey==pInfo->PreDownKey){pInfo->KeyState=_HAS_KEY_WAITUP;if(pInfo->KeyDownCallBack){//这里回调函数的返回值决定了是否允许出现长按的情况if(_REENTER==pInfo->KeyDownCallBack(pInfo->CurKey,pInfo->SameKeyCntr)){pInfo

6、->KeyState=_HAS_KEY_SURE;++pInfo->SameKeyCntr;}}}else{pInfo->KeyState=_KEY_NONE;}break;case_HAS_KEY_WAITUP:if(pInfo->CurKey!=pInfo->PreDownKey){pInfo->KeyState=_HAS_NO_KEY;if(pInfo->KeyUpCallBack){pInfo->KeyUpCallBack(pInfo->PreDownKey);}}break;default:break;}pInfo->PreDownKey

7、=pInfo->CurKey;//保存上次按键值return;}//应用代码片段---------------------------------------------------------------------------------------......//声明按键回调函数BYTEKeyDownCallBack(WORDKey,WORDTimes);BYTEKeyDownCallBack2(WORDKey,WORDTimes);//按键处理数据结构staticstruct_KeyInfog_KeyInfo1={0,0,0,0,KeyDo

8、wnCallBack};staticstruct_KeyInfog_KeyInfo2={0,0,0,0,KeyDownCa

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。