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

一、控制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工作时灯亮、不工作时灯灭

你可能感兴趣的:(蓝桥杯嵌入式,蓝桥杯,嵌入式硬件,stm32)