stm32控制led灯

mai.c

#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "led.h"

extern unsigned char flag_1ms;

u8	sysstat=0;


int main (void)
{
 
 
	SysTick_Config(72000000/1000);  //定时1毫秒


	Led_Init();   //led gpio初始化

	while(1)
  {



		if(flag_1ms==1)  //1毫秒进来一次
		{

			flag_1ms=0;
      Led_Poll();  //LED循环显示
    }

}
}

led.h

#ifndef __LED_H
#define __LED_H	 

#include "stm32f10x.h"

/* 定义LED连接的GPIO端口, 用户只需要修改下面的代码即可改变控制的LED引脚 */
// R-红色
#define LED1_GPIOB    	GPIOB			              /* GPIO端口 */
#define LED1_GPIO_CLK 	    RCC_APB2Periph_GPIOB		/* GPIO端口时钟 */
#define LED1_GPIO_PIN		GPIO_Pin_5			        /* 连接到SCL时钟线的GPIO */

// G-绿色
#define LED2_GPIOB    	GPIOB			              /* GPIO端口 */
#define LED2_GPIO_CLK 	    RCC_APB2Periph_GPIOB		/* GPIO端口时钟 */
#define LED2_GPIO_PIN		GPIO_Pin_0			        /* 连接到SCL时钟线的GPIO */

// B-蓝色
#define LED3_GPIOB    	GPIOB			              /* GPIO端口 */
#define LED3_GPIO_CLK 	    RCC_APB2Periph_GPIOB		/* GPIO端口时钟 */
#define LED3_GPIO_PIN		GPIO_Pin_1			        /* 连接到SCL时钟线的GPIO */

//方法1
#define LED1_ON  GPIO_WriteBit(GPIOB,GPIO_Pin_0,Bit_RESET)   //点亮LED1
#define LED1_OFF GPIO_WriteBit(GPIOB,GPIO_Pin_0,Bit_SET)     //熄灭LED1
#define LED2_ON  GPIO_WriteBit(GPIOB,GPIO_Pin_1,Bit_RESET)   //点亮LED2
#define LED2_OFF GPIO_WriteBit(GPIOB,GPIO_Pin_1,Bit_SET)     //熄灭LED2
#define LED3_ON  GPIO_WriteBit(GPIOB,GPIO_Pin_5,Bit_RESET)   //点亮LED2
#define LED3_OFF GPIO_WriteBit(GPIOB,GPIO_Pin_5,Bit_SET)     //熄灭LED2

	//方法2
//#define LED1_ON  GPIO_WriteBit(GPIOB,GPIO_Pin_0,(BitAction)(0));   //点亮LED1
//#define LED1_OFF GPIO_WriteBit(GPIOB,GPIO_Pin_0,(BitAction)(1));    //熄灭LED1
//#define LED2_ON  GPIO_WriteBit(GPIOB,GPIO_Pin_1,(BitAction)(0));  //点亮LED2
//#define LED2_OFF GPIO_WriteBit(GPIOB,GPIO_Pin_1,(BitAction)(1));   //熄灭LED2
//#define LED3_ON  GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(0));   //点亮LED2
//#define LED3_OFF GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1));     //熄灭LED2	
	
		//方法3
//#define LED1_OFF  GPIO_SetBits(GPIOB,GPIO_Pin_0);    //  LED灯都为高电平
//#define LED1_ON GPIO_ResetBits(GPIOB,GPIO_Pin_0);    //  LED灯都为低电平
//#define LED2_OFF  GPIO_SetBits(GPIOB,GPIO_Pin_1);    //  LED灯都为高电平
//#define LED2_ON   GPIO_ResetBits(GPIOB,GPIO_Pin_1);  //  LED灯都为低电平
//#define LED3_OFF GPIO_SetBits(GPIOB,GPIO_Pin_5);     //  LED灯都为高电平
//#define LED3_ON  GPIO_ResetBits(GPIOB,GPIO_Pin_5);   //  LED灯都为低电平
	


void Led_Init(void);   //led gpio初始化

void	Led_OFF(void);  // LED3全灭 
void	Led_Poll(void); //LED循环显示

#endif /* __LED_H */


led.c

#include "led.h"

typedef	struct  //led变量成员
{
	u8 timer;
  u16 num;
     
}led_ctr_type;

led_ctr_type led_ctr = {0,0};  //变量初始化

void Led_Init(void)
{		
		/*定义一个GPIO_InitTypeDef类型的结构体*/
		GPIO_InitTypeDef GPIO_InitStructure;

		/*开启LED相关的GPIO外设时钟*/
		RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
		/*选择要控制的GPIO引脚*/
		GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN|LED2_GPIO_PIN|LED3_GPIO_PIN;	

		/*设置引脚模式为通用推挽输出*/
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   

		/*设置引脚速率为50MHz */   
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

		/*调用库函数,初始化GPIO*/
		GPIO_Init(GPIOB, &GPIO_InitStructure);	
}

void	Led_OFF(void)  // LED3全灭 
{
	LED1_OFF; 
  LED2_OFF;
  LED3_OFF;

}

void	Led_Poll(void)  // LED循环显示
{

			switch(led_ctr.timer)   //index每500毫秒加一次,隔执行500毫秒case(X) 跳转一次
			{
				case 0:LED1_ON;  break;  // LED1亮
				case 1:Led_OFF(); break;   // LED全灭
				case 2:LED2_ON;break;     //LED2亮
				case 3:Led_OFF(); break;   // LED全灭
				case 4:LED3_ON;break;     //LED3亮
				case 5:Led_OFF(); break;   // LED全灭
			}
			
		led_ctr.num++;
		if(led_ctr.num>=500)   //定时500毫秒
		{
			led_ctr.num=0;       
			led_ctr.timer++;   //index每500毫秒加一次
			if(led_ctr.timer>5){led_ctr.timer=0;}   //timer设置小于5,因为case只写到5
		}
	}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值