定时器4MS 一个周期.不停的扫描.这个不知道是不是你说的所谓的状态机
void KEY_SCAN(void)
{
if(!f_key_press)
{
if(P_KEY){press_cnt=0;}
press_cnt++;
if(press_cnt>=10)
{
press_cnt=0;
f_key_press=1;
f_key_ctrl=1;
}
}
else
{
if(!P_KEY){press_cnt=0;}
press_cnt++;
if(press_cnt>=10)
{
press_cnt=0;
f_key_press=0;
if(F_WORK_ON&&f_key_ctrl) //开机的情况和长按同时在的情况才表示短按
{
}
f_key_ctrl=0;
}
}
//长按
if(f_key_ctrl)
{
ctrl_cnt++;
if(ctrl_cnt>=375) //长按1.5S
{
ctrl_cnt=0;
f_key_ctrl=0;
if(!F_WORK_ON)
{
if(BAT_STEP!=0) //非低电压的情况才能开机
{
F_WORK_ON=1;
WORK_NUM=0;
}
else
{
F_WORK_ON=0;
F_BAT_ERRO=1;
}
}
else
{
F_WORK_ON=0;
}
}
}
else
{
ctrl_cnt=0;
}
} |