(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();
}
}

CSDN:https://blog.csdn.net/2301_79116943/article/details/142871186?fromshare=blogdetail&sharetype=blogdetail&sharerId=142871186&sharerefer=PC&sharesource=2301_79116943&sharefrom=from_link