c8t6按键控制LED

#c8t6按键控制LED亮灭
#求助

img

img

img

img

不知道代码哪里出了问题,灯能正常亮和灭,按键耶用万用表测过了,按键有电压,按下后电压为零,但是用程序控制不了LED。实在是不知道是哪里出了问题,求帮帮忙!

贴上完整的代码,帮你看KEY_Scan函数应该设计有问题

以下是stm32f030c8t6用三个按键控制分别控制三个LED亮灭,已经注释,有问题问我。

#include "stm32f0xx.h"

#define LED1_PIN    GPIO_Pin_0  // LED1在PB0引脚上
#define LED2_PIN    GPIO_Pin_1  // LED2在PB1引脚上
#define LED3_PIN    GPIO_Pin_2  // LED3在PB2引脚上

#define BUTTON1_PIN GPIO_Pin_3  // 按钮1在PB3引脚上
#define BUTTON2_PIN GPIO_Pin_4  // 按钮2在PB4引脚上
#define BUTTON3_PIN GPIO_Pin_5  // 按钮3在PB5引脚上

void GPIO_Config(void);
void Delay(__IO uint32_t nCount);

int main(void)
{
  GPIO_Config();  // 初始化GPIO引脚

  while (1)
  {
    if (GPIO_ReadInputDataBit(GPIOB, BUTTON1_PIN) == 0)  // 如果按钮1按下
    {
      GPIO_SetBits(GPIOB, LED1_PIN);  // 点亮LED1
    }
    else
    {
      GPIO_ResetBits(GPIOB, LED1_PIN);  // 熄灭LED1
    }

    if (GPIO_ReadInputDataBit(GPIOB, BUTTON2_PIN) == 0)  // 如果按钮2按下
    {
      GPIO_SetBits(GPIOB, LED2_PIN);  // 点亮LED2
    }
    else
    {
      GPIO_ResetBits(GPIOB, LED2_PIN);  // 熄灭LED2
    }

    if (GPIO_ReadInputDataBit(GPIOB, BUTTON3_PIN) == 0)  // 如果按钮3按下
    {
      GPIO_SetBits(GPIOB, LED3_PIN);  // 点亮LED3
    }
    else
    {
      GPIO_ResetBits(GPIOB, LED3_PIN);  // 熄灭LED3
    }

    Delay(100000);  // 稍作延迟
  }
}

void GPIO_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);  // 使能GPIOB时钟

  GPIO_InitStructure.GPIO_Pin = LED1_PIN | LED2_PIN | LED3_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;  // 输出模式
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  // 推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_1;  // 输出速度为10MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;  // 无上下拉
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = BUTTON1_PIN | BUTTON2_PIN | BUTTON3_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;  // 输入模式
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  // 上拉输入
  GPIO_Init(GPIOB, &GPIO_InitStructure);
}

void Delay(__IO uint32_t nCount)
{
  while(nCount--)
  {
  }
}
在这个程序中,我们使用了GPIO_Config()函数来初始化GPIO引脚,使LED引脚为输出模式,按键引脚为上拉输入模式。接下来,我们在主函数main()中不断地读取按钮状态,并根据按钮状态控制相应的LED灯亮灭。上拉输入模式。接下来,我们在主函数main()中不断地读取按钮状态,并根据按钮状态控制相应的LED灯亮灭。

如果按钮被按下,GPIO_ReadInputDataBit()函数会返回0,此时我们调用GPIO_SetBits()函数点亮相应的LED灯;如果按钮没有被按下,GPIO_ReadInputDataBit()函数会返回1,此时我们调用GPIO_ResetBits()函数熄灭相应的LED灯。
最后,我们在Delay()函数中添加一个稍作延迟的循环,以防止程序过于频繁地读取按钮状态和改变LED灯状态。
需要注意的是,在这个程序中,我们使用了GPIOB端口来连接三个LED和三个按钮,且使用了RCC_AHBPeriph_GPIOB来使能GPIOB端口的时钟,因此需要在程序开头添加stm32f0xx.h头文件,以便使用相关的宏定义和函数。同时,需要根据实际连接方式调整LED和按钮引脚的宏定义。