stm32f103c8t6按键流水灯代码
时间: 2023-08-24 10:09:53 浏览: 94
以下是基于STM32F103C8T6的按键流水灯代码:
```c
#include "stm32f10x.h"
#define LED_PIN GPIO_Pin_13
#define LED_PORT GPIOC
#define KEY_PIN GPIO_Pin_0
#define KEY_PORT GPIOA
void delay_ms(uint32_t ms) {
while(ms--) {
for (uint32_t i = 0; i < 3600; i++);
}
}
int main(void) {
// Enable clock for GPIOA and GPIOC
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE);
// Configure LED pin (PC13) as output push-pull
GPIO_InitTypeDef led_gpio;
led_gpio.GPIO_Pin = LED_PIN;
led_gpio.GPIO_Mode = GPIO_Mode_Out_PP;
led_gpio.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(LED_PORT, &led_gpio);
// Configure KEY pin (PA0) as input pull-up
GPIO_InitTypeDef key_gpio;
key_gpio.GPIO_Pin = KEY_PIN;
key_gpio.GPIO_Mode = GPIO_Mode_IPU;
key_gpio.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(KEY_PORT, &key_gpio);
while (1) {
if (GPIO_ReadInputDataBit(KEY_PORT, KEY_PIN) == 0) { // KEY pressed
for (int i = 0; i < 8; i++) {
GPIO_WriteBit(LED_PORT, LED_PIN, Bit_SET);
delay_ms(200);
GPIO_WriteBit(LED_PORT, LED_PIN, Bit_RESET);
delay_ms(200);
}
} else {
GPIO_WriteBit(LED_PORT, LED_PIN, Bit_RESET);
}
}
}
```
代码的主要思路是:
1. 初始化GPIO口,将LED设置为输出模式,KEY设置为输入模式,并开启按键的上拉电阻
2. 循环检测按键是否按下,如果按下则流水灯循环闪烁8次,否则LED熄灭
注意:该代码中使用了一个简单的延时函数`delay_ms()`,在实际应用中不建议使用这种方法来实现延时。可以使用定时器或者其他更加准确可控的方法来实现延时。
阅读全文