此事难解 ——闪烁的消除
用共阴极数码管进行动态显示的例程较多,但我认为实用价值不大,原因是共阴管需要从段上提供驱动能量,这使得我们很难找到合适的驱动块。不是有同向驱动器7407等类吗?事实上,用7407作段驱动是最为人诟病的,7407是OC型驱动方式,需要某段点亮时,固然可以让7407的某一路OC,可需要该段灭时,却须使该路导通,则电源通过限流电阻、7407通入GND——即某段点亮时固然耗电,而该段灭更大量耗电,这对系统的使用寿命是很不利的,且不利于节能。
补救之道是采用共阳极数码管,用9012提供驱动能量(位选择),用OC型驱动器作为段驱动,这样可以做到该亮的段消耗能量,该灭的段不耗能,显然这种驱动方式更为经济合理。
为了探讨这一驱动方式的用法,我用了16只共阳数码管(其中4只作为符号位,实际上是13只。按许多书上的介绍,字位法动态显示最多只能驱动12只管,现用13只,看看为什么上限是12只?13只行不行呢?20只管以前试过,确认是不可行的)。
P0、P2口通过9012提供位驱动,P1口提供段信号。P0口未加上拉。板子采用万用线路板,用导线焊接而成。程序在Keil下调试通过后,烧入芯片上电试验,结果显示,P0口控制的6只管明显闪烁,P2口控制的6只管无闪烁现象,符号位也无闪烁现象。分析试验结果,一、程序无问题,二、12只并不是绝对的上限,13只也是可以的。
P0口对应管明显闪烁是何原因呢?从程序上看,对P0、P2的编程是毫无二致的,不应是程序问题!难道越过了12这个上限,好像也不对,如属越限,则16只管应同样闪烁?可见越限不是问题!
是否P0口无上拉的问题呢?理论上无须上拉。由于驱动的是9012,要求低有效,高及高阻态均无效,所以无须上拉电阻。但加上上拉试试呢?结果显示乱,可见上拉不是问题。
是否电源干扰呢?我用的稳压源价值不菲,其各项指标经检定完全合格,当不是干扰问题,但不妨在电源、芯片处按书上介绍的,加上一些电容试试,结果是毫无效果。
是否布线不当引起分布电容问题呢?考虑动态显示,加上机子本身也工作在几个兆,布线当是有所讲究的,于是把线拆了重新焊接,使线尽量短,尽量紧凑,尽量无裸露现象。重新上电,一样!
我实在解决不了,准备放弃了,最后尝试了一下:用手指作为电容在各元件上试触,发现,当用手捏住芯片及驱动块时,闪烁现象消除,但电容如何跨接也是问题,反复试触,最终发现,只要是P0口控制的9012,用手捏住其e~c两端,均可消除闪烁现象,跨接一个10uF电容一试,闪烁消除!
但问题并未解决,问题如下:
1、为什么P0口对应的数码管有闪烁现象?理论上如何解释?
2、为何用手捏住芯片及驱动块可以消除闪烁?
3、为何在P0口控制的9012上跨接电容可以消除闪烁?
4、如果项目开发中碰到类似问题如何解决?仍然摸着石头过河,然后逮到老鼠就是好猫?大家碰到类似问题是如何解决的?
5、字位法动态显示,12只管是否上限?
烦各位大侠给予指点!
|