实验介绍
用stm32f103vet6实现四个灯的流水灯,采用gpio的通用推挽输出控制led亮灭,通过500ms延时实现流水效果
实验效果如下视频
流水灯
实验代码
main.c文件
#include "stm32f10x.h" // Device header
#include "Led.h"
#include "systick.h"
int main()
{
led_init();SysTick_Init();
while(1)
{
led1toggle();
Delay_ms(500);
led1toggle();
led2toggle();
Delay_ms(500);
led2toggle();
led3toggle();
Delay_ms(500);
led3toggle();
led4toggle();
Delay_ms(500);
led4toggle();
}
}
led.c文件
#include "stm32f10x.h" // Device header
#define led1_rcc RCC_APB2Periph_GPIOA
#define led2_rcc RCC_APB2Periph_GPIOC
#define led3_rcc RCC_APB2Periph_GPIOA
#define led4_rcc RCC_APB2Periph_GPIOA
#define led2_gpio GPIOA
#define led2_pin GPIO_Pin_8
#define led1_gpio GPIOC
#define led1_pin GPIO_Pin_9
#define led3_gpio GPIOA
#define led3_pin GPIO_Pin_11
#define led4_gpio GPIOA
#define led4_pin GPIO_Pin_12
void led_init()
{
RCC_APB2PeriphClockCmd(led1_rcc|led2_rcc,ENABLE);
GPIO_InitTypeDef gpiostructure;
gpiostructure.GPIO_Mode=GPIO_Mode_Out_PP;
gpiostructure.GPIO_Pin=led2_pin|led3_pin|led4_pin;
gpiostructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_Init(led2_gpio,&gpiostructure);
gpiostructure.GPIO_Pin=led1_pin;
gpiostructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_Init(led1_gpio,&gpiostructure);
GPIO_WriteBit(led1_gpio,led1_pin,Bit_SET); //¹ØµÆ
GPIO_WriteBit(led2_gpio,led2_pin,Bit_SET); //¹ØµÆ
GPIO_WriteBit(led3_gpio,led3_pin,Bit_SET); //¹ØµÆ
GPIO_WriteBit(led4_gpio,led4_pin,Bit_SET); //¹ØµÆ
}
void led1(uint8_t x) //ÁÁÃðled1
{
GPIO_WriteBit(led1_gpio,led1_pin,(BitAction)x);
}
void led1toggle() //·×ªled1
{
if(GPIO_ReadOutputDataBit(led1_gpio,led1_pin)==Bit_RESET)
led1(1);
else
led1(0);
}
void led2(uint8_t x) //ÁÁÃðled2
{
GPIO_WriteBit(led2_gpio,led2_pin,(BitAction)x);
}
void led2toggle() //·×ªled2
{
if(GPIO_ReadOutputDataBit(led2_gpio,led2_pin)==Bit_RESET)
led2(1);
else
led2(0);
}
void led3(uint8_t x) //ÁÁÃðled1
{
GPIO_WriteBit(led3_gpio,led3_pin,(BitAction)x);
}
void led3toggle() //·×ªled1
{
if(GPIO_ReadOutputDataBit(led3_gpio,led3_pin)==Bit_RESET)
led3(1);
else
led3(0);
}
void led4(uint8_t x) //ÁÁÃðled1
{
GPIO_WriteBit(led4_gpio,led4_pin,(BitAction)x);
}
void led4toggle() //·×ªled1
{
if(GPIO_ReadOutputDataBit(led4_gpio,led4_pin)==Bit_RESET)
led4(1);
else
led4(0);
}
实验心得
本次流水灯非常成功