Bootstrap

【STM32学习】(3)流水灯的实现

学习单片机都要学习流水灯,因为流水灯比较简单,易于实现,效果也比较好呈现。

这里我用的单片机型号为STM32F103VET

8个LED灯接在了PA口的低八位。

代码实现如下:

: 对于新手来说,暂时先不要分文件写代码,我们将功能都写在了main函数中,便于大家理解,后期要将程序模块化)

/*

作者:XiaoCaiDaYong
时间:2019.9.26
功能:流水灯
接线:PA0-PA7接在LED1-LED8上

实现步骤:
	1.开启GPIOA时钟
	2.设置GPIOA指定口的工作模式(推挽输出,速度为50MHz)
	3.数据的输出

*/
#include "stm32f10x.h"                  // Device header

unsigned char led[]={0X80,0X40,0X20,0X10,0X08,0X04,0X02,0X01};
void delay(void);    //    函数的声明
int main(void)
{
	int n;
	unsigned char temp = 0X01;
	RCC_DeInit();
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);	//	开启时钟
	GPIO_InitTypeDef GPIO_InitStruct;	
	GPIO_DeInit(GPIOA);		//	将外设GPIOA 寄存器重设置为缺省值
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All;	//  选中所有管脚,其实只用了低八位管脚
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;	//	推挽输出
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	while(1)
	{
		temp = 0X01;
		for(n=0;n<8;n++)
		{
			GPIOA->ODR = temp;    //    寄存器实现,也可以用 GPIO_Write()函数实现
			temp = temp<<1;
			delay();
		}
	}
}

void delay(void)
{
	int i,j;
	for(i=0;i<400;i++)
	{
		for(j=0;j<400;j++);
	}
}

效果如下:

;