查看: 930|回复: 2

多功能按键扩展库

[复制链接]

28

主题

66

帖子

1180

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1180
发表于 2023-7-20 16:49:34 | 显示全部楼层 |阅读模式
本帖最后由 LZY825597017 于 2023-7-21 16:16 编辑

多功能按键扩展库使用说明:

扩展库内所有函数以事件触发。
扩展库支持:按下、单击、双击、连击、短按、长按、长按保持等多种方式,短按、长按和长按保持又可以划分为开始和结束,即短按开始,短按结束等等。
按键时间长度由用户自定义。


下面讲解图形化块:


image.png




1、按键以及IO初始化  使用本库前请确定好按键按下时的电平以及IO口的上下拉模式(如按下为低电平,则IO使用上拉模式)
image.png
首先,确定按键接到那个IO口(注意:某些IO上电为复用功能,不建议用做普通IO),并将这个按键命名为按键(0~31),并确定好上下拉模式(如果不使用芯片IO的上下拉模式,也可以使用硬件加上/下拉电阻)
确定好按键总数。(按键号不允许大于按键总数-1)
其次,确定好按下时按键的电平状态(根据电路硬件和软件配置决定)
最后,根据需求,用户自定义短按、长按和长按保持的时间

2、按键扫描函数
image.png
请将该函数放入20ms定时器中,或者单独创建线程20ms轮询此函数

3、按键事件回调函数  注:该函数必须被使用,否则编译会报错(不使用,放置一个在图形即可)
image.png
连击间隙为300ms,小于300ms则算连击
使用通用回调函数,可以选择按键x在发生事件y时,调用用户自定义函数或者使用标志位等等。该函数除了能够对单一按键判断外,还可以使用组合按键,使用逻辑与/或不同按键事件即可
注意:回调函数中禁止使用任何阻塞延时,否则会出现不可预料的后果,如有需求建议使用标志位,在主函数中判断标志位


4、获取按键x事件
image.png
对外提供获取任意按键当前所处事件的接口,可根据返回值处理。
返回值含义如下:
0--->按下事件   1--->单击事件   2--->双击事件   3--->连击事件   4--->短按开始事件   5--->短按抬起事件   
6--->长按开始事件   7--->长按抬起事件   8--->长按保持事件   9--->长按保持抬起事件   10--->统计值,无意义  
11--->没有按下事件
注意:获取事件时不能被阻塞延时,否则得到的返回值不正确
例如:两种方法在某种意义上等价,且都不能被阻塞
image.png



案例1:以CH32V003核心板讲解

image.png
本案例中,核心板上,将按键0/1接触GND表示按键被按下
使用按键0(PC0)和按键1(PC1),轻轻按下按键0,核心板绿灯灭,轻轻按下按键1,核心板绿灯亮。

案例2:
image.png
组合按键
同时按下按键1和按键0三秒,核心板绿灯灭,同时双击按键1和按键0,核心板绿灯亮。

注意事项:
如果按键扩展库不能使用,建议使用串口打印按键的事件,再寻找原因
1、按键的上下拉确定,如果上下拉选择错误,使用串口将一直打印8
2、图形化块的按键x选择不要忘记,默认都为0
3、使用扩展库报错,首先,回调函数一定要放进图形化里,可以不用,但一定要有,因为回调函数是定时器扫描函数需要的函数,状态改变时就会调用一次。
4、短按长按设置的时间与实际相差特别大。(1)定时器周期是否为20ms(2)系统时钟设置是否正确
5、短按事件与单击、双击等事件。短按时间的设置不能太短,否则程序比较时直接跳过单击、双击事件,导致无法判断。
6、按键最小判断时间为20ms,如果有特殊需求,此时需要将扫描函数放入自定义定时器中,修改.h文件的宏定义
FLEX_BTN_SCAN_FREQ_HZ ,大小计算 = 1000/定时器时间。一般不要修改,否则在判断时的计数值误差会更大。
7、连击时间空隙修改。如果觉得双击或者连击时间太短可以修改宏定义 #define MAX_MULTIPLE_CLICKS_INTERVAL (FLEX_MS_TO_SCAN_CNT(300))   默认300ms。例如修改为500,则程序中上一次点击后500ms内再次点击则算连击加1。





image.png
image.png

多功能按键扩展库.zip

1.55 KB, 下载次数: 32

回复

使用道具 举报

0

主题

46

帖子

1132

积分

金牌会员

Rank: 6Rank: 6

积分
1132
发表于 2023-7-21 19:57:38 | 显示全部楼层
支持哪些芯片???
回复

使用道具 举报

21

主题

231

帖子

1649

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1649
发表于 2023-7-24 11:47:30 | 显示全部楼层
mbli1511 发表于 2023-7-21 19:57
支持哪些芯片???

STC16、STC32G、TWEN32、CH32V103、CH32V208、CH32V003、TW32F003等
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号-1 )

GMT+8, 2024-5-6 02:01 , Processed in 0.344672 second(s), 25 queries .

Powered by Discuz!

© 2001-2024 Comsenz Inc.

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