在网上好像没有找到关于扫描按键次数返回的程序,自己写一个简单的:
#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扫描一次,当然你也可以自己去合理的配置时间,达到你想要的效果。至于按键其他配置,自己取别的地方找吧,这里只提供一个思路。
网友评论