Answers:
是的,如果每次开关更改状态时都希望保证单边,则必须在两个方向上都进行反跳动。
幸运的是,如果将开关连接到微控制器,则不需要任何其他硬件来进行反跳。如果微控制器具有内部上拉电阻(很多人都这样做),那么您在外部只需要在微引脚和地之间切换即可。
我发现50毫秒是一个不错的去抖动时间。大多数开关的弹跳远不及此弹跳,但有几个弹跳的时间可能差不多那么长。但是,对于人类用户而言,50 ms仍然会瞬间感觉到,因此您也可能会更加可靠。唯一的区别是您要计入固件的数量,因此没有额外的费用。无论如何,由于其他原因,我通常会有一个1 ms的周期性中断,因此,如果该中断在同一行中连续50次处于同一状态,则您需要声明该状态已被去抖动。
通常,您将使用一个全局位来指示该开关的正式去抖状态。这就是任何需要知道设置开关方式的逻辑。您唯一需要的附加状态是中断例程中的一个计数器,通常是一个字节。假设中断是每1毫秒一次,去抖动时间是50毫秒。对于每个中断:
如果瞬时状态与去抖状态匹配: 将计数器重置为50 完成了 如果瞬时状态与去抖动状态不同: 减量计数器 如果计数器达到0: 声明新的反跳状态 将计数器重置为50 完成了