以Multisim仿真软件验证CD4017键盘扫描电路真值数据分析
以Multisim仿真软件验证CD4017键盘扫描电路真值数据分析
在项目中当MCU的I/O足够多的情况下,使用矩阵键盘扫描的方式来进行按键检测,方案常规。但是当遇到I/O数量不足情况下就要考虑其他的方案。
有两个办法可以解决此类问题:方案1:电压分压检测法;使用现成的I/O扩展器,或用一只电阻排,为每个键设定一个唯一的电压,然后使用模拟引脚来读取电压值,判断按住了哪个键。缺点:一方面是I/O扩展器需通过特殊的通信协议(如I2C或SPI)来读写数据,MCU需要具备内置通信模块,或用户需实现相关的通信协议软件,而这明显增加了MCU的负担。另一方面是当按键数量增加时,通过电阻排给各按键分配独特电压会变得很繁琐,而这最终将导致电压裕度较小。此外,由于电阻值会随温度而变化,使用较小的电压裕度可能导致读取错误,甚至连开关弹跳都可能成为导致电压出错的重要原因。这种方法的另一个弊端是要求MCU中需有模拟输入引脚。
方案2:计数器检测中断法; 优势:它只需要两只I/O引脚,而不论连接的开关数量有多少;不需要特别的通信协议;不需要模拟引脚,电路方面搭建。
本案例基于两个CD4017约翰逊计数器组成的4×3键盘电路,LED1–LED9为输出端口状态显示,R1–R9为限流电阻,D8,D9,D10组成“或”门,D1–D7为单向二极管,R10-R14为限流电阻。
电路分析(仿真软件已验证)
CD4017上电后,MR进行自复位操作,MR变为H,行检测 U1的状态置位,Q0=H,Q1–Q9=L,Q3与MR相连,MR变为L,可以计数,由于CP1=L,计数方式为上升沿触发方式,U2的上电初始状态,触发方式都与U1相同。
U1初始输出状态Q0 Q1 Q2 Q3值为1000,LED1亮起,这时按下按键1时,输出端=H,为什么等于H?是因为U1,U2的Q0=H,U2/Q0电压通过D1,R10后当按键按下时,由于D5负端为H,不会把U2/Q0过来的电压吃掉,通过D8输出H。其他按键检测方式与上描述相同。关键节点分析,当第三个脉冲到达后,U1/Q3输出为H,导致MR=H,U1进行置位,Q0变为H,Q1–Q3变为L,MR又变为L,U1又可以计数,这个过程中LED4会闪一下。当第三个脉冲到达后,U2/CP0接受到1个高电平,U2计数1次,状态由Q0-Q4 10000变为01000。每3个脉冲U2计数1次。还有一个状态有需要特别注意,上电后到稳定阶段,输出口会有短暂的不稳定输出状态,对于危险设备请注意延时防勿动操作。
MCU每隔一段时间会产生一序列的时钟脉冲,MCU内的时钟计数自动增加,脉冲序列数与内部计数都等于键盘上的开关数目,按下这些开关时可造成中断。
只有当行和列的按钮两端均处于逻辑高位时,一个按钮被按下时才会发生中断。如果按钮的行或列,有一端或者两端处于逻辑零值,则不会发生中断。
中断发生时,MCU读取当时的计数值,所读取的值即对应于刚按下的按钮。
注意:虽然本例仅展示了4×3键盘的读取方法,但可以用两个4017计数器的剩余输出来读取10×10键盘。另外,必要时,还可以级联更多的4017 IC来扩展键盘,方法检测一致。
原著:克努先生