
使用系统滴答定时中断,基于按键的状态机怎么只能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; } |