调试之二说明键盘、显示等简单的外围设备出现问题时如何快速分析出故障点,同时提出几种应对之策。
键盘调试:
键盘硬件部分总体来说很简单,无非就是检测跳变。高电平跳转到低电平,低电平跳转到高电平,或者是扫描式的跳变检测。
▲:对于直接IO式的键盘解法,一般只要用万用表测量相应的IO,看看是否按键前后是否有电平变化就可以判断出硬件是否有问题。为什么要检测这一步呢?因为我们的按键也还是可能存在质量问题,如果你拿到的按键是一个坏的按键,无论你怎么按都不会产生跳变,那么你的程序如果得到正确的结果?还有一点就是假定你的按键是好的,但是,你把线接错了,也会发生故障。目前我们使用的按键一般是四条腿的按键,其中分别两条腿可以看作一个引脚,所以,有可能会存在接错的情况。
△:焊接按键之前,先用万用表找到按键的两个引脚,焊接之前就必须判断按键前后键盘两个引脚之间存在变化,具体就是用万用表的电阻档或者二极管档,如果按下,两个引脚之间短路,不按时,引脚之间开路,表明按键本身是好的。焊接以后,用万用表或者示波器检测是否在按键前后存在电平的差异。
▲:行列式的键盘处理。由于程序工作时行列式的键盘引脚之间的信号是一个变化的。所以,行列式键盘的调试复杂一些,需要程序的配合处理。
如图式,上图为4*4的行列式键盘,节点处为按键。右边电阻为4.7K—10K均可,可以看出没有任何按键按下时,P5—P8应当为低电平。 正常程序扫描过程如下:
① 先P1,P2,P3,P4 全部送高电平
② 然后检测P5,P6,P7,P8的状态
③ 如果有键按下,则P5,P6,P7,P8至少会有一个不再为0
④ 此时则开始P1,P2,P3,P4分别送高电平扫描处理……
从硬件和软件的处理可以看出,如果要判断按键是否正常,则在①之后,②之前程序需要停下来。此时 P1—P4 四个端口全部送出的是高电平,那么没有键按下时,P5—P7之间应该是低电平,否则对应列引脚有高电平。
△:在判断出按键好坏之后焊接到电路板。然后运行程序到①之后,让程序进入死循环,保留在当前状态,然后分别测量每一个按键是否正常。这里拿P1和P5之间的按键说明。P1和P5之间的按键未按下时,P5上的电平是低电平,按下后,P5上的点评将变为高电平,如果没有这种变化,则表明电路出错或者是按键损坏(可能在焊接过程中损坏)又或者是焊接问题。
显示调试:
显示部分分为8段式发光数码管和发光二极管两种。两种显示装置都是利用发光二极管的特性,所以,他们的硬件检测理论上是一致的。
△:通常在使用前,两种发光管都应当经过检测是否好坏。具体使用万用表的二极管档,表笔正极接二极管正极,表笔负极接二极管负极,此时可以看到二极管被点亮。 发光二极管驱动分为IO驱动,VCC驱动。值得注意的是,VCC驱动的话,一定要加限流电阻,否则发光二极管必定会被烧毁。IO驱动的话,要分开来看,如果是灌电流驱动,一定要加限流电阻,因为灌电流通常可以达到几十毫安。如果是拉电流驱动的话,就要根据 IO 驱动能力来判断了。如果是拉电流小于5毫安的,不加限流电阻也可以驱动,如果大于10毫安,则一定需要加限流电阻,经过实验,10毫安以上的拉电流驱动的话,时间长了以后发光二极管会损坏。值得注意的是,如果用的是 IO 直接驱动不加限流电阻,测量IO口电平的时候,如果是0.7V左右就表明已经输出了高电平,因为二极管的钳位作用电压被钳在0.7V了。添加限流电阻的话就不存在这种情况。
▲:使用 8 段数码管的时候,发生了某一段从来不亮,又或者某一段从来不灭。
△:此时有几种可能性。从来不亮,是否存在虚焊,虚焊为开路的话,对应段是不会亮的。从来不灭,是否存在短路。如果和VCC或者GND短路了,可能发生从来从来不亮和从来不灭,具体看你的驱动方式。检测时,应当采用测量 IO 驱动脚和数码管引脚相结合的方式来判断是否硬件问题。举例来说,74HC595输出驱动共阴极数码管,有限流电阻,公共端接地。如果测量IO口上为高电平,而此时对应的段不亮,则表明两种情况,要么对应段对地短路,要么对应段连接线路中存在开路,开路要么是线断了,比如过孔不通,要么是焊接虚焊开路,需要逐一排查。