标题: STM8单片机按键 短按 双击 长按源代码 [打印本页]
作者: 131415yy 时间: 2018-10-10 11:52
标题: STM8单片机按键 短按 双击 长按源代码
在STM8单片机上面实现代码为:
//按键按下去会出现下降沿,设置按键IO口GPIOB4所在的外部端口B下降沿触发中断
void exit_init(void)
{
EXTI_DeInit();
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB,EXTI_SENSITIVITY_FALL_ONLY);
}
//按键按下中断服务程序
INTERRUPT_HANDLER(EXTI_PORTB_IRQHandler, 4)
{
if(GPIO_ReadInputPin(GPIOB,GPIO_PIN_4)==0)//是按键下降沿
{
key_fall_flag = 1;//生成按键按下标志
}
}
//周期1ms的定时器中断服务程序
INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler,23)
{
if(key_fall_flag==1)//发生按键按下事件
{
if(GPIO_ReadInputPin(GPIOB,GPIO_PIN_4)==0)//按键持续按下
{
if(key_holdon_ms <= 2000)
{
key_holdon_ms++;
}
else //按键按下到2000ms就判断长按时间成立,生成长按标志
{
key_holdon_ms = 0;
short_key_flag=0;//清短按键标志
key_long_down = 1;//长按键标志置位
key_fall_flag = 0;//清按键按下标志
}
}
else //按键抬起
{
if(key_holdon_ms>50)//按下时间大于50ms,生成单击标志
{
key_holdon_ms=0;
short_key_flag=1;
key_long_down =0;
key_fall_flag=0;
//距离上次单击时间在100~500ms之间,则认为发生连击事件
if(keyupCnt>100&& keyupCnt<500)
{
doubleClick= TRUE;
short_key_flag=0;
}
keyUpFlag= TRUE;//单击抬起按键后,生成按键抬起标志
}
else //按键持续时间小于50ms,忽略
{
key_holdon_ms=0;
short_key_flag=0;
long_key_flag=0;
key_fall_flag=0;
}
}
}
if(keyUpFlag)//单击抬起后,启动计数,计数到500ms
keyupCnt++;
if(keyupCnt>500)
keyupCnt= 0;
keyUpFlag= FALSE;
}
}
作者: 萝莉最棒了 时间: 2019-7-1 16:04
还是没有应用起来
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |