标题: 大佬们号,我想问一下STM32这个流水灯按键按多次怎么切换状态 [打印本页]

作者: 1196393631    时间: 2020-6-19 10:16
标题: 大佬们号,我想问一下STM32这个流水灯按键按多次怎么切换状态
最近新学,
我主要是想通过按键控制流水灯能够循环从左到右亮切换成循环从右到左亮,
按下之后能切换状态,再按一下能切换成原来的状态,就是按下能够不断切换状态。
我的主函数如下,循环里面LEFT_INIT()是从左到右亮的函数:
int main(void)
{
        NVIC_Configuration();
        EXTI_INIT();
        LED_INIT();
        while(1){
        LEFT_INIT();
  }       
}


然后给按键弄的中断处理如下, RIGHT_INIT是从右到左亮的函数:
        void EXTI0_IRQHandler(void)
        {
                while(1){
                if(EXTI_GetITStatus(EXTI_Line0)!=RESET)
                {
               
               RIGHT_INIT();
               
          }
                EXTI_ClearITPendingBit(EXTI_Line0);
        }
        }


我一直搞不懂的地方就是进入中断处理之后按下按钮再切回原来的状态,
查了一下说是用EXTI_ClearITPendingBit(EXTI_Line0)把中断清零,
但我加进去就切不回原来循环从左到右亮的状态,
就一直做不到切换状态的目标,
就想请教一下这怎么解决,谢谢大佬。




作者: 草草111111    时间: 2020-7-21 15:31
在中断里面做循环?那你的其他东西都不用跑了,你这个只要进了中断就再也出不来了
作者: 1014967323    时间: 2020-7-21 16:14
int change = 0;
int main(void){
        NVIC_Configuration();
        EXTI_INIT();
        LED_INIT();
        while(1){
               
                   switch(change){
                        case 0:
                               LEFT_INIT();
                               break;
                        case 1:
                                RIGHT_INIT();
                                break;
                        default: break;           
                        }
                       
                }        
}
void EXTI0_IRQHandler(void){
    if(EXTI_GetITStatus(EXTI_Line0)!=RESET){
               
        change = !change;      

        EXTI_ClearITPendingBit(EXTI_Line0);
    }
}




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1