网站大量收购闲置独家精品文档,联系QQ:2885784924

8051按键处理程序-单击、长按、连击、组合.docVIP

8051按键处理程序-单击、长按、连击、组合.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8051按键处理程序-单击、长按、连击、组合

最近参考大神的按键处理程序,写了下面这个程序,希望大家指点一下 硬件为8051,采用8255扩展接口,功能上,实现单击K1、K2、K3分别使时、分、秒递增;长按K1、K2、K3分别使时、分、秒递减;K1、K2、K3连击使第二个横杠处变为0; 组合键K1、K2使第一个横杠处变为0,组合键K2、K3使第一个横杠处变为横杠;组合键K1、K3使第二个横杠处变为横杠。 下图为proteus仿真电路 完整程序如下: //----------------------------------------------------------------- // 8255实现接口扩展 //----------------------------------------------------------------- // PA、PB为输出分别控制段码和位码,PC为输入 // //----------------------------------------------------------------- #include reg51.h #include absacc.h #define INT8U unsigned char #define INT16U unsigned int //8255 PA、PB、PC的端口和命令端口定义 #define PA XBYTE[0x0000] #define PB XBYTE[0x0001] #define PC XBYTE[0x0002] #define COM XBYTE[0x0003] //上述定义可以这么写 //#define PA *(XBYTE + 0x0000) //#define PB *(XBYTE + 0x0001) //#define PC *(XBYTE + 0x0002) //#define COM *(XBYTE + 0x0003) //根据硬件定义按键值 #define KEY_VALUE_1 0x0e #define KEY_VALUE_2 0x0d #define KEY_VALUE_3 0x0b #define KEY_NULL 0x0f //按键状态标志 #define N_KEY 0x80 #define S_KEY 0x40 #define D_KEY 0x20 #define L_KEY 0x10 //状态机状态 #define KEY_STATE_INIT 0 //初始状态 #define KEY_STATE_WOBBLE 1 //电平抖动状态 #define KEY_STATE_PRESS 2 //按键按下状态 #define KEY_STATE_CONTINUE 3 //连击状态 #define KEY_STATE_LONG 4 //长按状态 #define KEY_STATE_RELEASE 5 //释放按键状态 INT8U key_JL; //存储单击按键值 code INT8U SEG_CODE[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF }; //共阳数码管编码,最后一位为横杠 //初始显示的数字12-39-59 INT8U Disp_Buf[] = {1,2,10,3,9,10,5,9}; //----------------------------------------------------------------- // 8255端口按键处理 //----------------------------------------------------------------- //按键底层处理,这里只识别单击和长按 static INT8U Key_driver() { static INT8U key_time=0,key_state=KEY_STATE_INIT; INT8U key_temp,key_return=N_KEY; key_temp=PC0x0f; switch(key_state) { case KEY_STATE_INIT: if(key_temp!=KEY_NULL) key_state=KEY_STATE_PRESS; break; // caseKEY_STATE_WOBBLE: //按键消抖处理,由于是仿真,为了加快按键灵敏度,减短延时时间 // key_state=KEY_STATE_PRESS;break; case KEY_

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档