打印

用外部中断与定时器实现了按键的长按、短按、双击功能。附代码。短按实现多个功能请教

[复制链接]
3074|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liu_jing_yang|  楼主 | 2017-9-12 18:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用外部中断与定时器实现了按键的长按、短按、双击功能。附代码。长按对应一个功能,双击对应一个功能,短按想对应三四个功能,按一下标志位=1,执行一次功能,再按一下,标志位变为2,执行另一个功能,麻烦给看看怎么实现?

相关帖子

沙发
liu_jing_yang|  楼主 | 2017-9-12 18:02 | 只看该作者
void TIM2_IRQHandler(void)
{
//        if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )
//        {       
//                TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);   
//                   Time_Press++;
//        }       

    if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)  
    {
        if(Key_Press == 1)  //·¢éú°′?ü°′??ê??t
        {
            if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13) == 0 ) //°′?ü3?D?°′??
             {         
                if(Time_Press <= 800)
                 {
                    Time_Press++;
                 }
                 else  //°′?ü°′??μ?2000ms?í?D??3¤°′ê??t3éᢣ?éú3é3¤°′±ê??
                 {
                   Time_Press = 0;
                   Key_Press_Short = 0;  //??3y?ì°′±ê??
                   Key_Press_Long = 1;   //3¤°′±ê??????
                   Key_Press = 0;        //??°′?ü°′??±ê??
                  }
             }
          else  //°′?üì§?e
          {
               if(Time_Press > 20)  //°′??ê±??′óóú50mséú3éμ¥?÷±ê??
                {  
                   Time_Press = 0;
                   Key_Press_Short = 1;
                   Key_Press_Long = 0;
                   Key_Press = 0;
                                                                       
                                                                        Time_Press_Short_Flag++;
                                                                        Time_Press_Short_Flag%=4;

                  if((Time_Press_Double >100) && (Time_Press_Double <500)) //?àà?é?′?μ¥?÷ê±???ú100-500ms????£??òè??a·¢éúá??÷ê??t
                  {
                       Key_Press_Double = 1;
                       Key_Press_Short = 0;
                                                                                   Time_Press_Short_Flag = Time_Press_Short_Flag - 1;
                  }
                  Time_Press_Double_Flag = 1;
                                                                       
                                                                        printf("SF is %d\n",Time_Press_Short_Flag);
                }
               else   
                  {   
                       Time_Press=0;
                       Key_Press_Short = 0;
                       Key_Press_Long = 0;
                       Key_Press = 0;
                 }
          }

        }
    if(Time_Press_Double_Flag)
                       
         Time_Press_Double++;

    if(Time_Press_Double > 500)
      {
          Time_Press_Double = 0;
          Time_Press_Double_Flag = 0;
      }

    }

        TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);   
   
}

使用特权

评论回复
板凳
山东电子小菜鸟| | 2017-9-13 13:01 | 只看该作者

使用特权

评论回复
地板
ningling_21| | 2017-9-13 14:43 | 只看该作者
liu_jing_yang 发表于 2017-9-12 18:02
void TIM2_IRQHandler(void)
{
//        if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )

伪代码
if( 按键为短按)
{
     if( 标志==0)
    {
        按键短按功能1;
        标志=1;
    }
    else if( 标志 ==1)
    {
        按键短按功能2;
        标志=2;
    }
    .....
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

52

帖子

0

粉丝