STM32F103学习笔记,流水灯

芯片: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);

笔记灵感来源:蓝桥杯嵌入式学习——跑马灯设计_qiqicholate的博客-CSDN博客

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值