打印

原创分享:我的完美组合按键编码方案

[复制链接]
1992|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
流行音乐|  楼主 | 2010-12-13 22:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 流行音乐 于 2011-10-30 22:43 编辑

我的完美组合按键编码方案:
……
并使用按键缓冲区,以支持快速按键且不丢失按键。
按键编码位:
  x  x  x  x  x  x  x  xxxxxxxx
  _  _  _  _  _  _  _  ________
  |  |  |  |  |  |  |     |
  |  |  |  |  |  |  |     +----------- 按键编号
  |  |  |  |  |  |  +----------------- 按键按下和重发标志位,详见下面说明
  |  |  |  |  |  +-------------------- 按键按下和重发标志位,详见下面说明
  |  |  |  |  +----------------------- 按键按下和重发标志位,详见下面说明
  |  |  |  +-------------------------- 按键错误,表示有矩形三键被按下
  |  |  +----------------------------- 功能键1状态 1:按下 0:未按下
  |  +-------------------------------- 功能键2状态 1:按下 0:未按下
  +----------------------------------- 功能键3状态 1:按下 0:未按下
按键按下和重发标志位的说明:
000: 按键松开
101: 按键首次按下
110: 按键首次重发
111: 按键重发(不含首次重发)

下面只是整个按键程序的 1/6。

void _GenerateKeyEvent(int8u aKeyNumber, int8u u8_KeyAction)
{
  int16u u16Key;
  if(bKeyError)
  { //按键错误
    if(oeKeyStatus!=neKeyError)
    {
      u8KeyFlag&=0xf0;
      u8KeyFlag|=0x0d;
      u16Key=0+(((int16u)u8KeyFlag)<<8);
      _SendToKeyBuffer(u16Key);
      oeKeyStatus=neKeyError;
    }
  }else
  { //按键错误消失
    if(oeKeyStatus==neKeyError)
    {
      u8KeyFlag&=0xf0;
      u8KeyFlag|=0x08;
      u16Key=0+(((int16u)u8KeyFlag)<<8);
      _SendToKeyBuffer(u16Key);
      oeKeyStatus=neKeyIdle;
    }
    switch(u8_KeyAction)
    {
      case 0: //按键按下
        u8KeyFlag|=_GetKeyFlag(aKeyNumber);  //设置辅助功能键标志位
        u8KeyFlag&=0xf0;
        u8KeyFlag|=0x05;
        u16Key=aKeyNumber+(((int16u)u8KeyFlag)<<8);
        _SendToKeyBuffer(u16Key);
        u8Key=aKeyNumber;
        oeKeyStatus=neKeyWait;
        break;
      case 1: //按键松开
        u8KeyFlag&=~_GetKeyFlag(aKeyNumber);  //设置辅助功能键标志位
        u8KeyFlag&=0xf0;
        u16Key=aKeyNumber+(((int16u)u8KeyFlag)<<8);
        _SendToKeyBuffer(u16Key);
        break;
    }
  }
}

相关帖子

沙发
coody| | 2010-12-13 23:42 | 只看该作者
太麻烦了吧?我现在一般用PS2的编码,或者直接用ASCII做键码,这样,所有的输入都可以统一影射。。。

使用特权

评论回复
板凳
程序匠人| | 2010-12-16 21:53 | 只看该作者
“完美”体现在哪里,能否展开讲解? :)

使用特权

评论回复
地板
maxhai| | 2010-12-16 22:34 | 只看该作者
晕。。。把我骗进来!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

375

帖子

1

粉丝