图 1 是一个可能的方案,它使用外接反相器 IC1 来驱动一只红/绿双向 LED,即D1。端口管脚的逻辑高电平输出使电流流过绿色(上方)LED,并将反相器输入电平拉高,于是驱动反相器输出端为低电平,从绿色 LED 吸入电流。端口管脚的逻辑低电平输出使反相器输出端为高电平,从而为红色(下方)LED提供电流,微控制器的输出端从红色 LED 吸入电流。
要关掉两只LED 时,可以重新配置微控制器的端口管脚,使之从输出转为输入或将管脚切换成三态,任何一态都能阻止微控制器的端口管脚吸入或流出电流。这种电路的主要缺点是不能控制每只LED的亮度,而是由电阻器R5决定两只LED的正向电流。
图2表示了另一种方法,它也有严重缺点。齐纳二极管D3、D4和电阻器R3、R4构成一个低阻分压器,为LED D5的一端提供VCC/2V电压。VCC的值决定了齐纳二极管电压VZ的选择,电压较低的齐纳二极管能提供更多的LED电流,较高电压的齐纳管限制了LED的最大电流。给定微控制器的输出可以提供满摆幅输出的电压, VCC与VZ之差限定了两只LED的最大正向电流。例如,如果VCC为5V,VZ为3V,则流过任何一只LED的正向电压就低于2V。一旦设计师选定了齐纳二极管的电压,VCC只能有少许变动,否则, LED的亮度就会出现波动。
使用分立元件时,另有一种廉价的电路能避免其他电路的缺点(图3)。图中,当微控制器的输出端口为高电平时,电流流经绿色(上方)LED、R2、D2和FETQ2,端口的高电平接通。当微控制器输出端口变为低电平时,晶体管Q1导通,通过R2和红色(下方)LED向端口管脚提供电流。电路可以对称地工作,因为无论微控制器端口管脚的电平是高还是低,硅二极管D2的正向压降都出现。VCC可能在运行中出现变化,但必须保持高于3V。
你可以单独调整 LED 的电流,以使两者亮度均衡,或对微控制器电源电压与LED驱动电路VCC之间的差异作出补偿。方法是在Q1的射极与D2的阳极之间用两只串联的电阻器代替R2。并将两支电阻器的中点连接到LED上。
当微控制器的端口管脚被配制成“有上拉的输入”时,端口为绿色LED提供少量电流。但是,只要上拉电阻器阻值等于或高于22 kΩ,就不会使关断状态下的LED产生使人误解的光输出。当端口管脚的输入信号浮动时,即VCC为5V,而端口配置成无上拉电阻器的输入,则电路不产生任何额外的电流,而由R1所决定的静态电流平均值小于100mA。