串口屏按钮抬起生效——避免按一次跳两步

串口屏按钮抬起生效——避免按一次跳两步

一句话: 串口屏按钮按下和松开各发一次事件。代码里两个都处理 = 按一次按钮执行两次。改成只在松开(==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)直接跳过

五个按钮统一用抬起生效。按下去什么都不做,用户松手才执行。


有用的话点个收藏,下次调试直接用。有问题欢迎评论区交流,看到了都会回。