{ Key_Value+=Scan_Key(ptr,bitposition);//函数递归,根据按键长短再判断长按短按break; } }returnKey_Value; } 此函数不依靠main函数的while循环和定时器,可以运行在中断中,一次中断实现双击。功能在理论上可以实现n长击、n短击,但行数上只有不到30行,大括号占了挺大比例啊,个人书写习惯。如果明确...
1typedefstruct{2struct{3uint8_t check:1;//是否需要被判断4uint8_t key_state;// RELEASE ; PRESS ; IDEL 三种状态5uint8_t once_event;//表示是否有事件需要被处理6uint8_t press_time;//区分长短按;0短1常7}flag;8uint8_t event_current_type;//事件类型9uint8_t event_previous_type;10uin...
第⑤集 ESP32 ADC 检测按键电压,实现短按、长按和双击效果。其中对时间要求比较精确的话,可以改用定时器触发。道理都一样。那么通过本次的学习,我们就可以掌握ADC的使用方法,以及在按键电压采集的应用。, 视频播放量 1688、弹幕量 2、点赞数 35、投硬币枚数 6、收藏人数
检测单击、双击、长按、短按抬起事件* 修改记录:None*/void KeyScan(void){/* 按键按下的起始时间 */static uint32_t KeyStartTime = 0;/* 按键的触发标志 */static uint8_t TrigFlag = 0;/* 上一次按下的键值 */static uint8_t PreKeyVal = 0;/* 等待按键释放 */static uint8_t WaitKeyUp...
多个按键实现短按+双击+长按 typedefstruct { charLongPress;//长按标志位 charDoublePress;//双击标志位 unsignedcharState;//当前状态 unsignedcharLastState;//上次状态 unsignedcharTrg;//触发 unsignedcharRead;//读取按键 intPressCnt;//按下计数器 intIdleCnt; }KeyTypeDef; KeyTypeDefKey; #define...
只要检测到按钮被按下,就连续产生按钮信号,直到按钮被释放。
(短按)KEYn_SHORT、(长按)KEYn_LONG、(持续按)KEYn_CNTINUS、(双击)KEYn_DOUBLE。 修改keys_info[]按键信息表 : key_info_t keys_info[HW_KEYS_NUM] = { {KEY1_INPUT_VALUE, KEY1_SHORT, KEY1_LONG, KEY_NONE, KEY1_DOUBLE, 200}, {KEY2_INPUT_VALUE, KEY2_SHORT, KEY2_LONG, KEY_NONE...
独立按键的长按、短按与双击的判断,运用了状态的分析,短按和长按的区别为按键按下的时间不同所以从短按状态到长按状态的条件为按键按下的时间超过设定的长按时间,而二者的共同点为:按键只按下一次。而双击与前者的不同在于双击按键按下了两次。 我在这先识别【单击】和【长按】然后在有一次按键按下的基础下...
2、实现功能: 长按实现:亮/灭LED7,并且data++;亮/灭LED8 短按:亮/灭LED6; 双击:亮/灭LED8 3、实现步骤: 利用外部中断监测按键是否被按下,按下标志位设为1; 定时器(20Ms)监测标志位、按键是否被按下,监测到不同的状态实现不同的功能; 长按时串口输出data值,使用了while,会有阻塞点...
在一些资源受限的场合,比如仪表的按键,这种按键的组合是十分有必要的,可以节省大量的资源。