芯片:stm32f103rbt6
实验:跑马灯实验
实现功能:控制LED灯的亮灭,深层次:实现流水灯
LED灯代码部分:
LED.H
#ifndef _LED_H_
#define _LED_H_
//宏定义引脚
#define LED0 GPIO_Pin_8
#define LED1 GPIO_Pin_9
#define LED2 GPIO_Pin_10
#define LED3 GPIO_Pin_11
#define LED4 GPIO_Pin_12
#define LED5 GPIO_Pin_13
#define LED6 GPIO_Pin_14
#define LED7 GPIO_Pin_15
#define LEDALL GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15
#define ON 0
#define OFF 1
//函数声明
void LED_Init(void);//初始化函数
void LED_Show(unsigned int led,unsigned char state);//LED操作函数
#endif
LED.C
#include "stm32f10x.h"
#include "led.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定义结构体
//使能时钟,开启时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENABLE);
//设置推挽输出模式PP
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
//设置灯的引脚PC8~PC15
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
//设置输出频率为50MHz
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//取地址
GPIO_Init(GPIOC,&GPIO_InitStructure);
//设置时钟引脚PD2
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
//取地址
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_SetBits(GPIOD,GPIO_Pin_2);//设置PD2为高电平
GPIO_SetBits(GPIOC,LEDALL);//设置所有的灯为高电平,灯亮
GPIO_ResetBits(GPIOD,GPIO_Pin_2);//设置PD2为低电平
}
void LED_Show(unsigned int LED,unsigned char state)
{
if(state==ON){
GPIO_SetBits(GPIOD,GPIO_Pin_2);
GPIO_ResetBits(GPIOC,LED);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
}
else if(state==OFF){
GPIO_SetBits(GPIOD,GPIO_Pin_2);
GPIO_SetBits(GPIOC,LED);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
}
}
延时函数代码部分:
delay.h
#ifndef _DELAY__H
#define _DELAY__H
#include "stm32f10x.h"
void delay_ms(u16 time);
#endif
delay.c
#include "stm32f10x.h"
#include "delay.h"
void delay_ms(u16 time){
u16 i=0;
while(time--){
i=12000;
while(i--);
}
}
主函数部分:
这只是电亮单个灯的代码,可在此基础上修改可实现流水灯。
main.c
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
void delay(int i){
while(i--);
}
int main()
{
//LED初始化
LED_Init();
while(1)
{
LED_Show(LED1,ON);
delay(1000);
LED_Show(LED1,OFF);
delay(1000);
}
}
灯的代码还可以根据自己的需要修改,比如:
LED_Show(LEDALL,ON);
delay_ms(1000);
LED_Show(LEDALL,OFF);
delay_ms(700);
LED_Show(LED6|LED7|LED1,ON);
delay_ms(500);
LED_Show(LED0|LED2,ON);
delay_ms(300);
版权声明:本文为qq_56172552原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。