蓝桥杯嵌入式按键控制led灯

文章详细描述了如何通过GPIO接口函数控制LED灯,包括单个LED灯的点亮和熄灭,以及通过16位字节控制多个LED灯的全亮和闪烁,利用位操作实现灯的开关和工作状态切换。
摘要由CSDN通过智能技术生成

一、控制led灯

1.led接口函数

//函数名:LED_Disp
//入口参数:ucLed
//出口参数:void
//函数功能:LD8-LD1对应ucLed的8个位
void LED_Disp(unsigned char ucLed)
{
	//**将所有的灯熄灭
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
												|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);		
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);

	//根据ucLed的数值点亮相应的灯
	HAL_GPIO_WritePin(GPIOC, ucLed<<8, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);		
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);	
	
}

 2.通过传入2个字节16位控制led灯亮灭

void Key_Proc()
{
	if((uwTick - uwTick_Set_Point) < 100) return;
	 uwTick_Set_Point = uwTick;
	ucKey_Val = Key_Scan();
	unKey_Down = ucKey_Val & (ucKey_Old ^ ucKey_Val); 
	ucKey_Up = ~ucKey_Val & (ucKey_Old ^ ucKey_Val);	
	ucKey_Old = ucKey_Val;
	if(unKey_Down == 4)
	{
		LED_Disp(0xff);
		
	}
	if(unKey_Down == 1)
	{
		LED_Disp(0x00);
	}
	
}
代码分析:通过传入16进制0xff也就是1111 1111使得灯全亮。

2.通过与或的方法控制led灯闪烁 

int led = 0;
void Key_Proc()
{
	if((uwTick - uwTick_Set_Point) < 100) return;
	 uwTick_Set_Point = uwTick;
	ucKey_Val = Key_Scan();
	unKey_Down = ucKey_Val & (ucKey_Old ^ ucKey_Val); 
	ucKey_Up = ~ucKey_Val & (ucKey_Old ^ ucKey_Val);	
	ucKey_Old = ucKey_Val;
	if(unKey_Down == 4)
     	led |= 0xff;
	else
		led &= ~0xff;
		
	if(unKey_Down == 1)
		led |= 0x04;
	else
		led &= ~0x04;

	LED_Disp(led);
}

代码分析:led= 0;即led = 0000 0000;led |=0xff,即 0000 0000 | 11111 1111后为 1111 1111,即0xff。|=是先按位或再赋值操作

备注:此方法的 if与 else 搭配可以是让ADC工作时灯亮、不工作时灯灭

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值