种方式能够实现的基础来源于单片机IO口的三个状态:高电平、低电平和高阻态。所谓“高阻态”,指的是引脚对外表现出极大的阻抗状态,对于后级电路的影响很小,在后级电路看来,就如同引脚悬空一样。而另一方面,发光二极管和普通的二极管一样拥有单向导通的特点,只有在电流以某种方式流动的时候,LED才能发光。利用以上两点,我们就能够设计出查理复用拓扑的基本电路了。 首先来看有两根LED组成的电路,在这个电路中,两个LED的接法相反,由于两个IO口间的电压不足以反向击穿LED,因此在两个IO口的状态相反时,两个LED将分别点亮。在使用两个LED的时候,这个电路既没有使用高阻态,也没有体现出查理复用的优点,但这种电路说明了查理复用的基本原理,即使用LED的单向导电性,确定一个LED两端的电压极性来使得LED按需求点亮。 使用3个IO口驱动6个LED的电路是查理复用的最经典情景。在这个电路中,首次使用了高阻态状态。当你想要点亮某个特定的LED时,就将其两端所连接到的引脚分别设定为高低电平,而另一个引脚设定为高阻态。这样,对应的LED就会被点亮,而其他的LED保持不变。至于位于同一路径上的其他LED(如P2.2脚为高、P2.0脚为低时,LED2、LED6和LED4这两条路径),由于单个LED路径上的电流要大于多个LED的路径,只有单个LED路径上的LED会被点亮。 在这种方法中,n个引脚最多可以驱动n^2-n个LED。当然这样的接法也会引发一些问题,首先,以这种方式驱动的电路完全由单片机取得电流,所以对于IO口的驱动能力有一定的要求;其次,在这种驱动逻辑中,如果出现了某个LED开路或短路的情况下,整个电流的流向将被打乱,LED亮起来的顺序也会发生变化,最坏的情况下,高电流会损坏单片机。因此在设计电路的时候,要注意LED的压降和电源电压、单片机的驱动能力等问题。至于高阻态,部分单片机可以将引脚配置成“输入”状态以设定为高阻态
|