找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7339|回复: 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, 下载次数: 163)




评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏19 分享淘帖 顶1 踩
回复

使用道具 举报

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

使用道具 举报

板凳
ID:46999 发表于 2018-7-26 10:25 | 只看该作者
好思路,下载收藏以后借鉴
回复

使用道具 举报

地板
ID:304313 发表于 2019-2-11 08:58 | 只看该作者
学习学习,谢谢分享!
回复

使用道具 举报

5#
ID:457181 发表于 2019-2-19 08:38 | 只看该作者
刚好要用到,谢谢了!!
回复

使用道具 举报

6#
ID:399179 发表于 2019-4-20 19:56 | 只看该作者
正在学习,收藏了!
回复

使用道具 举报

7#
ID:9727 发表于 2019-9-18 15:13 | 只看该作者
学习了,谢谢分享
回复

使用道具 举报

8#
ID:435636 发表于 2019-9-18 18:27 | 只看该作者
看了代码 ,感觉还是要 不停的调用这个“函数”,再判断
回复

使用道具 举报

9#
ID:111376 发表于 2019-9-19 08:49 | 只看该作者
感谢楼主,已学习
回复

使用道具 举报

10#
ID:56665 发表于 2019-9-19 14:57 | 只看该作者
这种方法有没有做按键双击的。
回复

使用道具 举报

11#
ID:230975 发表于 2019-9-19 15:27 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

12#
ID:293762 发表于 2019-10-17 19:11 来自手机 | 只看该作者
谢谢分享!学习了。
回复

使用道具 举报

13#
ID:47652 发表于 2019-11-6 02:54 | 只看该作者
嗯,不错的资料,谢谢分享!
回复

使用道具 举报

14#
ID:598207 发表于 2021-10-23 13:19 | 只看该作者
请问各位师傅,有没有独立按键实现多个功能,使用定时器写的程序。发来学习一下。谢谢。
回复

使用道具 举报

15#
ID:609524 发表于 2021-10-23 16:17 | 只看该作者
HEGUANGKUO65667 发表于 2021-10-23 13:19
请问各位师傅,有没有独立按键实现多个功能,使用定时器写的程序。发来学习一下。谢谢。

短按,长按,双击?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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