新手入门
- 积分
- 16
- 金钱
- 16
- 注册时间
- 2022-4-4
- 在线时间
- 3 小时
|
1金钱
程序如下:
u16 key_mode(u8 m)//m是模式选择,n是按键选择
{
static unsigned char key_state = 0; // 按键状态变量
static unsigned int key_time = 0; // 按键计时变量
unsigned char key1_press,key2_press;
key1_press = KEY1_INPUT;
//m=0时,按键模式为短按
if(m==0)
{ switch(key_state)
{ case KEY_STATE_0: if(key1_press == KEY_ON)//有按键按下
{
key_time=0;
key_state = KEY_STATE_1;
}
;
break;
case KEY_STATE_1: if(key1_press == KEY_ON)
{
delay_ms(10);
key_time++;
if(key_time >=SINGLE_KEY_TIME)//软件消抖30ms
{
key_state = KEY_STATE_2;
}
else key_state = KEY_STATE_0;//小于30ms判定为误触
return 0;
} ;
break;
case KEY_STATE_2: if(key1_press == KEY_OFF)//按键松开 返回按键值:S_KEY
{
return 5;
key_state =KEY_STATE_0;
};
break;
}
}
/********m=1时,按键模式为长按,****/
if(m==1)
{ switch(key_state)
{ case KEY_STATE_0: if(key1_press == KEY_ON)//有按键按下
{
key_time=0;
key_state = KEY_STATE_1;
}
;
break;
case KEY_STATE_1: if(key1_press == KEY_ON)
{
delay_ms(10);
key_time++;
if(key_time >=SINGLE_KEY_TIME)//软件消抖30ms
{
key_state = KEY_STATE_2;
}
else key_state = KEY_STATE_0;//小于30ms判定为误触
return 0;
} ;
break;
case KEY_STATE_2: if(key1_press == KEY_ON)
{ delay_ms(10);
key_time++;
if(key_time >= LONG_KEY_TIME )
{
key_state = KEY_STATE_3;
}else
key_state = KEY_STATE_0;
};
break;
case KEY_STATE_3:if(key1_press == KEY_OFF)//返回按键值:S_KEY
{
return 10;
key_state =KEY_STATE_0;
};
break;
}
}
}
|
|