stm32单片机按键的程序扫描法处理方式

根据需求分为一下模式:

第一、一直触发,当按键电平一直保持一个状态,结果也保持一个状态那么程序如下:

	 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后控制什么条件都是可以自己填写的。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值