[其他产品] 庆幸之前代码框架写的好,增加几行代码就能实现新需求,客户很满意

[复制链接]
33|0
dffzh 发表于 2026-4-9 09:38 | 显示全部楼层 |阅读模式
最近在开发一个项目,控制面板上总共有40个按键,之前规格需求都是只要实现按键短按功能即可,所以代码框架上主要是按照短按逻辑去实现的;最近产品部提出增加按键长按功能这个需求,当然这个需求也非常合理,确实有些按键也需要支持长按。然后就开始研究代码怎么实现比较好。
然后就开始研究代码怎么实现比较好。先是解读了一下按键芯片,看怎么实现的,原来是触发按键中断后,如果按键一直保持,其实只要一直轮询读取按键码值即可,如果一直有码值且没有变化过,说明某个按键被一直按着。再是查看代码,看怎么实现,调试过程中居然发现,增加几行代码居然就能实现所有按键的长按功能了,太好了。增加的代码其实主要如下:
为了增加代码可维护性,保留原来功能,通过增加宏来实现新功能:
  1. //add key long press function
  2. #define KEY_LONG_PRESS_ENABLE
首先是在按键中断里增加三行,在触发按键中断后先关闭中断使能:
  1. #ifdef KEY_LONG_PRESS_ENABLE
  2.            DISABLE_KEY_INTERRUPT();
  3.            #endif
然后把原来的读取到按键标志位key_event后直接清除移到无法读取到正确按键值那里,即有按键的时候,就一直执行:
  1. #ifndef KEY_LONG_PRESS_ENABLE
  2.             key_event = FALSE;
  3.                 #endif
读取到异常按键或无按键值时,重新使能中断,开启下一次按键检测:
  1. #ifdef KEY_LONG_PRESS_ENABLE
  2.                             key_event = FALSE;
  3.                             ENABLE_KEY_INTERRUPT();
  4.                             #endif
这么实现后,通过上位机监控按键数据的结果就是有按下就一直持续为1:

后面把样机给客户测试,客户使用起来觉得很方便很实用,果断同意此功能增加到规格需求里面,Nice。
也算误打误撞吧,不过庆幸之前代码框架写的好,增加几行代码就能实现新需求,客户很满意!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

552

主题

3943

帖子

27

粉丝
快速回复 在线客服 返回列表 返回顶部
0