zoukankan      html  css  js  c++  java
  • 按键长短按

    u8 key_return = NO_KEY;
    u8 key_tmp = NO_KEY;
    u8 key_lock = 0;//按键自锁标志,自己加的

    if (key_val == NO_KEY || key_val != key_ctl.key_val) //按键没有按下或者本次按键与上一次按键不相同
    {
    if (key_ctl.key_up < KEY_UP_TIMES) //抬键防抖延时
    {
    key_ctl.key_up++;//抬键计数
    }
    else
    {
    if (key_ctl.key_cnt >= KEY_LONG_TIMES) { //长按抬键
    key_return = key_ctl.key_val | T_KEY_LONG_UP;
    } else if (key_ctl.key_cnt >= KEY_SCAN_TIMES) { //短按抬键
    key_return = key_ctl.key_val | T_KEY_SHORT_UP;
    }
    key_tmp = key_ctl.key_val;

    key_ctl.key_val = key_val; //把最后一次的按键存起来,留待下次使用
    key_ctl.key_cnt = 0; //按键计时清0
    key_lock = 0;
    }
    }
    else
    {
    key_ctl.key_cnt++;
    if (key_ctl.key_cnt == KEY_SCAN_TIMES && key_lock == 0) { //去抖
    key_ctl.key_up = 0;
    key_lock = 1;//自锁标志置1,防止按住按键不松手后一直触发
    key_return = key_ctl.key_val | T_KEY_SHORT; //短按,暂存按键值
    } else if (key_ctl.key_cnt == KEY_LONG_TIMES && key_lock == 0) { //长按
    key_lock = 1;
    key_return = key_ctl.key_val | T_KEY_LONG;
    } else if (key_ctl.key_cnt == KEY_LONG_HOLD_TIMES && key_lock == 0) { //连按
    key_lock = 1;
    key_return = key_ctl.key_val | T_KEY_HOLD;
    key_ctl.key_cnt = KEY_LONG_TIMES;
    }
    key_tmp = key_ctl.key_val;
    }
    if(key_tmp > 0x1f && key_return >= 0x80) //32-127这些键值不支持长按
    {
    key_return = NO_KEY;
    }
    return key_return;

  • 相关阅读:
    SpringBoot启动流程
    谈谈Java的线程池设计
    ReentrantReadWriteLock及共享锁的实现
    Condition的await()和signal()流程
    AbstractQueuedSynchronizer与ReentrantLock
    线程状态及各状态下与锁和CPU的关系
    Java运算符和表达式
    Java常量与变量
    jtl文件解析(jmeter+jenkins+python实现接口自动化)
    mac 增加/usr/bin目录的操作无权限
  • 原文地址:https://www.cnblogs.com/wang-jun-qi/p/11451321.html
Copyright © 2011-2022 走看看