找回密码
 立即注册
查看: 200|回复: 4

分享一个自己适用的按键程序 短按 和长按

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:106
  • 最近打卡:2025-05-01 09:11:48
已绑定手机

5

主题

28

回帖

315

积分

中级会员

积分
315
发表于 2025-2-14 22:22:29 | 显示全部楼层 |阅读模式
自己适用编码器,只有一个按键。做了一个短按和长按程序。

首先这个程序放到中断程序中执行(中断定时1毫秒,自己根据定时时间可以调整长按时间)

bit KEYflag,KEYshort_flag,KEYlong_flag; //按键按下标志
u16 KEYdelay;//按键检测延时时间
u8  KEY_set;



void keyscan()
{  

        if(!KEY)                                                                                                                // 按键按下
          {
                  if(KEYflag == 0)                                                                                        // 当按下标志为0时(系统启动默认就是0)
                    {                                                                                                                                                       
                             KEYdelay++;                                            
                                         KEY_set = 1;                                                                                                  
           if(KEYdelay>=2000)                                                                        // 按下时间大于4秒以上表示    长按
                              {
                                            KEYflag = 1;                //防止再次进入此中断循环。
                                            KEYlong_flag = 1;
                                            KEYdelay=0;
                                                  KEY_set = 0;
                               }
              }
          }               
        if(KEY)                           // 按键松开以后根据按键时间判断按键状态
                {
                         if(KEY_set)
                          {
                           if(KEYdelay<=20)    //无效   相当于去抖动
                                     {
                                            KEYflag = 0;
                                              KEYdelay = 0;
                                             KEYlong_flag = 0;
                                             KEYshort_flag =0;
                                             KEY_set = 0;
                                     }
                                 if(KEYdelay>40 && KEYdelay<2000)  //短按
                                    {
                                                    KEYflag = 0;
                                                KEYdelay = 0;
                                             KEY_set = 0;
                                             KEYshort_flag =1;        //根据这个标志  执行自己的程序 执行完后将此标志归0                          
                                    }
                          }
                else  //没有按键动作
                             {
                                                          KEYflag = 0;
                                                        KEYdelay = 0;
                                                          KEYlong_flag = 0;
                                             KEYshort_flag =0;
                                       KEY_set = 0;
                             }
                }                       
  
}


if(KEYshort_flag)   { KEYshort_flag = 0; 执行自己的短按程序 }
if(KEYlong_flag  ){KEYlong_flag = 0;  执行自己的长按程序 }  

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2025-2-15 15:45:03 | 显示全部楼层
我也写过类似代码,用定时器中断里面写状态机实现短按 长按 双击等操作,
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:106
  • 最近打卡:2025-05-01 09:11:48
已绑定手机

5

主题

28

回帖

315

积分

中级会员

积分
315
发表于 2025-2-15 22:52:55 | 显示全部楼层
这个不使用延时 不拖后腿
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:199
  • 最近打卡:2025-05-02 00:28:39
已绑定手机

24

主题

345

回帖

1633

积分

金牌会员

积分
1633
发表于 2025-2-20 13:10:25 | 显示全部楼层
实用
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:121
  • 最近打卡:2025-05-01 19:17:52
已绑定手机

19

主题

208

回帖

492

积分

中级会员

积分
492
发表于 2025-2-20 15:05:19 | 显示全部楼层
优秀
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:48 , Processed in 0.169079 second(s), 70 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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