串口屏按钮抬起生效——避免按一次跳两步
一句话: 串口屏按钮按下和松开各发一次事件。代码里两个都处理 = 按一次按钮执行两次。改成只在松开(==0x00)时生效,按一次只跳一步。
适合谁读:串口屏按钮按一下跳两步、加减号按了跑飞了的嵌入式开发者。
现象
串口屏上点"下一通道",通道号从 5 跳到了 7——跳了两步。按"电流+",电流 + 了两次。
原因
串口屏的按钮控件在按下和松开时各触发一次事件:
按下 → MCU 收到 ControlType=0x10, Event=0x01 松开 → MCU 收到 ControlType=0x10, Event=0x00| 事件 | Event 值 | 时机 | 处理 |
|---|---|---|---|
| 按下 | 0x01 | 手指接触屏幕瞬间 | 跳过,什么都不做 |
| 松开 | 0x00 | 手指离开屏幕瞬间 | 执行对应功能 |
代码里两个事件都处理了——按一次按钮,逻辑执行了两遍。
解决
/* 只在松开时生效 */ if (u8Frame[7] == 0x00U) { // 松开 switch (id) { case 44: Enable(); break; case 45: Disable(); break; case 49: NextChannel(); break; case 50: PrevChannel(); break; } } // 按下(0x01)直接跳过五个按钮统一用抬起生效。按下去什么都不做,用户松手才执行。
有用的话点个收藏,下次调试直接用。有问题欢迎评论区交流,看到了都会回。
