本帖最后由 Andy_zhuang 于 2014-7-11 19:45 编辑
求一个按键状态机的程序,思路清晰点的,谢谢!
1325272561@qq.com
下面的程序,为什么我按键按下的时候,有时候会执行2次按键操作,取反取了2次,本意是按一次取反一次,在根据标志位来操作继电器的
= = 查找了半天了,还是没发现,求大神指导下,谢谢!:'(
void Key()
{
Scan_Key();
Do_Key();
}
void Scan_Key()
{
New_Key_Status = 0;
if(realy0_status() == 0) New_Key_Status |= Con_Key_Onoff; //赋值Con_Key_Onoff = 0b00000001
}
void Do_Key()
{
if( New_Key_Status == 0) Release_Key();
else if (New_Key_Status != Old_Key_Status) Release_Key();
else
{
Key_Time_Add++;
if(Key_Time_Add >= 10) Operation_Key(); //消抖时间5*10ms
if(Key_Time_Add > 200) Long_Operation_Key(); //长按
}
}
void Release_Key()
{
Old_Key_Status = New_Key_Status;
Key_Time_Add = 0;
}
void Operation_Key()
{
if(Con_Key_Onoff == Old_Key_Status)
{
while( realy0_status() == 0 );
Flag_Key_Onoff = ~Flag_Key_Onoff;
}
if(Flag_Key_Onoff) //继电器开启
{
Flag_SCR_Open = 1;
realy8_off();
}
|