首先要看一下按键的原理图
注意开关引脚的MODE时读入模式
#define KEY HAL_GPIO_ReadPin(GPIOH,GPIO_PIN_2)
int flag=1;//开关开始是弹起状态的
int Key_Scan(void)
{
//on-0,in-1
//botton down
if((KEY==0)&&(flag==1))//如果开关按下而且开关先前是没有按下的(保险判断)
{
HAL_Delay (10);//灵敏度、防抖
if(KEY==0)
{
flag=0;
return 1;
}
}
//botton up
if((KEY==1)&&(flag==0))//同理
{
HAL_Delay (10);
if(KEY==1)
flag=1;
}
return 0;
}
注意上面的程序中,只有开关从弹起状态到按下状态时,才判定为按键一次。因为这个程序的目的是按一次按键,灯的亮灭状态反转一次;
主函数里面:
keyval = Key_Scan ();
if(keyval == 1)
HAL_GPIO_TogglePin (GPIOB,GPIO_PIN_1);