STM32cubemx 按键检测和扫描按键
stm32cubemx工程和keil工程
提取码:h57s
使用的是stm32_h750
#define KEY_SCAN//选择功能
#ifdef KEY_SCAN
i=Scan_key_A();
#else
i=Scan_key_B();
#endif
switch(i)
{
....//按键按下对应的功能
}
uint8_t Scan_key_A() //
{
uint8_t keystate=0;
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==KEY_ON)
{
while (HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==KEY_ON);
keystate=1;
return keystate;
}
if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)==KEY_ON)
{
while (HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)==KEY_ON);
keystate=2;
return keystate;
}
return 0;
}
uint8_t Scan_key_B()//扫描按键 可以两个按键都按下
{
uint8_t keystate=0;
uint8_t keystate_B=0;
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==KEY_ON)
{
keystate=1;
}
if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)==KEY_ON)
{
keystate_B=1;
}
keystate=keystate*2+keystate_B;
return keystate;
}
想要实现长按,短按,可以使用状态机,使用定时器,去计时,实现长按,短按功能。
GPIO写函数
HAL_GPIO_WritePin(GPIOG,GPIO_PIN_3,GPIO_PIN_RESET);
GPIO读函数
HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_0);
GPIO翻转函数
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_0);
延时函数ms
HAL_Delay(100);
MY_QuinTA的笔记