找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1034|回复: 13
收起左侧

求助单片机C语言按键的不同时间长按识别程序

  [复制链接]
ID:1041297 发表于 2023-3-20 14:08 | 显示全部楼层 |阅读模式
请问怎么写3s识别一次长按,Led灯亮,4秒也实现一次长按,Led灯灭。而且不能按键松开才执行效果,不能用任何循环语句(while或者for循环),只能用判断语句来识别.
回复

使用道具 举报

ID:69038 发表于 2023-3-20 14:34 | 显示全部楼层
3秒和4秒的差别,一个开一个关,普通人实操时还真掐不准这时间。。。不能用循环,就用定时器计数吧~~
回复

使用道具 举报

ID:839835 发表于 2023-3-20 14:38 | 显示全部楼层
void keyscan()
{
   if(keydownd)
{
  timercnt++;
  if(timercnt > 3000)
  {
     timercnt  = 0;
     led_on();
  }
}
else
{
timercnt  = 0;
}
}
回复

使用道具 举报

ID:624769 发表于 2023-3-20 16:49 来自手机 | 显示全部楼层
不松开才执行,怎么在三秒的时候知道你不是打算按4秒呢?你不觉得这个要求前后矛盾么?
回复

使用道具 举报

ID:139866 发表于 2023-3-20 17:29 | 显示全部楼层
0秒的时候检测按下,
三秒的时候检测松开,如果松开用个标志位记下,
四秒的时候检测松开,如果松开再用个标志位记下,
检测完了根据这两个标志位就知道一共按了三秒还是4秒了。

当然,这个方法即时性不高,你可以提高检测频率从而提高即时性
回复

使用道具 举报

ID:354404 发表于 2023-3-20 19:57 | 显示全部楼层
最好是使用定时器实现会比较方便
回复

使用道具 举报

ID:213173 发表于 2023-3-21 07:00 | 显示全部楼层
设计按键短按长按本身不是什么难题,问题是逻辑上要能说得通。长按不等按键松开就执行效果也很简单。但你按下时间达3秒,单片机如何判断你想按3秒还是4秒必须有另一个判断条件,否则办不到。比如按下时间达3秒,查询LED状态,LED状态灭则开亮,否则等待到达4秒时关闭。
回复

使用道具 举报

ID:384109 发表于 2023-3-21 08:01 | 显示全部楼层
这是纯粹的偷懒,想通过单一的东西获得多个结果,最后只得到一个大麻烦
回复

使用道具 举报

ID:1034262 发表于 2023-3-21 09:59 | 显示全部楼层
检测到按下,计数即可,超级简单
回复

使用道具 举报

ID:123036 发表于 2023-3-21 11:24 | 显示全部楼层
MultiButton你值得拥有github.com/0x1abin/MultiButton
回复

使用道具 举报

ID:485350 发表于 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;

}

回复

使用道具 举报

ID:1045628 发表于 2023-4-6 14:41 | 显示全部楼层
这样吧,直接开一个定时器的输入捕获通道,然后再读捕获到的电平时间,就能判断是3秒还是4秒了;当然,确保你的按键没有抖动,但机械按键没抖动好像不太可能,那就吧抖动忽略,毕竟对于3、4秒来说抖动是很短暂的
回复

使用道具 举报

ID:517951 发表于 2023-4-8 08:17 | 显示全部楼层
用定时器1ms中断计时, 加状态机就可以实现按键防抖功能以及单按,长按,双击,等功能.
回复

使用道具 举报

ID:291668 发表于 2023-4-8 10:20 | 显示全部楼层
不知道要实现什么效果,如果按着一直不动,按你的要求会看到灯亮一下就灭掉。然后就没有了。除非松开 再重新长按。可以开个定时器来实现,10ms中断。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表