while(1)
{
if(button == 0) //按键被按下
{
if(button_state == 0) //按键第一次被按下
{
delayms(20);
if(button == 0) //再次判断按键是否被按下
{
timer1start; //按下后定时器开始计时
button_state =1; //置状态位
}
}
else if( button_state == 1 && timer2 < 1000) //在第一次按下之后1s之内按键有动作,进行判断,置位按键状态为2,等待再次放手。
{
delayms(20);
if(button == 0)
{
timer2stop;
button_state =2;
}
}
}
if( timer2 > 1000) //按键松开之后无动作1s判断为单次按下
{
button_state = 0;
timer2stop;
return oncepress;
}
if (button == 1 && button_state > 0 ) // 按键松开后
{
if( button_state == 1) //第一次按下
{ if( timer1 > 3000) //判断是否长按3s
{
button_state = 0
return longpress; //返回长按值
}
else
{
timer1stop; //不是长按停止定时器1,启动定时器2开始判断是否是单次按下还是双次按下
timer2start;
}
}
else if( button_state == 2) //判断按键为状态2,返回双次按下值
{
button_state = 0
return twicepress;
}
}
}
代码实现一个按键检测函数,要求能识别以下功能:单次按键,松开按键生效;双次按键,松开按键生效;长按按键,松开按键生效。可以使用伪代码
于 2024-02-24 11:25:41 首次发布