物联网CC2530按键单双击分别控制两灯

cnblogs 2024-10-14 16:39:00 阅读 92

(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



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。