标题: 求助单片机C语言按键的不同时间长按识别程序 [打印本页]
作者: 1314love 时间: 2023-3-20 14:08
标题: 求助单片机C语言按键的不同时间长按识别程序
请问怎么写3s识别一次长按,Led灯亮,4秒也实现一次长按,Led灯灭。而且不能按键松开才执行效果,不能用任何循环语句(while或者for循环),只能用判断语句来识别.
作者: zhuls 时间: 2023-3-20 14:34
3秒和4秒的差别,一个开一个关,普通人实操时还真掐不准这时间。。。不能用循环,就用定时器计数吧~~
作者: xunzhaod 时间: 2023-3-20 14:38
void keyscan()
{
if(keydownd)
{
timercnt++;
if(timercnt > 3000)
{
timercnt = 0;
led_on();
}
}
else
{
timercnt = 0;
}
}
作者: 188610329 时间: 2023-3-20 16:49
不松开才执行,怎么在三秒的时候知道你不是打算按4秒呢?你不觉得这个要求前后矛盾么?
作者: 天ノ忆 时间: 2023-3-20 17:29
0秒的时候检测按下,
三秒的时候检测松开,如果松开用个标志位记下,
四秒的时候检测松开,如果松开再用个标志位记下,
检测完了根据这两个标志位就知道一共按了三秒还是4秒了。
当然,这个方法即时性不高,你可以提高检测频率从而提高即时性
作者: zhouwang4135463 时间: 2023-3-20 19:57
最好是使用定时器实现会比较方便
作者: wulin 时间: 2023-3-21 07:00
设计按键短按长按本身不是什么难题,问题是逻辑上要能说得通。长按不等按键松开就执行效果也很简单。但你按下时间达3秒,单片机如何判断你想按3秒还是4秒必须有另一个判断条件,否则办不到。比如按下时间达3秒,查询LED状态,LED状态灭则开亮,否则等待到达4秒时关闭。
作者: 人中狼 时间: 2023-3-21 08:01
这是纯粹的偷懒,想通过单一的东西获得多个结果,最后只得到一个大麻烦
作者: coody_sz 时间: 2023-3-21 09:59
检测到按下,计数即可,超级简单
作者: cxxx180 时间: 2023-3-21 11:24
MultiButton你值得拥有github.com/0x1abin/MultiButton
作者: 18680365301 时间: 2023-4-4 17:54
//10ms内处理
if(Key1_IO == 0)
{
if(Key_Count != 0xffff)
{
Key_Count++;
}
if(Key_Count == 300)
{
Led_IO = ON;
}
if(Key_Count == 400)
{
Led_IO = OFF;
}
}
else
{
Key_Count = 0;
}
作者: rctty 时间: 2023-4-6 14:41
这样吧,直接开一个定时器的输入捕获通道,然后再读捕获到的电平时间,就能判断是3秒还是4秒了;当然,确保你的按键没有抖动,但机械按键没抖动好像不太可能,那就吧抖动忽略,毕竟对于3、4秒来说抖动是很短暂的
作者: rayin 时间: 2023-4-8 08:17
用定时器1ms中断计时, 加状态机就可以实现按键防抖功能以及单按,长按,双击,等功能.
作者: li64331218 时间: 2023-4-8 10:20
不知道要实现什么效果,如果按着一直不动,按你的要求会看到灯亮一下就灭掉。然后就没有了。除非松开 再重新长按。可以开个定时器来实现,10ms中断。
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |