对于那些特殊的开关检测信号,可能需要使用比典型的更长或更短的消抖时间,我们只需要设置开关信号对应的SWITCH_ID令牌结构体变量的滤波次数过滤时间(见上文程序)。 说到这里,有些不喜欢看代码的同学可能就不太清楚了,在这里,帮大家把话说到底,花钱买回笔墨,详细介绍一下。 首先,设置一个10ms定时器,在中断服务程序中执行开关检测信号检测。
在我们的例子中,考虑它的中断服务程序(ISR)执行以下Io Input Detect函数。 (需要说明的是,我们通常不会在停机程序中执行这种耗时的过程,这里仅供您理解。)
在此函数中,每个开关检测(标识为SWITCH_ID)的当前状态在Read Io Switch函数中读取并分配给其cursw,应该注意的是,cursw代表的是当前的开关状态,而不是滤波处理的稳定的关闭检测状态。 根据每个开关检测的当前状态cursw,判断其稳定的开关检测状态switch_state,开关检测动作swon_event和swoff_event。 即在for循环中执行的Sw Detect函数。