按键扫描模式,返回连按次数。

在网上好像没有找到关于扫描按键次数返回的程序,自己写一个简单的:

#define KEY1 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)    //读取按键1

/* 按键扫描 ,返回按键连击次数 */

unsigned char Key_Scan(void)

{

    static unsigned char flag=1; //按键松开标志位,松开为1

    static unsigned char timer=0; //timer:计时 按键按下后,700ms后返回按键次数

    static unsigned char times=0; //times:按键次数,按键连击次数,两次连击时差不超过700ms

    unsigned char tt; //替代字节

    if(timer>14) //如果时间大于14*50=700ms,返回一次数值

    {

        tt = times; //记录连击次数,因为times需要清零

        timer=0; //对时间清零

        times=0; //对次数清零

        return tt; //返回连击次数

    }

    timer ++;

    if((KEY1==0) && (flag==1)) //任意一个按下

    {

        flag = 0; //按下按键,要等松开按键才能解锁

        delay_ms(10); //延时消抖

        if(KEY1==0) //真正按下按键

        {

            times ++; //次数加一

            timer=0; //刷新时间,继续等待700ms

        }

    }

    else if(KEY1== 1) //松开按键

    {

        flag=1; //解锁按键计数

    }

    return 0; //没有按下按键、连击没有结束,都返回0

}

这个按键扫描任务需要50ms扫描一次,当然你也可以自己去合理的配置时间,达到你想要的效果。至于按键其他配置,自己取别的地方找吧,这里只提供一个思路。

你可能感兴趣的:(按键扫描模式,返回连按次数。)