用stm32控制8个LED依次闪烁代码
时间: 2024-05-02 14:22:01 浏览: 143
以下是使用STM32控制8个LED依次闪烁的代码:
```
#include "stm32f10x.h"
int main(void)
{
// Enable clock for GPIOC and GPIOA
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
// Set PC0 - PC7 as output mode
GPIOC->CRL &= ~GPIO_CRL_CNF0;
GPIOC->CRL |= GPIO_CRL_MODE0;
GPIOC->CRL &= ~GPIO_CRL_CNF1;
GPIOC->CRL |= GPIO_CRL_MODE1;
GPIOC->CRL &= ~GPIO_CRL_CNF2;
GPIOC->CRL |= GPIO_CRL_MODE2;
GPIOC->CRL &= ~GPIO_CRL_CNF3;
GPIOC->CRL |= GPIO_CRL_MODE3;
GPIOC->CRL &= ~GPIO_CRL_CNF4;
GPIOC->CRL |= GPIO_CRL_MODE4;
GPIOC->CRL &= ~GPIO_CRL_CNF5;
GPIOC->CRL |= GPIO_CRL_MODE5;
GPIOC->CRL &= ~GPIO_CRL_CNF6;
GPIOC->CRL |= GPIO_CRL_MODE6;
GPIOC->CRL &= ~GPIO_CRL_CNF7;
GPIOC->CRL |= GPIO_CRL_MODE7;
// Set PA0 as input mode
GPIOA->CRL &= ~GPIO_CRL_CNF0;
GPIOA->CRL &= ~GPIO_CRL_MODE0;
while (1)
{
// Check if button is pressed
if (GPIOA->IDR & GPIO_IDR_IDR0)
{
// Turn on LED 0
GPIOC->BSRR |= GPIO_BSRR_BS0;
// Wait for 1 second
for (int i = 0; i < 1000000; i++);
// Turn off LED 0 and turn on LED 1
GPIOC->BSRR |= GPIO_BSRR_BR0;
GPIOC->BSRR |= GPIO_BSRR_BS1;
// Wait for 1 second
for (int i = 0; i < 1000000; i++);
// Turn off LED 1 and turn on LED 2
GPIOC->BSRR |= GPIO_BSRR_BR1;
GPIOC->BSRR |= GPIO_BSRR_BS2;
// Wait for 1 second
for (int i = 0; i < 1000000; i++);
// Turn off LED 2 and turn on LED 3
GPIOC->BSRR |= GPIO_BSRR_BR2;
GPIOC->BSRR |= GPIO_BSRR_BS3;
// Wait for 1 second
for (int i = 0; i < 1000000; i++);
// Turn off LED 3 and turn on LED 4
GPIOC->BSRR |= GPIO_BSRR_BR3;
GPIOC->BSRR |= GPIO_BSRR_BS4;
// Wait for 1 second
for (int i = 0; i < 1000000; i++);
// Turn off LED 4 and turn on LED 5
GPIOC->BSRR |= GPIO_BSRR_BR4;
GPIOC->BSRR |= GPIO_BSRR_BS5;
// Wait for 1 second
for (int i = 0; i < 1000000; i++);
// Turn off LED 5 and turn on LED 6
GPIOC->BSRR |= GPIO_BSRR_BR5;
GPIOC->BSRR |= GPIO_BSRR_BS6;
// Wait for 1 second
for (int i = 0; i < 1000000; i++);
// Turn off LED 6 and turn on LED 7
GPIOC->BSRR |= GPIO_BSRR_BR6;
GPIOC->BSRR |= GPIO_BSRR_BS7;
// Wait for 1 second
for (int i = 0; i < 1000000; i++);
// Turn off LED 7
GPIOC->BSRR |= GPIO_BSRR_BR7;
}
}
}
```
在这个代码中,我们首先启用了GPIOC和GPIOA的时钟,然后将PC0-PC7设置为输出模式,将PA0设置为输入模式。
在主循环中,我们检查按钮是否被按下。如果按钮被按下,我们依次点亮每个LED并等待1秒钟,然后将每个LED熄灭并点亮下一个LED,直到最后一个LED熄灭。如果按钮没有被按下,代码将一直保持在这个循环中。
请注意,为了产生1秒的延迟,我们使用一个循环,该循环执行了1000000次。这并不是一个精确的延迟方法,但对于此示例程序足够了。在实际应用中,最好使用计时器来实现精确的延迟。
阅读全文
相关推荐















