嵌入式蓝桥杯-led闪烁

文章介绍了如何使用STM32CubeMX设置LED灯的初始化,并通过定时器中断实现不同LED灯按不同时间间隔闪烁。作者提供了一种使用数组表示LED状态的方法,并给出了具体的代码示例,包括宏定义和中断回调函数。
摘要由CSDN通过智能技术生成

目录

1.stm32cubemx设置

2.代码实现


前言

        我做了蓝桥杯从第届6到现在的题目,发现每道题都有led的闪烁,这也是一个重要的考点我使用过两个方法前一个方法有一定的局限性,有一些题目要求不同的led闪烁不同的时间,这就要求不同的led互不影响。应为led和lcd是共用引脚的,所以官方加了一个锁存器。(对锁存器就不过的描述了)

 

 

1.stm32cubemx设置

        初始led灯PC8到PC15 ,并且开启定时器6的中断,我这里设置的中断为0.2s,大家可以根据需求改变自己的中断时间。

 

2.代码实现

        我的思路是将每个led灯的亮灭用0和1来表示,八个led灯就可以使用一个数组来表示

//宏定义

#define ON GPIO_PIN_RESET
#define OFF GPIO_PIN_SET
#define led1(a)  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,a)
#define led2(a)  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,a)
#define led3(a)  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10,a)
#define led4(a)  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,a)
#define led5(a)  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_12,a)
#define led6(a)  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,a)
#define led7(a)  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,a)
#define led8(a)  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,a)
#define SUO_K  HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
#define SUO_G  HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);


//闪烁函数
void led_ss(uint8_t *str)
{		
	led1(OFF);
	led2(OFF);
	led3(OFF);
	for(uint8_t i=0;i<4;i++)
	{
		if(str[i])
		{
			switch (i)
			{
				case 0:
					led1(ON);
				break;
				case 1:
					led2(ON);
				break;
				case 2:
					led3(ON);
				break;
				
			}
		}
	}
	led4(OFF);
	led5(OFF);
	led6(OFF);
	led7(OFF);
	led8(OFF);
	SUO_K;
	SUO_G;
}

中断回调函数 

void HAL_TIM_PeriodElapsedCallback  ( TIM_HandleTypeDef *  htim ) 
{
	if(htim==&htim6)
	{
		static uint8_t i=0,x=0,u=0;
		static uint8_t num=4,l=0;
		//led0
		num++;
		if(i==0&&num==5)
		{
			str3[0]=1;
			i=1;
			num=0;
		}
		else if(num==5)
		{
			str3[0]=0;
			i=0;
			num=0;
		}
		//led1
		if(x==0)
		{
			x=1;
			str3[2]=1;

		 }	
	     else 
	    {    
	        x=0;
			str3[2]=0;
		}
		
	}
}

        这样我们就可以让两个不同的led灯,间隔不同的时间。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值