找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1797|回复: 13
打印 上一主题 下一主题
收起左侧

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

  [复制链接]
跳转到指定楼层
楼主
ID:1041297 发表于 2023-3-20 14:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问怎么写3s识别一次长按,Led灯亮,4秒也实现一次长按,Led灯灭。而且不能按键松开才执行效果,不能用任何循环语句(while或者for循环),只能用判断语句来识别.
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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秒呢?你不觉得这个要求前后矛盾么?
回复

使用道具 举报

5#
ID:139866 发表于 2023-3-20 17:29 | 只看该作者
0秒的时候检测按下,
三秒的时候检测松开,如果松开用个标志位记下,
四秒的时候检测松开,如果松开再用个标志位记下,
检测完了根据这两个标志位就知道一共按了三秒还是4秒了。

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

使用道具 举报

6#
ID:354404 发表于 2023-3-20 19:57 | 只看该作者
最好是使用定时器实现会比较方便
回复

使用道具 举报

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

使用道具 举报

8#
ID:384109 发表于 2023-3-21 08:01 | 只看该作者
这是纯粹的偷懒,想通过单一的东西获得多个结果,最后只得到一个大麻烦
回复

使用道具 举报

9#
ID:1034262 发表于 2023-3-21 09:59 | 只看该作者
检测到按下,计数即可,超级简单
回复

使用道具 举报

10#
ID:123036 发表于 2023-3-21 11:24 | 只看该作者
MultiButton你值得拥有github.com/0x1abin/MultiButton
回复

使用道具 举报

11#
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;

}

回复

使用道具 举报

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

使用道具 举报

13#
ID:517951 发表于 2023-4-8 08:17 | 只看该作者
用定时器1ms中断计时, 加状态机就可以实现按键防抖功能以及单按,长按,双击,等功能.
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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