吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1179|回复: 7
上一主题 下一主题
收起左侧

[学习记录] VtorKey-轻量级短长按单多击组合动作按键模块

[复制链接]
跳转到指定楼层
楼主
vtor 发表于 2023-7-6 21:11 回帖奖励
本帖最后由 vtor 于 2023-7-6 21:16 编辑

VtorKey-轻量级短长按单多击组合动作按键模块
VtorKey-轻量级短长按单多击组合动作按键模块
开发时间:20230703日(周一)
相关网址:https://www.bilibili.com/video/BV1sm4y1Y78Q
https://gitee.com/vtor3478/ElecModule
https://gitee.com/vtor3478/ElecModule/tree/main/VtorKey
00-前言

本设计(包括但不限于图片,文字,视频,代码风格,以下省去括号)
将发布于博客园,b站,吾爱论坛,开源中国,伪钞杂货铺微信公众号,影子论坛等
本设计为 伪钞 本人创作,转载请注明出处
本设计能提供单击,长按,以及长短按组合的按键反馈
本设计适用于gpio资源少,且需要较多用户操作的情况
本设计截止至目前(20230703)仅支持轮询,
以后有机会再开发中断模式
理解(并使用)本设计,需要你有一点数据结构基础
                                             有一定的c语言与单片机基础
                           有较为扎实的状态机基础,
本设计是我基于原有的基础工程《diaan》进行设计,
其中包含许多其他知识,如果我没有提及,那说明与VtorKey无关
软件环境:stm32cubeide 1.12.0
硬件环境:stm32f103rct6
     
名词解释:curState:当前状态,记录长按,短按,弹起,消抖等状态
lastState:用于弹起时,区分刚刚是长按还是短按
holdTime:持续时间,用于区分短按还是长按,区分短弹起还是长弹起   
01-分析按键状态

一个按键,从按下到弹起,会经历哪些情况
电平情况:   弹起时的电平                           按下后的电平
状态可分:   弹起             按消               按下          弹消
按下时长:   短按            长按                短弹           长弹

02-单击长短按
如果curState为《按下》,如果holdTime小于《长按值》认定为《短按》并记录
                                      如果holdTime大于《长按值》认定为《长按》并记录
lastStatecurState将要不同时,使用lastState记录curState,然后更curState

03-消抖环节
消抖的判断代码在长短按判断之前,只是文章介绍访问长短按之后。
为了防止在触发长按的过程中触发短按,所以需要用用弹起状态作为一个单击动作的结束。
curState为《弹起》,由于,根据lastState是短按,还是长按,就可以使用对应的返回值  


04-组合动作
上一次弹起与下一次按下的时间足够小,认为是组合动作
如果要记录组合动作,需要一个组合内 动作与动作之间《分隔符》
按习惯来说,用《短弹》作为《分隔符》比较合适
如果要记录组合动作,需要一个结束组合动作结束的《结束符》
按习惯来说,用《长弹》作为《结束符》比较合适


因为要等待《结束符》所以响应速度比较慢
当用户快速短按2下,并等待一段时间其中两次短击之间间隔一般小于500ms
所以我使用500作为《长弹》的比较值
~~~~~无限长时间~~~~~~~按下~500ms~弹起~~~200ms~~~按下~~50ms~~弹起~~~~~~无限长时间~~~~~
此动作可认为《短短按》,值为《11

  

05-PeekCombine


为防止重复操作,为防止用户直接修改,为防止其他意外情况
所以使用KEY_PeekCombine获取组合动作,只有在组合动作结束后才会返回有效值,且函数内会清空组合动作,防止反复获取



06-PeekAction


只提供按下动作       弹起动作为简单环境提供按操作不是重点,略过,
有兴趣请自行学习  

07-移植与使用流程0701-反绑定


因为本设计反绑定了project.h所以用户需要先创建project.h文件,以确保成功编译

0702-时间设置
搜索VTOR_KEY_TIME_CONFIG_BY_USERSELFproject.h中定义,
并定义好时间和电平宏
     

0703-KEY_GetLevel函数


用户只需要提供读取keyio电平(vtor_key_user_project.c文件)
本设计使用了HAL_GPIO_ReadPin直接读取io



0704-KEY_Init函数
初始化好vtorKeyHeader即可

0705-KEY_Scan函数
定时循环调用即可


0706-KEY_PeekCombine函数
根据返回值进行判断即可       

image.png (173.58 KB, 下载次数: 0)

image.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
 楼主| vtor 发表于 2023-7-6 21:12 |楼主
我直接从word复制粘贴
但是格式乱了,请问有没有大佬能教教我怎么调整格式啊
3#
wzs0539 发表于 2023-7-7 07:10
4#
twj007 发表于 2023-7-7 08:09
5#
vethenc 发表于 2023-7-7 08:47
论坛支持MarkDown格式写作,MD好排版一点
6#
 楼主| vtor 发表于 2023-7-7 12:05 |楼主
wzs0539 发表于 2023-7-7 07:10
难道这个是传说中物理外挂?

物理外挂在另一篇文章   《stm32usb键盘鼠标》的文章
这篇文章只是针对嵌入式情况下,少量按键能实现多个功能
7#
 楼主| vtor 发表于 2023-7-7 12:06 |楼主
twj007 发表于 2023-7-7 08:09
没看明白,谢谢!

这个是嵌入式方面的知识,
非这行的人不理解此文章是很正常的现象
8#
 楼主| vtor 发表于 2023-7-7 12:06 |楼主
vethenc 发表于 2023-7-7 08:47
论坛支持MarkDown格式写作,MD好排版一点

我还是打算试着word复制过来,因为我不打算只在一个平台上发文章
不过还是多谢你的好意~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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