3个帖子/ 0个新帖子
最后发表
liuluan002
离线
最后看到:8个月5天前
加入:2015-11-27 14:24
按钮按下的时间

嗨,对话框中,

我正在申请检测按钮按下时间(我需要知道按钮按下了多长时间)。你有解决方案吗?

我把我的代码写在下面:
空白press_button(空白)

如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))
periph_init ();

if((!(GetWord16(P0_DATA_REG)) & (1 << 0)))) . GetWord16(P0_DATA_REG)) & (1 << 0)))) . GetWord16(P0_DATA_REG))

KeyInt_msTime = loop_timer_gettime ();
button_flag = 3;

wkupct_register_callback (press_button);
Wkupct_enable_irq (0x000001, 0x000001, 1, 0x14);
如果(button_flag = = 3)

#如果DEBUG_LOG3
printf_string(“国旗= = 2 \ r \ n”);
uart2_init (UART_BAUDRATE_115K2 3);
# endif

空白user_app_init(空白)

mnf_data_init ();
default_app_on_init ();
wkupct_register_callback (press_button);
Wkupct_enable_irq (0x000001, 0x000001, 1, 0x14);

设备:
MT_dialog
离线
最后看到:4个月2个星期前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

有一个例子很长一段时间按钮在智能标记应用程序与内核定时器,如果多恩不适合你,我想,您可以使用一个h / w计时器开始当你按下按钮,停止当释放它,问题是,你要保持清醒为了定时器计数,当设备处于休眠模式时,唯一计数的计时器是内核计时器。

在你放置的代码,你启用了一个中断,当按钮被按下时触发,但我不知道你是如何测量时间(loop_timer_gettime吗?),我想,你可以设置一个计时器,当按钮被按下计时器10 ms的最低分辨率和计算时间定时器回调函数,当按钮被释放你可以阅读的价值增加从计时器按钮被按下的时间。

由于MT_dialog

Max44
离线
最后看到:11个月,2个星期前
加入:2016-02-08等等
我要补充一点,我是外地的

我要补充的是,我现在正在现场测试一个5秒唤醒时间的设备。它的实现非常好,就像MT建议的内核计时器一样。从用户的角度来看,你可以通过按住按钮直到LED灯闪烁来唤醒。在唤醒按钮回调中,我开始一个1秒的计时器。在计时器回调中,我检查按钮是否仍然按下。如果是,我重新启动计时器并增加第二次计数。如果按钮在按钮计时器回调中不是活动的,我重置计数器并退出,而不重新启动计时器。我现在处于延长睡眠模式,所以我还是会继续睡觉。当第二个计时器回调到5秒计数,我闪光的LED和继续启动BLE唤醒。

我注意到的一件事是,在我设置的5秒计数中,LED闪烁的时间明显超过5秒。我假设这是由于处于睡眠模式和一些延迟时间必须检测和开始处理唤醒按钮。对我来说,这不是问题。你可以很容易地调整计时器和计数器来满足你的需要。