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