STM32点亮流水灯,按下按键后只有最后一个灯亮

STM32点亮流水灯,按下按键后只有最后一个灯亮。

img

软件:Keil5、Proteus8.9
代码如下:
main.c

#include "stm32f10x.h"                  // Device header
#include "delay.h"
#include "led.h"
#include "key.h"


uint8_t KeyNum ;

int main(void)
{
    LED_Init();
    Key_Init();
    
    while (1)
    {
        KeyNum = KEY_GetNum();
        if(KeyNum==1)
        {
            GPIO_ResetBits(GPIOB,GPIO_Pin_0);
            GPIO_SetBits(GPIOB,GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3);
            delay_ms(10000);
            GPIO_ResetBits(GPIOB,GPIO_Pin_1);
            GPIO_SetBits(GPIOB,GPIO_Pin_0 |GPIO_Pin_2 |GPIO_Pin_3);
            delay_ms(10000);
            GPIO_ResetBits(GPIOB,GPIO_Pin_2);
            GPIO_SetBits(GPIOB,GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_3);
            delay_ms(10000);
            GPIO_ResetBits(GPIOB,GPIO_Pin_3);
            GPIO_SetBits(GPIOB,GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_0);
            delay_ms(10000);
        }

    }
}

key.c

#include "stm32f10x.h"                  // Device header
#include "delay.h"

void Key_Init()
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU;
    GPIO_InitStructure.GPIO_Pin= GPIO_Pin_0 ;
    GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStructure);
    
}

uint8_t KEY_GetNum()
{
    uint8_t KeyNum = 0 ;
    if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0)
    {
        delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0);
        delay_ms(20);
        KeyNum=1;
    }
    return KeyNum;
}

led.c

void LED_Init()
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin= GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3 ;
    GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStructure);
    GPIO_SetBits(GPIOB,GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3);
}


流水灯,没有实现循环点亮的功能,但亮了 说明灯点亮的函数没问题
那一般就是循环点亮灯模块的代码有问题
或者是你赋值是不是写错了