引用: 原帖由 仙猫 于 2012-6-10 18:04 发表 1、可能需考虑多个键同时被按下时的处理, 2、当按键用久后接触不良时,会不会判错键?
刚才算了一下,按键多了的话如仙猫所说,可能性太多了,这样就不好把ADC分区判断是哪个按键按下。
这种权宜之计当然只能针对按键少的情况,否则不如加个扩展IO的芯片,那就什么问题都没有了。
我算了三个按键的情况,有两种处理办法。
第一种是有优先级,优先级高的按下,其他的按键按下也不处理,四种可能性:都没按下、S1、S2、S3。
第二种是无优先级,那就是有八种可能:都没按下、S1、S2、S3、S1+S2、S1+S3、S2+S3、S1+S2+S3。
各个电阻的取值如电路图所示
第一种(图中R1取值50K,计算后100K不合适改为50K)
第二种
第一种应用:ADC的值分别是0、0.0909、0.5、0.909;当S1+S2时为0.5454(认为是S2按下)、当S1+S3时为0.0910(认为是S3按下)、当S2+S3时为0.09166(认为是S3按下)、当S1+S2+S3时为0.0918(认为是S3按下)。
第二种应用:ADC的值分别是0、0.25、0.33、0.5;当S1+S2时为0.45、当S1+S3时为0.57、当S2+S3时为0.625、当S1+S2+S3时为0.65。
第一种应用ADC分区设置的比较宽,第二种范围设置的比较窄,设置得恰当才可以正确的判断按键。
电路图中的电阻取值不能太大,否则就容易出现按键接触不良的情况下,混淆我们的按键判别。