找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9069|回复: 14
收起左侧

单片机按键长短按源程序(不需要通过等待来判定)

  [复制链接]
ID:74777 发表于 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)




评分

参与人数 2黑币 +20 收起 理由
六月六月 + 5
杨雪飞 + 15 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:160932 发表于 2020-11-22 00:04 | 显示全部楼层
刚刚在学单片机,搜了下长、短按的方法,就看到这个帖子了。
首先多谢楼主,学习了。
其次看了下代码,是不是这样的:
短按总是检测按键弹起时执行动作,意思是按键按下后m开始计时,然后判断弹起了,且是很短的延时就是短按。
如果按下后计时时间较长,那就是长按了。
但是我想无论长按还是短按都是在检测下按键被按下后立即动作,此时如何判断短按还是长按呢?且只能执行短按或长按的动作,而不能先执行短按的动作,再接着执行长按的动作,这个是不是比较不好实现呢?
回复

使用道具 举报

ID:46999 发表于 2018-7-26 10:25 | 显示全部楼层
好思路,下载收藏以后借鉴
回复

使用道具 举报

ID:304313 发表于 2019-2-11 08:58 | 显示全部楼层
学习学习,谢谢分享!
回复

使用道具 举报

ID:457181 发表于 2019-2-19 08:38 | 显示全部楼层
刚好要用到,谢谢了!!
回复

使用道具 举报

5#
无效楼层,该帖已经被删除
6#
无效楼层,该帖已经被删除
7#
无效楼层,该帖已经被删除
ID:399179 发表于 2019-4-20 19:56 | 显示全部楼层
正在学习,收藏了!
回复

使用道具 举报

ID:9727 发表于 2019-9-18 15:13 | 显示全部楼层
学习了,谢谢分享
回复

使用道具 举报

ID:435636 发表于 2019-9-18 18:27 | 显示全部楼层
看了代码 ,感觉还是要 不停的调用这个“函数”,再判断
回复

使用道具 举报

ID:111376 发表于 2019-9-19 08:49 | 显示全部楼层
感谢楼主,已学习
回复

使用道具 举报

ID:56665 发表于 2019-9-19 14:57 | 显示全部楼层
这种方法有没有做按键双击的。
回复

使用道具 举报

ID:230975 发表于 2019-9-19 15:27 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

14#
无效楼层,该帖已经被删除
ID:293762 发表于 2019-10-17 19:11 来自触屏版 | 显示全部楼层
谢谢分享!学习了。
回复

使用道具 举报

ID:47652 发表于 2019-11-6 02:54 | 显示全部楼层
嗯,不错的资料,谢谢分享!
回复

使用道具 举报

17#
无效楼层,该帖已经被删除
18#
无效楼层,该帖已经被删除
ID:598207 发表于 2021-10-23 13:19 | 显示全部楼层
请问各位师傅,有没有独立按键实现多个功能,使用定时器写的程序。发来学习一下。谢谢。
回复

使用道具 举报

ID:609524 发表于 2021-10-23 16:17 | 显示全部楼层
HEGUANGKUO65667 发表于 2021-10-23 13:19
请问各位师傅,有没有独立按键实现多个功能,使用定时器写的程序。发来学习一下。谢谢。

短按,长按,双击?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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