找回密码
 立即注册
查看: 184|回复: 3

轻量级按键识别模块分享 + 求助, 没调通

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:52
  • 最近打卡:2025-05-01 17:47:24
已绑定手机

2

主题

18

回帖

270

积分

中级会员

积分
270
发表于 2025-3-13 16:25:39 | 显示全部楼层 |阅读模式

轻量级按键识别模块

轻量级的按键动作识别软件框架,可以十分方便地获取按键的各种状态,通过配置按键不同模式,完成对应的按键动作识别。

特点

轻量级的按键动作识别代码:

  • 移植方便,无需修改,只需要初始化提供读取相关IO状态函数即可

  • 丰富的接口实现,通过这些接口能及时处理按键操作,同时可以实现单击、双击、多击、短按和长按等多种要求的功能

  • 代码量少,且代码注释丰富,风格统一,便于阅读和使用

    原文链接:https://gitee.com/cot_package/cot_key

    于是我进行了一下移植,使用的是STC8H4K64TLCD,但是遇到了点问题,还请各位大佬指点。
    image.png这是我的按键枚举

    image.png这是我的按键初始化upload 附件:cot_key.hupload 附件:cot_key.hupload 附件:key_manager.hupload 附件:key_manager.h

    现在的问题是只有枚举体里的第一个按键能够正常实现长按功能,后面的键就异常,第二个键按下就就一直在回调不停,第三个键会瞬间回调很多次。找了半天没找出哪里有问题,希望各位大佬帮助!

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2025-3-13 23:29:14 | 显示全部楼层
看看我们这个按键扫描程序

I/O 口章节的实验5的思考:
实验5,I/O口 行列式按键扫描 大型实战利用主循环次数去抖动
如1个按键要判断为正常按下,而不是抖动,
假定需要该按键保持按下持续保持为低状态时间是 50mS ~ 200mS;
假定1个主循环的运行时间大概 10mS ~ 30mS
则如发现某个按键按下,需要连续 6次主循环都能读到该按键按下
===如发现多个按键按下,则归0,重新开始

调整按键的灵敏度只需要修改,
===【判断按键已按下的时间,即读到为低经历了多少次主循环的次数】


Project9 实验程序 简要说明,详见附件:
1,上电P0口的8个LED闪烁3次当作开机画面,
2,接下来行列按键矩阵扫描,

     A, 每扫描到一个键,蜂鸣器发不同的声音,
         8个按键对应Do/Re/Mi/Fa/So/La/Si/Do,

     B, 同时在电脑端的CDC串口助手中显示“KeyX被按下”
截图202503132326272705.jpg

截图202503132328162409.jpg
https://www.stcaimcu.com/forum.p ... id=15176&pid=150929

截图202503132329101836.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:52
  • 最近打卡:2025-05-01 17:47:24
已绑定手机

2

主题

18

回帖

270

积分

中级会员

积分
270
发表于 2025-4-11 17:08:57 | 显示全部楼层
问题已解决,忘记回复了,搜索了一下说是8051单片机内存十分有限,没有软件堆栈,函数调用不通过堆栈来传递形参,而硬件堆栈空间也十分有限,程序里所有的局部变量以及全局变量都是编译的时候固定存储在某个地址的存储空间的,函数调用的时候就不用压栈了,函数的形参通过存储地址或者寄存器来传递。为了省内存空间,BL51/LX51链接器会对用户应用程序进行分析,生成关于函数调用关系的调用树(call tree),有些变量的地址是会覆盖的。

对于回调函数或者其他形式函数指针,调用方式是通过的函数指针调用的,不是直接调用函数本身,即间接调用,对于间接调用的函数,链接器无法识别出调用关系,函数指针他以为是一个简单的变量,因此,间接调用的函数链接器没有识别出他们的调用关系。

那么问题来了,没有调用关系的的函数局部变量可以互相覆盖,可能是回调函数里的变量覆盖了调用他的上一级函数里的变量,可能是覆盖别的函数也不一定,这样程序可能会出错。

其中一种解决方法是用OVERLAY命令对数据覆盖进行调整,如图所示。
截图202504111708431954.jpg
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2025-4-12 15:02:38 | 显示全部楼层
顶一下,,不过可惜的是如果用了 NOOVERLAY命令,前面REMOVEUNUSED命令就失效了
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:33 , Processed in 0.262648 second(s), 71 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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