>
首页 » 业界动态 » 一个经典的按键扫描程序

一个经典的按键扫描程序

作者:  时间:2008-10-21 19:11  来源:
按键是比较复杂。可以用状态机表示。
每10mS执行一次键盘扫描任务
0、无键,若有键进入状态1
1、第一次检到有键。若有键进入状态2,同时将键值送缓冲区。 若无键进入状态0。
2、若有键则计时,按键超过300ms进入状态3,同时将键值送缓冲区。 若无键进入状态1。
  表示第一次按键后如果长按键则300ms后认为有一次按键。
3、若有键则计时,按键超过200ms则将键值送缓冲区。 若无键进入状态1。
  表示长按键则以后每200ms后认为有一次按键。

void KeyScan()    //每10mS执行一次键盘扫描任务
{
    switch(KeyState)
    {
        case 0:
            if(KeyIsKeyDown())  //有键
            {
                KeyState = 1;
            }
            break;
        case 1:
            if(KeyIsKeyDown())  //有键
            {
                KeyState = 2;
                KeyBufIn();   //将键值送缓冲区
                KeyStartRptCnt = 0;
            }
            else
            {
                KeyState = 0;
            }
            break;
        case 2:
            if(KeyIsKeyDown())  //有键
            {
                if(KeyStartRptCnt++ >= 30)
                {
                    KeyState = 3;
                    KeyRptCnt = 0;
                    KeyBufIn();
                }
            }
            else
            {
                KeyState = 1;
            }
            break;
        case 3:
            if(KeyIsKeyDown())  //有键
            {
                if(KeyRptCnt++ >= 20)
                {
                    KeyRptCnt = 0;
                    KeyBufIn();
                }
            }
            else
            {
                KeyState = 1;
            }
            break;
        default:
            break;
    }
}

相关推荐

飞思卡尔CEO:新战略初现成效 未来更关注中国市场

飞思卡尔  单片机  2013-04-28

飞思卡尔携手周立功单片机 共同拓展中国MCU市场

飞思卡尔  MCU  单片机  2012-12-19

英飞凌为提高XMC4000单片机生产率免费提供DAVE 3

英飞凌  单片机  2012-04-20

英飞凌XMC4500工业单片机现已量产供货

英飞凌  单片机  XMC4500  2012-03-19

ZLG成为Energy Micro中国区合作伙伴

周立功  Energy  Micro  单片机  2011-12-19

Microchip第100亿颗PIC单片机交付三星电子

微芯科技  单片机  PIC32  2011-09-21
在线研讨会
焦点