根据需求分为一下模式:
第一、一直触发,当按键电平一直保持一个状态,结果也保持一个状态那么程序如下:
if( HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_7)==0) //继电器1
{
HAL_Delay(20);
if( HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_7)==0)
{
//这里写下案件要干的事 比如灯亮
}else
//这里写下灯灭灯灭 消抖灯灭,可以不写,但不严谨
}else //这里写下等灭 常态灭灯
上述代码,20ms的延时很重要,可以防止消抖,该程序主要用于检测到一个电平来临时该怎么操作,未检测到电平时,执行另一项操作的一句。
第二、点触式,按键为点触
if( HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_7)==0) //继电器1
{
HAL_Delay(20);
if( HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_7)==0)
{
//在此处输入点触式按键按下的条件语句
//比如说 灯亮
while(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_7)==0);
}
}
该代码,主要是用于点触式按键的程序,且功能单一。
第三、点触式组合按键程序,包含长按键、短按建的控制方式。
if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_7)==0)
{
if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_7)==0)
{
while(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_7)==0)
{
t_key++;
Delay_ms(25);
if(t_key>40)break;
}
if(t_key<41)//1秒以下为短按---------------
{
// 此处写下按键短按条件 比如说灯亮
}
else
{
// 此处写下长按条件 比如说灯灭
}
}
}
该代码,主要是用于长按、短按判断。短按1s以内,控制什么,长按1s后控制什么条件都是可以自己填写的。