stm32f103 用两个按键控制三个灯
时间: 2023-10-10 19:09:26 浏览: 93
可以使用以下代码实现:
```c
#include "stm32f10x.h"
#define LED1_PIN GPIO_Pin_8
#define LED2_PIN GPIO_Pin_9
#define LED3_PIN GPIO_Pin_10
#define BUTTON1_PIN GPIO_Pin_0
#define BUTTON2_PIN GPIO_Pin_1
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 使能GPIOA和GPIOC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE);
// 配置LED引脚为推挽输出,初始状态为关闭
GPIO_InitStructure.GPIO_Pin = LED1_PIN | LED2_PIN | LED3_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_ResetBits(GPIOC, LED1_PIN | LED2_PIN | LED3_PIN);
// 配置按键引脚为上拉输入
GPIO_InitStructure.GPIO_Pin = BUTTON1_PIN | BUTTON2_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
int led_num = 1; // 当前选中的LED编号
while (1)
{
// 读取按键状态
int button1 = GPIO_ReadInputDataBit(GPIOA, BUTTON1_PIN);
int button2 = GPIO_ReadInputDataBit(GPIOA, BUTTON2_PIN);
// 如果按键1被按下,则切换LED编号
if (button1 == RESET)
{
led_num++;
if (led_num > 3)
led_num = 1;
}
// 根据LED编号控制LED状态
switch (led_num)
{
case 1:
GPIO_SetBits(GPIOC, LED1_PIN);
GPIO_ResetBits(GPIOC, LED2_PIN | LED3_PIN);
break;
case 2:
GPIO_SetBits(GPIOC, LED2_PIN);
GPIO_ResetBits(GPIOC, LED1_PIN | LED3_PIN);
break;
case 3:
GPIO_SetBits(GPIOC, LED3_PIN);
GPIO_ResetBits(GPIOC, LED1_PIN | LED2_PIN);
break;
}
}
}
```
该代码使用GPIOA的0号和1号引脚作为按键输入,GPIOC的8号、9号和10号引脚作为LED输出。按下按键1可以切换选中的LED编号,根据LED编号控制LED状态。其中,使用了GPIO_ResetBits()和GPIO_SetBits()函数来控制GPIO引脚的状态。
阅读全文