打印

再发键盘状态机

[复制链接]
1617|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
phz0008|  楼主 | 2011-4-11 14:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
u8 KeyStateMachine(void)
{
if(KeyDone)     //按键对应处理执行了没有
  {
      KeyValue=(GetKeyValue()&NoKeyPressMask);/*检测按键端口获得按键值*/
     switch(CurKeyState)
     {
      case NoKeyPress:
       if(KeyValue!=NoKeyPressMask)
        {
          CurKeyState=KeyDrop;
         }
       else
         {
         #ifdef NoKeyTimeCntEn                 //支持无击使能标志
              NoKeyTimeCnt++;                //支持无击计数器增长
            #endif
            KeyValid= 0xff;
         }
      break;
      case KeyDrop:
          if(KeyTempBuf[0]!=KeyTempBuf[1]&&KeyValue==KeyTempBuf[1]&&KeyValue!=NoKeyPressMask)
           {           
              CurKeyState=KeyPress;   
              KeyAge=0;   //年龄计数器清零
             }
           else
            {
              CurKeyState=NoKeyPress;  
            }            
      break;
      case KeyPress:   //此阶段处理长击和连击
          if(KeyTempBuf[0]==KeyTempBuf[1]&&KeyValue==KeyTempBuf[1]&&KeyValue!=NoKeyPressMask)
           {
            KeyAge++;  //年龄计数器累加  
            KeyValid= KeyValue;//或者压KEYPADBUF
             }
           else
            {
              CurKeyState=NoKeyPress;  
            }  
      case KeyRelease:  //此阶段处理键盘弹起  
       if(KeyTempBuf[0]==NoKeyPressMask&&KeyTempBuf[1]==NoKeyPressMask&&KeyValue==NoKeyPressMask) //确认弹起
        {      
          CurKeyState=NoKeyPress;
          if(KeyAge>=KeyLongPreesLimit)
           SingleKeyLongShortFlag=1;
          else
           SingleKeyLongShortFlag=0;           
          KeyAge=0;   //年龄计数器清零
          KeyDone=0;  //按键置未处理标志
          KeyTempBuf[0]=KeyTempBuf[1]=KeyValue=0xff;
         }
      break;
      default:  
           CurKeyState=NoKeyPress;  
      break;      
     }
     KeyTempBuf[0]=KeyTempBuf[1];
     KeyTempBuf[1]=KeyValue;
     return KeyValid;
  }
  else{
   //键盘扫描无效
   return 0xff;
  }
}

相关帖子

沙发
老鱼探戈| | 2011-5-28 14:15 | 只看该作者
沙发!友情帮顶也可以嘛

使用特权

评论回复
板凳
l50211| | 2011-5-28 15:52 | 只看该作者
看看

使用特权

评论回复
地板
hotpower| | 2011-5-28 17:05 | 只看该作者
不错

使用特权

评论回复
5
lixupengarm| | 2011-5-28 22:02 | 只看该作者
mark!!!

使用特权

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

本版积分规则

7

主题

124

帖子

0

粉丝