按钮长按检测

2个员额/0个新员额
最后一篇文章
刘銮002
离线
最后一次见到:1天6小时前
加入:2015-11-27 14:24
按钮长按检测

我已经通过以下功能成功地按下了按钮,但是我想增加检测来区分短按和长按。长按时间大于3秒。

你对如何做到这一点有什么想法或参考资料吗?

作废按钮(作废)
{
如果((!(GetWord16(P0_DATA_REG)和(1<<0)))
{
KeyInt_msTime=loop_timer_gettime();
按钮标志=3;
应用简易计时器(10,循环计时器);
}

if(GetBits16(系统状态寄存器,PER向下))
periph_init();

wkupct_寄存器_回调(按下按钮);

wkupct启用irq(0x000001、0x000001、1、0x00);
如果(按钮标志==2)
{
}

如果(按钮标志==3)
{
}
}

作废用户\应用\初始化(作废)
{
//初始化特定于制造商的数据
mnf_data_init();
_init()上的默认_app_;
wkupct启用irq(0x000001、0x000001、1、0x00)//刘林奇

}

设备:
MT_对话框
离线
最后一次见到:3周2天前
工作人员
加入:2015-06-08 11:34
你好,刘銮002,

你好,刘銮002,

没有用于检测和区分长按和短按的参考应用程序,但一个想法是为每个按下时间段设置两个不同的计时器,一旦按下按钮,这两个计时器都应开始计数。当第一个计时器结束时,应检查按钮是否仍被按下,以及是否在短时间计时器处理程序()中设置了标志(短时间计时器处理程序)。当长计时器结束时,如果按钮仍被按下,则还应检入长计时器处理程序()。现在,如果按钮仍然按下,这意味着交互是长按,并且应该在长按时执行指定的功能。如果长\u计时器\u处理程序()中的按钮尚未按下,并且设置了短\u计时器\u处理程序()中的标志,则表示该交互是短按并执行短按函数()。

谢谢你的对话