K1:双击+长按有效,按任意键取消
K2:双击+长按有效,按任意键取消
K3:双击+长按有效,按任意键取消
K4:双击+长按有效,按任意键取消
K5:双击+长按有效,按任意键取消
K6:双击+长按有效,按任意键取消
K7:双击+长按有效,按任意键取消
K8:双击+长按有效,按任意键取消
K9:双击+长按有效,按任意键取消
K10:双击+长按有效,按任意键取消
K11:双击有效,长按不管用。点击自身取消
加组合按键使用方法
//KEY值
typedef enum
{
DEVICE_ON_OFF = 101, //设备开关
KEY_HEAD_UP = 1,
KEY_HEAD_DOWN ,
KEY_FOOT_UP ,
KEY_FOOT_DOWN ,
KEY_LEFT_RUN,
KEY_RIGHT_RUN,
KEY_BED_UP ,
KEY_BED_DOWN,
KEY_ROLL,
KEY_RETURNROLL,
KEY_FLAT,
KEY_LEFT_AUTO1,
KEY_LEFT_AUTO2,
KEY_LEFT_AUTO3,
KEY_LEFT_AUTO4,
KEY_RIGHT_AUTO1,
KEY_RIGHT_AUTO2,
KEY_RIGHT_AUTO3,
KEY_RIGHT_AUTO4,
KEY_LEFT_AUTO_ESC,
KEY_RIGHT_AUTO_ESC,
KEY_AUTO_ESC,
KEY_MAX = 200
}KEY_VALUE;
/*
* 描述: 按键检测分析
* 参数: 无
* 返回: 无*/
void GetKey_Scanf(void)
{
if(1 == Key_Down_Num())
{
old_key_value = key_value;
key_value = 0;
switch(key_state)
{
case KEY1_STATE_VALUE:
{
key_value = KEY_LEFT_RUN;
}break;
case KEY2_STATE_VALUE:
{
key_value = KEY_RIGHT_RUN;
}break;
case KEY3_STATE_VALUE:
{
key_value = KEY_HEAD_UP;
}break;
case KEY4_STATE_VALUE:
{
key_value = KEY_HEAD_DOWN;
}break;
case KEY5_STATE_VALUE:
{
key_value = KEY_FOOT_UP;
}break;
case KEY6_STATE_VALUE:
{
key_value = KEY_FOOT_DOWN;
}break;
case KEY7_STATE_VALUE:
{
key_value = KEY_BED_UP;
}break;
case KEY8_STATE_VALUE:
{
key_value = KEY_BED_DOWN;
}break;
case KEY9_STATE_VALUE:
{
key_value = KEY_ROLL;
}break;
case KEY10_STATE_VALUE:
{
key_value = KEY_RETURNROLL;
}break;
case KEY11_STATE_VALUE:
{
key_value = KEY_FLAT;
}break;
//左侧自动翻身组合键
case (KEY1_STATE_VALUE|KEY3_STATE_VALUE):
{
key_value = KEY_LEFT_AUTO1;
}break;
case (KEY1_STATE_VALUE|KEY4_STATE_VALUE):
{
key_value = KEY_LEFT_AUTO1;
}break;
case (KEY1_STATE_VALUE|KEY5_STATE_VALUE):
{
key_value = KEY_LEFT_AUTO2;
}break;
case (KEY1_STATE_VALUE|KEY6_STATE_VALUE):
{
key_value = KEY_LEFT_AUTO2;
}break;
case (KEY1_STATE_VALUE|KEY7_STATE_VALUE):
{
key_value = KEY_LEFT_AUTO3;
}break;
case (KEY1_STATE_VALUE|KEY8_STATE_VALUE):
{
key_value = KEY_LEFT_AUTO3;
}break;
case (KEY1_STATE_VALUE|KEY9_STATE_VALUE):
{
key_value = KEY_LEFT_AUTO4;
}break;
case (KEY1_STATE_VALUE|KEY10_STATE_VALUE):
{
key_value = KEY_LEFT_AUTO4;
}break;
//右侧自动翻身组合键
case (KEY2_STATE_VALUE|KEY3_STATE_VALUE):
{
key_value = KEY_RIGHT_AUTO1;
}break;
case (KEY2_STATE_VALUE|KEY4_STATE_VALUE):
{
key_value = KEY_RIGHT_AUTO1;
}break;
case (KEY2_STATE_VALUE|KEY5_STATE_VALUE):
{
key_value = KEY_RIGHT_AUTO2;
}break;
case (KEY2_STATE_VALUE|KEY6_STATE_VALUE):
{
key_value = KEY_RIGHT_AUTO2;
}break;
case (KEY2_STATE_VALUE|KEY7_STATE_VALUE):
{
key_value = KEY_RIGHT_AUTO3;
}break;
case (KEY2_STATE_VALUE|KEY8_STATE_VALUE):
{
key_value = KEY_RIGHT_AUTO3;
}break;
case (KEY2_STATE_VALUE|KEY9_STATE_VALUE):
{
key_value = KEY_RIGHT_AUTO4;
}break;
case (KEY2_STATE_VALUE|KEY10_STATE_VALUE):
{
key_value = KEY_RIGHT_AUTO4;
}break;
//取消自动翻身
case (KEY1_STATE_VALUE|KEY11_STATE_VALUE): //取消左侧自动翻身
{
key_value = KEY_LEFT_AUTO_ESC;
}break;
case (KEY2_STATE_VALUE|KEY11_STATE_VALUE): //取消右侧自动翻身
{
key_value = KEY_RIGHT_AUTO_ESC;
}break;
default:{}break;
}
//记录按键按下次数
if(0 == key_down_flag)
{
key_down_count_flag ++; //记录按键按下次数
}
key_down_flag = 1;
//如果开始自动翻转
if(auto_turn_flag != 0)
{
if(key_value>=KEY_HEAD_UP && key_value<=KEY_RETURNROLL)
{
key_value = 0;
key_ture_value = 0;
key_down_count_flag = 0;
key_down_flag = 0;
}
}
}
else
{
key_down_flag = 0;
}
}
/*
*描述:判断是否是有效键值
*参数:无
*返回值:无
*/
void GetKey_True_Touch(void)
{
//单击
if(1 == key_down_count_flag)//只按下一次
{
if(0 == key_down_flag) //松开
{
if(0 == key_ture_value)
{
if(key_down_time>=KEY_TWO_TOUCH_TIME) //松开按键时间
{
key_down_count_flag = 0;
key_down_time = 0;
}
}
else //长按松开后 立马停止
{
key_ture_value = 0;
key_down_count_flag = 0;
key_down_time = 0;
}
}
else //一直按着
{
if(key_down_time>=KEY_LONG_TOUCH_TIME) //松开按键时间
{
if(key_value!=KEY_FLAT) //长按不管用
{
key_ture_value = key_value;
}
else
{
key_ture_value = KEY_AUTO_ESC;
}
}
else //双击后 再次按下按键 立马停止
{
//去掉此处,双击可以直接切换;加上此处,必须先打断再次双击(既 要点击三次才可以切换别的指令)
if(key_ture_value != 0)
{
if(key_ture_value == KEY_FLAT)
{
if(key_value == KEY_FLAT) //关闭自己和自动翻身
{
key_ture_value = 0;
}
}
else
{
key_ture_value = 0;
}
key_down_count_flag = 0;
key_down_time = 0;
}
}
}
}
//双击
if(2 == key_down_count_flag) //按键按下两次
{
if(old_key_value == key_value) //两次按下的是同一个按键
{
if(key_ture_value != KEY_FLAT)
{
key_ture_value = key_value;
}
key_down_count_flag = 0;//两次一样,清除计数
}
else
{
key_ture_value = 0;
key_down_count_flag = 1; //两次不一样,记录次数为1,比如第一次点按键1,然后接着点两下按键2,则按键2有效
}
key_down_time = 0;
while(Key_Down_Num()){Delay_Ms(20);}; //等待按键释放
}
}