使用系统滴答作按键扫描的问题
使用系统滴答定时中断,基于按键的状态机怎么只能1个1个+,不能连+#define KEY1_USER GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)
unsigned char Key_Scan(void)
{
static unsigned int KeyStateTemp = 0, KeyTime=0;//按键状态及按键时间
static unsigned char num=0; //按键次数
switch(KeyStateTemp)
{
case StateInit:
if(!KEY1_USER)
KeyStateTemp = StateAffirm;
break;
case StateAffirm:
if(!KEY1_USER)
{
KeyTime = 0;
KeyStateTemp = StateSingle;
}
else KeyStateTemp = StateInit;
break;
case StateSingle:
if(KEY1_USER )
{
KeyStateTemp = StateInit;
num++;
if(125== num)num = 0;
}
else if(++KeyTime > 1000)//按键时间1000*1MS
{
KeyStateTemp = StateRepeat;
KeyTime = 0;
}
break;
case StateRepeat:
if(KEY1_USER )
KeyStateTemp = StateInit;
else
{
if(++KeyTime > 200) //按键时间
{
KeyTime = 0;
num++;
if(125== num)num = 0;
}
break;
}
break;
default: KeyStateTemp = KeyStateTemp = StateInit; break;
}
return num;
}
页:
[1]