找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4068|回复: 6
收起左侧

51单片机程序如何解决按键长按问题?

[复制链接]
ID:667149 发表于 2019-12-18 19:01 | 显示全部楼层 |阅读模式
程序如何解决案件长按问题
回复

使用道具 举报

ID:10193 发表于 2019-12-18 22:53 | 显示全部楼层
确定长按的时间长短后,用一个定时器,利用定时器中断触发。
回复

使用道具 举报

ID:195446 发表于 2019-12-18 23:14 | 显示全部楼层
定义一个0.5s的时延函数,当按键按下时,计算0.5s时延函数执行的次数,比如3s以上是长按,以下是短按,那么只需判断次数是大于还是小于6即可。
void Scan_Keys()
{
  if(K1 == 0)
  {
    Delay(100);       //按键去抖动处理
    if(K1 == 0)       //确认有按键按下
    {
      count = 0;      //延时次数变量清0
      while(K1 == 0)  //按键按下状态
      {
        Delay(5000);   //0.5s时延
        count++;      //按键按下的时间是0.5s的个数
      }
      if(count < 6)  //短按
      {
        .............;  //do something.
      }
      else            //长按
      
        ............;{//do something.
      }
    }
  }
}
回复

使用道具 举报

ID:470332 发表于 2019-12-19 09:00 | 显示全部楼层
按时间区分呀
回复

使用道具 举报

ID:662518 发表于 2019-12-19 09:40 | 显示全部楼层
弄一个判断按键是否按下,延时一会之后判断是否放开的程序就行。
回复

使用道具 举报

ID:839438 发表于 2021-5-17 21:24 | 显示全部楼层
恍然大悟,谢谢
回复

使用道具 举报

ID:773168 发表于 2021-5-19 10:51 来自触屏版 | 显示全部楼层
就是防抖处理,按键按下后多加个延时
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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