Timer撰写防弹跳程序代码
防弹跳是避开机械开关产生弹跳的那10 至20 ms,即可达到防弹跳的效果
当一台设备同时有很多个输入开关时,该如何使用一个Timer对所有开关做防弹跳,假如说有8个输入开关,该如何写程序,对Timer设定20~30ms的延迟时间,应用到所有输入上,通常大家都用嵌入式C++或8051撰写,很少人想过用VB写
[解决办法]
这个简单,你设置 8 个计数变量和 8 个标志变量就可以了。
Dim intCount(7) As Integer, blnPushed(7) As Boolean
另外,假定你可以通过一个 Get_Button_State 函数将 8 个按钮的当前状态写入变量 bytStatus。
Dim bytStatus As Byte
比如你设置 Timer 的 Interval = 3 ms,在每次 Timer 事件时:
bytStaus = Get_Button_State()
For i = 0 To 7
If bytStaus And 1 Then '检查状态变量最低位所表示的按钮状态,如果是按下
If intCount(i) < 10 Then intCount(i) = intCount(i) + 1
If intCount(i) = 10 Then blnPushed(i) = True '连续按下 30 ms 或以上,确认状态
Else
intCount(i) = 0 '检测到放开状态,重新计数
blnPushed(i) = False
End If
BytStatus = BytStatus \ 2 '右移一位,以检查下一个按钮状态
Next i
[解决办法]
当然可以。
定时器事件的服务代码,是隔一段时间去检测一下各个按钮或开关的状态,只有连续 n 次检测均有效的才被认为是确定按下。