首先要在STM32cubemax中把PB0,PB1,PB2,PA0设置为输入模式
uint8_t key_val;
uint8_t key_down,key_up,key_old;
uint8_t key_scan(void)
{
uint8_t key_val=0;
if (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==GPIO_PIN_RESET)
{
key_val=1;
}
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==GPIO_PIN_RESET)
{
key_val=2;
}
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==GPIO_PIN_RESET)
{
key_val=3;
}
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)
{
key_val=4;
}
return key_val;
}
void key_proc(void)
{
key_val=key_scan();
key_down=key_val&(key_val^key_old);
key_up=key_val&(key_val^key_old);
key_old=key_val;
if(key_down==1)
{
led_show(0x01);
}
if(key_down==2)
{
led_show(0x02);
}
}
前面为按键的扫描,后面为消抖加按键的检测。
在比赛中一定要熟练掌握那三行代码
key_down=key_val&(key_val^key_old);
key_up=~key_val&(key_val^key_old);
key_old=key_val;
简化记忆
d=v&v^o
u=~v&v^o
o=v