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;

  • 相关阅读:
    JS-07 (js的面向对象编程)
    AI SiameseFC
    phpstorm调试
    Php 编译扩展
    canvas
    AI FCN
    AI WebGL
    Python flask
    JIT 即时编译
    小程序
  • 原文地址:https://www.cnblogs.com/wang-jun-qi/p/11451321.html
Copyright © 2011-2022 走看看