利用STM32系列开发板与计算机Keil编程设计,载入程序以实现目标:
LED灯闪烁模式自动轮换------模式1:流水灯从左到右,从右到左依次闪烁三次
模式2:全部流水灯闪烁五次
模式3:流水灯编号1、3与流水灯编号2、4,依次闪烁三次
模式4:"流水灯1->流水灯4->流水灯2->流水灯3"依次点亮,循环四次
简单提供代码思路如下:
cpp
#include "stm32f4xx.h"
void delay_500ms(void)
{
volatile unsigned int i, j;
for(i = 0; i < 8400; i++)
{
for(j = 0; j < 1000; j++);
}
}
void delay(void)
{
unsigned int i,j=4000;
while(j--)
{
for(i=0;i<200;i++);
}
}
void LED_Init(void)
{
RCC->AHB1ENR |= (1<<4);
GPIOE->MODER &= ~(0xFF << (2*2));
GPIOE->MODER |= (0x55 << (2*2));
GPIOE->OTYPER &= ~(0x3C);
GPIOE->OSPEEDR |= (0x55 << (2*2));
GPIOE->PUPDR &= ~(0xFF << (2*2));
}
void LED_Set(unsigned char leds)
{
GPIOE->ODR = (GPIOE->ODR & ~0x3C) | ((leds & 0x0F) << 2);
}
void mode_flow_light(void)
{
unsigned char i, j;
unsigned char led_pattern[4] = {0x1, 0x2, 0x4, 0x8};
for(j=0; j<3; j++)
{
for(i=0; i<4; i++)
{
LED_Set(led_pattern[i]);
delay_500ms(); }
for(i=0; i<4; i++)
{
LED_Set(led_pattern[3-i]);
delay_500ms(); }
}
}
void mode_all_blink(void)
{
unsigned char i;
for(i=0; i<5; i++)
{
LED_Set(0x0F);
delay_500ms();
LED_Set(0x00);
delay_500ms();
}
}
void mode_13_24_blink(void)
{
unsigned char i;
for(i=0; i<3; i++)
{
LED_Set(0x05);
delay_500ms();
LED_Set(0x00);
delay_500ms();
LED_Set(0x0A);
delay_500ms();
LED_Set(0x00);
delay_500ms();
}
}
void mode_sequence_light(void)
{
unsigned char i, j;
unsigned char sequence[4] = {0x1, 0x8, 0x2, 0x4};
for(j=0; j<4; j++)
{
for(i=0; i<4; i++)
{
LED_Set(sequence[i]);
delay_500ms();
}
LED_Set(0x00); delay_500ms(); }
}
int main(void)
{
unsigned char current_mode = 0;
LED_Init();
LED_Set(0x00);
while(1)
{
switch(current_mode)
{
case 0:
mode_flow_light();
break;
case 1:
mode_all_blink();
break;
case 2:
mode_13_24_blink();
break;
case 3:
mode_sequence_light();
break;
}
current_mode = (current_mode + 1) % 4;
LED_Set(0x00);
delay_500ms();
delay_500ms();
}
}