stm32 写一段代码实现两个按键分别控制两个led灯亮红灯和蓝灯,按一次按键可以使得led翻转一次
时间: 2024-10-13 11:04:46 浏览: 119
touch_led_触摸按键控制led灯源代码_fpga_
5星 · 资源好评率100%
STM32微控制器通常使用GPIO作为输入输出接口来控制LED。这里是一个基本的例子,假设我们有一个STM32F103C8T6开发板,有两个按键(K1和K2)对应两个LED(LED1红、LED2蓝),我们可以使用Keil MDK集成开发环境编写C语言代码:
```c
#include "stm32f10x.h" // 包含STM32的头文件
// 定义IO口和按键LED的宏
#define KEY_PIN_GPIO GPIO_Pin_0
#define LED1_PIN_GPIO GPIO_Pin_1
#define LED2_PIN_GPIO GPIO_Pin_2
#define KEY_PORT GPIOB
#define LED1_PORT GPIOC
#define LED2_PORT GPD
// 初始化GPIO
void gpio_init(void) {
RCC_AHB1PeriphClockCmd(KEY_PORT_CLK|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPD, ENABLE); // 启动相关时钟
GPIO_InitTypeDef gpio_def;
gpio_def.GPIO_Pin = KEY_PIN_GPIO | LED1_PIN_GPIO | LED2_PIN_GPIO;
gpio_def.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 输入模式,无上拉下拉
gpio_def.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(KEY_PORT, &gpio_def);
GPIO_Init(LED1_PORT, &gpio_def);
GPIO_Init(LED2_PORT, &gpio_def);
}
// 检查按键状态并切换LED
void process_keys(void) {
if (GPIO_ReadInputDataBit(KEY_PORT, KEY_PIN_GPIO)) { // 如果按下K1
if (GPIO_ReadInputDataBit(LED1_PORT, LED1_PIN_GPIO)) { // 当前LED1亮,则关掉,LED2开
GPIO_SetBits(LED1_PORT, LED1_PIN_GPIO);
GPIO_ResetBits(LED2_PORT, LED2_PIN_GPIO);
} else { // LED1已关闭,点亮LED1
GPIO_ResetBits(LED1_PORT, LED1_PIN_GPIO);
GPIO_SetBits(LED2_PORT, LED2_PIN_GPIO);
}
} else if (GPIO_ReadInputDataBit(KEY_PORT, KEY_PIN_GPIO + 1)) { // 同理处理K2
//...
}
}
int main(void) {
gpio_init();
while (1) {
process_keys(); // 主循环检查按键并操作LED
}
return 0;
}
```
阅读全文