标题: 单片机按键长短按源程序(不需要通过等待来判定) [打印本页]

作者: 九零后大将    时间: 2018-7-25 22:18
标题: 单片机按键长短按源程序(不需要通过等待来判定)
从做项目编写的程序里拆解出来

单片机源程序如下:
  1. uint m;
  2.         static        uchar flag_key=1;                //按键松开标志
  3.         static uchar pass=0;                        //长按动作标志,为1时,长按已动作,为0时长按未动作
  4.         if(KEY==0)
  5.         {
  6.                 flag_key=0;                //按键按下标志
  7.                 m++;
  8.         }
  9.         else
  10.                 flag_key=1;                //按键松开标志
  11.         if((flag_key==1)&&(m>10)&&(m<500))        //按键松开,并且m值处于10~500之间,为短按
  12.         {
  13.                 m=0;                                                        //m值清零
  14.                         //短按操作内容                                                        
  15.         }
  16.         if((m>=500)&&(pass==0))                                //判断是否是长按并且是否已动作,如果是长按并且未动作执行下面括号内的语句
  17.         {                                                
  18.                 pass=1;                                                        //长按动作置1表示长按已动作
  19.                 //长按操作内容
  20.         }
  21.         if(KEY==1)                                                        //判断按键是否松开,松开的话执行下面语句
  22.         {
  23.                 pass=0;                                                        //长按动作标志位置0为下次长按做准备
  24.                 m=0;                                                        //m值清零,为下次按键按下做准备
  25.         }
  26. m值大小根据需要进行调整
复制代码

以上程序51hei提供打包下载:
按键长短按.rar (524 Bytes, 下载次数: 165)





作者: 维超    时间: 2018-7-26 10:25
好思路,下载收藏以后借鉴
作者: yadjt    时间: 2019-2-11 08:58
学习学习,谢谢分享!
作者: jeffphoon    时间: 2019-2-19 08:38
刚好要用到,谢谢了!!
作者: 快乐眼泪    时间: 2019-4-20 19:56
正在学习,收藏了!
作者: yasi666    时间: 2019-9-18 15:13
学习了,谢谢分享
作者: chscn    时间: 2019-9-18 18:27
看了代码 ,感觉还是要 不停的调用这个“函数”,再判断
作者: stlong    时间: 2019-9-19 08:49
感谢楼主,已学习
作者: m182892    时间: 2019-9-19 14:57
这种方法有没有做按键双击的。
作者: hmgqljz111    时间: 2019-9-19 15:27
谢谢楼主分享
作者: 守候枫林红叶时    时间: 2019-10-17 19:11
谢谢分享!学习了。
作者: 榆林上校    时间: 2019-11-6 02:54
嗯,不错的资料,谢谢分享!
作者: 精彩一刻    时间: 2020-11-22 00:04
刚刚在学单片机,搜了下长、短按的方法,就看到这个帖子了。
首先多谢楼主,学习了。
其次看了下代码,是不是这样的:
短按总是检测按键弹起时执行动作,意思是按键按下后m开始计时,然后判断弹起了,且是很短的延时就是短按。
如果按下后计时时间较长,那就是长按了。
但是我想无论长按还是短按都是在检测下按键被按下后立即动作,此时如何判断短按还是长按呢?且只能执行短按或长按的动作,而不能先执行短按的动作,再接着执行长按的动作,这个是不是比较不好实现呢?
作者: HEGUANGKUO65667    时间: 2021-10-23 13:19
请问各位师傅,有没有独立按键实现多个功能,使用定时器写的程序。发来学习一下。谢谢。
作者: 杨天想    时间: 2021-10-23 16:17
HEGUANGKUO65667 发表于 2021-10-23 13:19
请问各位师傅,有没有独立按键实现多个功能,使用定时器写的程序。发来学习一下。谢谢。

短按,长按,双击?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1