上一篇文章已经写好了定时器,并且实现了按键长按。
现在狭隘的用一下:
https://mp.weixin.qq.com/s?__biz=MzUyOTM0NDkyMA==&mid=2247484014&idx=1&sn=b07bde8a1d5b15467b2c80dfd7ae3547&chksm=fa633299cd14bb8f8e9334282059930bafabf44dfcf502b0a39b7f30326268f8574acc0b0ccf&mpshare=1&scene=23&srcid=0606fxjOEkyOf9zu21GHV78G#rd
//⑥外部中断 2 服务程序 按键效果!!!
void EXTI2_IRQHandler(void)
{
if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == 0) //按键 KEY2
{
key_fall_flag = 1;//生成按键按下标志
}
EXTI_ClearITPendingBit(EXTI_Line2); //清除 LINE2 上的中断标志位
}
//中断效果
void TIM3_IRQHandler(void) //TIM3 中断
{
static u16 keyupCnt = 0;//按键弹起后计数值
static u16 key_holdon_ms = 0;//按下的时长
u16 keyUpFlag = TRUE;//按键弹起标志
if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查 TIM3 更新中断发生与否
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除 TIM3 更新中断标志
if(key_fall_flag == 1) //发生按键按下事件(按键中断发生,在按键中断中设置为1)
{
if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == 0) //按键还是按下的
{
if(key_holdon_ms <= 2000)
{
key_holdon_ms++;
}
else if(key_holdon_ms > 2000) //按键按下到2000ms就判断长按时间成立,生成长按标志
{
key_holdon_ms = 0; //清除时间单位
short_key_flag = 0; //清短按键标志
key_long_down = 1; //长按键标志置位!!!OK
key_fall_flag = 0; //清按键按下标志
keyUpFlag = FALSE; //标记按下
keyupCnt = 0;
LED1 = ~LED1;
}
//距离上次单击时间在100~500ms之间,则认为发生连击事件
if((keyupCnt > 300) && (keyupCnt < 500))
{
keyupCnt = 0;
doubleClick = 1; //标记发生了连击事件!!OK
BEEP = ~BEEP;
}
}
else //当时是按下去的,此时已经释放按键了
{
keyupCnt = 0;
if(key_holdon_ms > 50) //按下时间大于50ms,生成单击标志
{
key_holdon_ms = 0;
short_key_flag = 1; //标记短按标志!!OK
key_long_down = 0; //清除长按标志
key_fall_flag = 0;
LED0 = ~LED0;
keyupCnt = 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;//短按
key_long_down = 0;//长按标志
key_fall_flag = 0;//按键按下标志
keyupCnt = 0;
}
}
}
if(keyUpFlag)//单击抬起后,启动计数,计数到500ms
keyupCnt++;
if(keyupCnt > 500)
{
keyupCnt = 0;
keyUpFlag = FALSE;//标记为弹起
}
}
}
结合第一个文章 看看按键的单 双 长 按的代码
https://pan.baidu.com/s/1gg-1zcC9gRY1CY67qOJpfQ
上一篇:STM32按键长短按:超强移植性,回调函数按键处理机制
下一篇:STM32端口配置
推荐阅读最新更新时间:2024-11-17 05:43