文档详情

单片机一个按键的多次击键组合判别技巧

大米
实名认证
店铺
DOCX
15.93KB
约8页
文档ID:396541834
单片机一个按键的多次击键组合判别技巧_第1页
1/8

《一个按键的多次击键组合判别技巧》大话篇小匠自从上次在旧社区发表了一篇《<程序编写规范倡议书>大话篇》后,好久没有发表"高"论了•急坏了一帮MM,以为小匠退隐江湖了斑竹在旁问道:“MM”不是“MieMie”,而是“MaMa”吧?)论坛内外谣言四起,有人说小匠改行了,不做程序匠,改做泥水匠了;还有人说小匠上阿富汗反恐怖去了;其实非也,只因新板论坛启用后,小匠一直用不惯……(斑竹在旁笑道:是“用不来”吧?)今天,小匠再次隆重登坛献演贴一个小程序段••…(斑竹道:我看是“蹬痰现眼”吧?)(程序匠人贴完帖子,下到后台,一边洗着手上残余的浆糊,一边哼着小曲:“如果你的‘芯’是一座作坊,我愿作那不知疲倦的程序匠,,,”)(一黑客悄悄贴近匠人,将一个废弃的浆糊桶扣到匠人头上……)(匠人忙问:“斑竹,谁把灯给关了?”)(众人哈哈大笑!……)一个按键的多次击键组合判别技巧有时在设计中,往往要用一个按键来输入多种信息如:单击/双击/三击、短击/长击、还有各种组合击键方式可以用以下程序来做如果按键闭合时间V500MS,判断为一次短击(0);如果按键闭合时间>500MS,判断为一次长击(1);两次击键时间间隔应V700MS,如果按键释放后700MS内无键按下,则结束读键。

读键完毕返回一个键号值KEY_NUM其意义如下:KEY_NUM意义00000000无键按下过00000001无意义00000010单次短击00000011单次长击00000100短击+短击00000101短击+长击00000110长击+短击00000111长击+长击100000007次短击111111117次长击上表中的KEY_NUM值的规律是,从左向右看,第一个"1"后面的每一位代表一次击键;"0"代表短击,"1"代表长击掌握该规律后,我们可将任何一个8位的二进制数"翻译"成一种击键组合例如:01010101,代表的是:短+长+短+长+短+长该程序最多可识别7次连续击键,共254种组合但并非每个程序中用得上在大多数程序中,能判断双击即可以了,这时可将程序中的ZHBIT定义为2同理,如果要判断3次按键,将ZHBIT定义为3即可当ZHBIT=1时,程序仅能判断一次击键,包括2种组合(短击/长击);当ZHBIT=2时,程序还能判断两次击键,包括6(2+4)种组合(短击/长击/(短+短)/(短+长)/(长+短)/(长+长));以次类推,当ZHBIT=3时,程序能判断三次击键,包括14(2+4+8)种组合。

ZHBIT组合种类22+4=62+4+8=142+4+8+16=302+4+8+16+32=622+4+8+16+32+64=1262+4+8+16+32+64+128=254下面这段程序摘自小匠的一个智能充电器程序(MCU是EM78P458),如下:・********************************5;读键子程序;出口:KEY_NUM=键号值冲间:KEY_DL二计数器;说明:/*短击:键按下时间<500MS长击:键按下时间>500MS两次按键间隔时间V700MS键号定义:KEY_NUM=00000000:无键按下KEY_NUM=00000001:无意义KEYNUM=00000010:单次短击KEY_NUM=00000011:KEY_NUM=00000100:KEY_NUM=00000101:KEY_NUM=00000110:KEY_NUM=00000111:KEY_NUM=11111110:击+长击+短击KEY_NUM=11111111:击+长击+长击*/ZHBITEQU2・********************************5READKEY:CLRKEY_NUMJKOFFREADKEYFBSKEY_NUM,0单次长击短击+短击短击+长击长击+短击长击+长击长击+长击+长击+长击+长长击+长击+长击+长击+长;按键组合位(选择范围1~7);清键号;键未按下跳1"->键号低位READKEYA:CLRKEY_DL;清计数器READKEYB:CALLDL10MSINCKEY_DLMOVA,@50SUBA,KEY_DLJBCR3,CJMPREADKEYC;计数器溢出跳JKONREADKEYB;键未释放跳BCR3,C;C=0JMPREADKEYDREADKEYC:WDTC;喂狗JKONREADKEYC;键未释放跳BSR3,C;C=1READKEYD:RLLCKEY_NUM;键号左移一位,C->键号低位JBCKEY_NUM,ZHBIT;按键检测未完成继续RET5CLRKEY_DL;清计数器READKEYE:CALLDL10MSINCKEYDLMOVA,@70SUBA,KEY_DLJBCR3,CREADKEYF:RET;计数器溢出返回JKOFFREADKEYE;键未按下跳JMPREADKEYA;再次检测;键闭合跳(宏)5JKONMACROADDRESSJBSR5,KEY;键断开跳FJMPADDRESS;键闭合跳CALLDL10MS;延时去抖动JBSR5,KEY;键断开跳FJMPADDRESS;键闭合跳ENDM5;键断开跳(宏)JBCR5,KEY;键闭合跳FJMPADDRESS;键断开跳CALLDL10MS;延时去抖动JBCR5,KEY;键闭合跳FJMPADDRESS;键断开跳ENDM。

下载提示
相似文档
正为您匹配相似的精品文档