键盘消抖相关资料

键盘消抖相关资料

ID:15297971

大小:38.00 KB

页数:8页

时间:2018-08-02

键盘消抖相关资料_第1页
键盘消抖相关资料_第2页
键盘消抖相关资料_第3页
键盘消抖相关资料_第4页
键盘消抖相关资料_第5页
资源描述:

《键盘消抖相关资料》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、采用调度器,每隔xxms查询一次采用先让列线为高(或低),令行线依次为低(或高),查询列线状态如果有键按下,则返回键值函数uCHARKey_Number_Check(void){staticdataCHAROld_Key;CHARKey=KEYPAD_NO_NEW_DATA;uCHARindex;R1=0;if(C1==0)index=0;if(C2==0)index=1;if(C3==0)index=2;if(C4==0)index=3;R1=1;R2=0;if(C1==0)index=4;if(C2==0)index=5;if(C3==0)index=6;if(C

2、4==0)index=7;R2=1;R3=0;if(C1==0)index=8;if(C2==0)index=9;if(C3==0)index=10;if(C4==0)index=11;R3=1;R4=0;if(C1==0)index=12;if(C2==0)index=13;if(C3==0)index=14;if(C4==0)index=15;R4=1;if(Key==Old_Key)//Checktwicetoassurethereisakeypressed{//AvalidKeycheckedif(Key!=Last_valid_key_G)//NewKey!

3、Last_valid_key_G=Key;while(C1==0

4、

5、C2==0

6、

7、C3==0

8、

9、C4==0);returnindex;}else{Old_Key=Key;returnindex;}}888888888888888888888888888888888888888888888888888888888888888888888888888其实都是单片机教材的错啦。比如动不动就用行例矩阵键盘一样,呵呵……键盘扫描和任何中断处理一样,要尽量快的处量完,尽量不要做无谓的等待工作,降低系统响应效率。不过要达到好的系统效果,能用RTOS的情况下,最好尽量用OS,可以大大

10、提高CPU的调度能力和系统实时性。顺便发一个我用的键盘程序吧。基于UCOSII,在系统时钟HOOK函数中调用。键可用时发送键盘值到队例。有长按键处理,并随着按键时间的增加而加快重复产生键值能的频率,对一些少键系统调节数值时很有用。voidKeyScan(void){staticINT32UbPreKeyBuf=0x3f,bCurKeyBuf=0x3f,bKeyOK=FALSE,bLongKey=FALSE,bKeyRepeatDelay;staticINT32UbTickCount=0;INT32UdwTemp;dwTemp=IO0PIN;bCurKeyBuf=0;b

11、CurKeyBuf=bCurKeyBuf

12、((dwTemp>>22)&0x08);//Key1(ESC_KEY)P0.25bCurKeyBuf=bCurKeyBuf

13、((dwTemp>>24)&0x04);//Key2(UP_KEY)P0.26bCurKeyBuf=bCurKeyBuf

14、((dwTemp>>29)&0x02);//Key3(DOWN_KEY)P0.30dwTemp=IO1PIN;bCurKeyBuf=bCurKeyBuf

15、((dwTemp>>16)&0x01);//Key4(ENTER_KEY)P1.16if(bCurKeyBuf!=0x0f){if(

16、bCurKeyBuf!=bPreKeyBuf){bPreKeyBuf=bCurKeyBuf;bTickCount=0;bKeyOK=FALSE;bLongKey=FALSE;if(bKeyRepeat==1){bKeyRepeat=0;OSQPost(KeyQueue,(void*)UPDATE_KEY);}}else{bTickCount++;if(bLongKey==FALSE){if(bTickCount==2){bKeyOK=TRUE;OSQPost(KeyQueue,(void*)bPreKeyBuf);}if(bTickCount==LONG_KEY_DE

17、LAY){bLongKey=TRUE;bKeyRepeatDelay=KEY_REPEAT_DELAY;bKeyOK=FALSE;OSQPost(KeyQueue,(void*)(bPreKeyBuf

18、0x80));bTickCount=0;}}else{if(bKeyRepeat==TRUE){if(bTickCount>=(bKeyRepeatDelay)){OSQPost(KeyQueue,(void*)(bPreKeyBuf

19、0x80));bTickCount=0;if(bKeyRepeatDelay>4)bKeyRepeatDelay--;

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

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

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