||
一般而言,当系统中LED数量较多时,采用动态扫描的方法较为经济,但当系统中LED的数量达到数百只,且每只LED的驱动电流达到数百毫安时,如仍采用动态扫描的方法,会使系统变得较为复杂,可靠性降低,且成本下降有限。为此选用静态法,为每一只LED配一只CD4094和MC1413七达林顿驱动器,见图1(A)。由于利率屏显示时小数点固定,所以可以不用驱动小数点,直接用一个限流电阻将需点亮的小数点接到地即可。
二、单片机驱动CD4094的方式
CD4094是串/并转换器,显然单片机应用串行口驱动,但如果将系统中所有的CD4094全部串接,然后接到串行口上,不仅串行口难以驱动,就算扩展驱动能力后能够驱动,在编写程序时也会很麻烦。为此采用扩展并行口,然后将并行口模拟成串行口的方法来解决,电路参考图1(B),假设将数据端接到P1.2,而脉冲输入端接到P3.3则输出一个数的完整程序如下:
ORG 0000H
LJMP START
START:
SETB P3.3 ;将P3.3置为高电平为后面作准备
MOV 30H,#01H ; 30H为显示缓冲区
S_1:
LCALL DISP
SJMP $
;以上主程序
DISP:
MOV A,30H
MOV DPTR,#ZX_TAB ;字形表首地址
MOVC A,@A+DPTR ;查字形
MOV R7,#2 ;R7用于控制循环次数
DISP_LOOP:
RL A
DJNZ R7,DISP_LOOP
;由于用P1.2作为数据输出端,所以必须先把待送出的数左移二次将数据的第0位
;移到第2位,例要送的数为05H即00000101,移位二次变成00010100
MOV P1,A ;将移位后的数据送到P1口
CLR P3.3
SETB P3.3 ;形成一次脉冲的上升沿,将第一位数据
;送到CD4094去,以刚才例,即P1.2为;高电被送到CD4094中
MOV R7,#7
DISP_LOOP1:
RR A ;数据右移
MOV P1,A ;数据送P1口
CLR P3.3
SETB P3.3 ;形成一次脉冲上升沿,送入一位数据
DJNZ R7,DISP_LOOP1 ;循环7次,送入7位数据
RET
;以刚才的例子,移位7次分别是00001010、00000101、;10000010、01000001、10100000、01010000、00101000请注意粗、斜体的数字,它位加上第一次送出
;的1,正好就是10100000,与串行口发送是相同
ZX_TAB:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
以上例子是发送一个数据,稍作修改,即可一次发送多个数据。如果用其它的并行口位作数据输出端或脉冲输出端,也只要对程序稍作改动即可。
图1(A) |
图1(B) |
采用这一方法后,我们将LED分组,一般利率屏中一行的LED数量为18到20多只不等,将两行或三行为一个单元为其配一个驱动单元(即并行口的两位),这样一个由300到500个左右的LED构成的屏约需30个左右的并行口位,这只需要扩展一片8255加上P1口和P3口的一些位就够了。串行口可以留作键盘扩展或作远距遥控等用。
三、电平转换及驱动能扩展
由于大尺寸LED的压降较高,因此需要较高的驱动电压,这样在CD4094和单片机电路中就要有一个电平转换,选用集电极开路同相器7406就可以完成这一工作(见图3),同时它还兼有扩展驱动能力的作用,实践证明,当7406的上拉电阻取2.2K,8031的晶振为6MHZ时,即便给电路加上0.047UF的电容负载,电路仍能正常工作,可靠性很高。
图2