stm32按键控制led灯流水灯亮灭
时间: 2023-08-13 22:03:54 浏览: 122
好的,针对您的问题,我可以给您提供以下的代码实现:
``` c
#include "stm32f10x.h"
void Delay(uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
int main(void)
{
// 初始化GPIOC和GPIOB时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOB, ENABLE);
// 配置PC8、PC9、PC10、PC11、PC12引脚为输出模式
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
// 配置PB0引脚为输入模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
while (1)
{
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == RESET) // 判断按键是否按下
{
GPIO_SetBits(GPIOC, GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12); // 全部点亮
Delay(0xFFFFF); // 延时
GPIO_ResetBits(GPIOC, GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12); // 全部熄灭
Delay(0xFFFFF); // 延时
}
else
{
GPIO_SetBits(GPIOC, GPIO_Pin_8); // 只点亮PC8
Delay(0xFFFFF); // 延时
GPIO_ResetBits(GPIOC, GPIO_Pin_8); // 只熄灭PC8
Delay(0xFFFFF); // 延时
GPIO_SetBits(GPIOC, GPIO_Pin_9); // 只点亮PC9
Delay(0xFFFFF); // 延时
GPIO_ResetBits(GPIOC, GPIO_Pin_9); // 只熄灭PC9
Delay(0xFFFFF); // 延时
GPIO_SetBits(GPIOC, GPIO_Pin_10); // 只点亮PC10
Delay(0xFFFFF); // 延时
GPIO_ResetBits(GPIOC, GPIO_Pin_10); // 只熄灭PC10
Delay(0xFFFFF); // 延时
GPIO_SetBits(GPIOC, GPIO_Pin_11); // 只点亮PC11
Delay(0xFFFFF); // 延时
GPIO_ResetBits(GPIOC, GPIO_Pin_11); // 只熄灭PC11
Delay(0xFFFFF); // 延时
GPIO_SetBits(GPIOC, GPIO_Pin_12); // 只点亮PC12
Delay(0xFFFFF); // 延时
GPIO_ResetBits(GPIOC, GPIO_Pin_12); // 只熄灭PC12
Delay(0xFFFFF); // 延时
}
}
}
```
这段代码实现了如下的功能:
- 初始化了GPIOC和GPIOB的时钟;
- 配置了PC8、PC9、PC10、PC11、PC12引脚为输出模式;
- 配置了PB0引脚为输入模式,并开启了上拉;
- 如果按键按下,则全亮再全灭,否则PC8~PC12依次点亮再熄灭。
请注意,这段代码是基于STM32F10x系列的单片机实现的,如果您使用的是其他型号的单片机,请根据实际情况进行修改。
阅读全文