(1)确定思路单击和双击的效果分别是怎样的(此文章采用简单的延时函数不涉及中断)。首先可以定义一个普通延时delay和一个标志位count变量,这里需有个延时阈值咱们直接可以宏定义B值(这里需要注意宏定义的值一定要大一些否则双击效果不会触发)。

(2)在按下按键等待松开后,让变量count自增去与B比较,小于B时延时让count自增,期间按键被再次按下则实现双击效果

(3)如果在count值自增期间按键并没有被再次按下则实现单击效果(这里单击效果可能略有延时,可通过调节B值解决)

#include <iocc2530.h>
#define B 1000
unsigned int count = 0;//定义计时变量

void Init_port()//引脚初始化
{
  P1DIR |= 0x03;
  P1SEL &= ~0x03;
}

void delay(unsigned int time)//定义一个简单延时
{
  while(time--);
}

void Scan_P1_2()
{
  if(P1_2 == 0)
  {
    delay(50);//延时消抖
    if(P1_2 == 0)//确认按键按下
    {
      while(P1_2 == 0);//循环检测按键按下
      while(count < B)//上面已定义count值为0,小于B再去检测按键是否被再次按下
      {
        delay(100);
        count++;//让计数变量自增
        if(P1_2 == 0)
        {
          delay(100);//延时消抖
          if(P1_2 == 0)//确认再次被按下
          {
            while(P1_2 == 0);
            P1_0 = ~P1_0;
            count = 0;//实现效果后将计数变量置为0
            break;//跳出循环(while(count < B))
          }
        }
      }
      if(count >= B)//如果count值自增到延时阈值B之前按键没有再次按下实现单击效果
      {
        P1_1 = ~P1_1;
        count = 0;
      }
    }
  }
}
void main(void)
{
    Init_port();
    while(1)
    {
      Scan_P1_2();
    }
}

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐