STM32:八个LED交叉闪烁实现方法详解
一、八个LED交叉闪烁
二、Proteus仿真图
三、程序代码
//main.c
#include "includes.h"
void delay (u32 i)
{
while(i--);
}
int main(void)
{
LEDInit();
KeyInit();
LED(0);
while (1)
{
GPIO_Write(GPIOA ,0x0055); //交叉闪烁
delay (6000);
GPIO_Write(GPIOA ,0x00aa);
delay(6000);
}
}
//led.h
#include "vartypes.h"
#ifndef _LED_H
#define _LED_H
void LEDInit(void );
void LED(Int08U );
#endif
//led.c
#include "includes.h"
void LEDInit(void )
{
GPIO_InitTypeDef g;
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA ,ENABLE );
g.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
g.GPIO_Mode =GPIO_Mode_Out_PP ;
g.GPIO_Speed =GPIO_Speed_10MHz ;
GPIO_Init(GPIOA,&g );
}
void LED (Int08U state)
{
if(state==0)
{
GPIO_Write(GPIOA ,0x0055);
}else
{
GPIO_Write(GPIOA ,0x00aa);
}
}
//key.h
#include "vartypes.h"
#ifndef _KEY_H
#define _KEY_H
#define KEY_ON 1
#define KEY_OFF 0
void KeyInit(void );
Int08U KeyScan(void );
#endif
//key.c
#include "includes.h"
void KeyInit()
{
GPIO_InitTypeDef g;
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOB,ENABLE );
g. GPIO_Pin =GPIO_Pin_0 ;
g. GPIO_Mode =GPIO_Mode_IPD ;
GPIO_Init (GPIOB ,&g);
}
Int08U KeyScan()
{
return GPIO_ReadInputDataBit (GPIOB,GPIO_Pin_0 );
}
//includes.h
#include "stm32f10x.h"
#include "vartypes.h"
#include "led.h"
#include "key.h"
作者:茶色山野