微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 刚学STM32,做到按键控制LED亮灭的时候遇到问题,求大神讲解

刚学STM32,做到按键控制LED亮灭的时候遇到问题,求大神讲解

时间:10-02 整理:3721RD 点击:
刚学STM32,做到按键控制LED亮灭的时候遇到问题,求大神讲解
按键控制的时候,如果加了延时消抖,那么按键,LED灯就不受控制了,如果不加,那么又会产生抖动,怎么办啊,求大神们讲解什么原因,我已经找了好久了,还是不知道
        RCC_Configuration();
        GPIO_Configuration();
        counter=1;
        while(1)
        {
                if(counter==1)
                {
                        if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8))
                        {
                                //delay_ms(4);
                                if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8))
                                {
                                        while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8));
                                        GPIO_SetBits(GPIOD,GPIO_Pin_8);
                                        counter++;
                                }       
                        }
                }
                else
                {
                        if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8))
                        {
                                delay_ms(5);
                                if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8))
                                {
                                        while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8));
                                        GPIO_ResetBits(GPIOD,GPIO_Pin_8);
                                        counter=1;
                                }       
                        }
                }
        }

上面一个是不加的,是可以点亮的,下面是加了延时的,再按一下就不会灭了

求大神讲解啊,帮帮新人啊

   while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8));  这句标注掉     延时函数加长 测试下

按键扫描可以用状态机实现消抖  或者硬件消抖并个电容   小编可以搜索状态机 学习学习  不懂的可交流交流

我也没看出有啥问题额

你试试先宏定义两个常量
#define FALSE                               0
#define TRUE                                !FALSE

初始化 counter = TRUE;if(counter)然后亮灯时counter = FALSE,灭灯时counter = TRUE 看看。

感觉你的延时有点长

while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8));在按键释放你才让LED响应,紧接着又检测按键释放LED灯灭,故注释while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8));顺便加在延时。其实这个用单步仿真,程序是没有问题的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top