找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1833|回复: 2
打印 上一主题 下一主题
收起左侧

大佬们号,我想问一下STM32这个流水灯按键按多次怎么切换状态

[复制链接]
跳转到指定楼层
楼主
ID:783669 发表于 2020-6-19 10:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近新学,
我主要是想通过按键控制流水灯能够循环从左到右亮切换成循环从右到左亮,
按下之后能切换状态,再按一下能切换成原来的状态,就是按下能够不断切换状态。
我的主函数如下,循环里面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)把中断清零,
但我加进去就切不回原来循环从左到右亮的状态,
就一直做不到切换状态的目标,
就想请教一下这怎么解决,谢谢大佬。



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:733205 发表于 2020-7-21 15:31 | 只看该作者
在中断里面做循环?那你的其他东西都不用跑了,你这个只要进了中断就再也出不来了
回复

使用道具 举报

板凳
ID:192650 发表于 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);
    }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表