产品 求购 供应 文章 问题

0431-81702023
LED
利用MAX7219驱动LED显示器

利用MAX7219驱动LED显示器

北京矿冶研究总院电化学控制浮选研究室(100044) 唐晓蓉 周俊武 肖玉明

 :介绍了一种新型的共阴极LED驱动芯片——MAX7219,单片7219可驱动8位共阴极7LED数码管。着重论述了该芯片的硬件特点和使用方法,并给出用该芯片串联以驱动多片LED进行显示的实例。用该芯片驱动LED,较常规动态显示和静态显示,具有硬件电路简单、软件工作量小、显示亮度高、不闪烁等优点。

关键词:LED显示器 共阴极LED驱动芯片 MAX7219应用实例

  MAX7219MAXIM公司生产的7段共阴极LED数码管的驱动芯片,每一片7219最多可驱动8LED64位单独的数码管。它集BCD码译码器、多路扫描器、段驱动和位驱动电路于一体,内含8×8位双口静态SRAM,可保存8LED数据。外围接口电路简单,使用方便,仅需三根I?O口线便可提供串行数据DIN

时钟信号CLK和数据锁存信号LOAD。即可驱动多块LED进行动态显示,并可串联使用。常规的动态显示往往具有亮度不够、闪烁等缺点,而静态显示又有硬件电路复杂,线路板设计成本高等缺陷,若采用MAX7219驱动LED,则可克服上述缺点,大大简化硬件电路和减小软件的工作量。

1 MAX7219的工作性能与寄存器

111 MAX7219工作性能

MAX7219芯片具有典型的三线串行接口,命令

与数据组成16位字串,DIN管脚串入,DOUT管脚串出。当每一个CLK脉冲上升沿到来时,串行数据从DIN管脚进入7219的内部移位寄存器,16CLK上升沿,LOAD管脚变为高电平,数据即被锁存入内部寄存器中,16.5CLK脉冲后,数据在CLK下降沿从DOUT管脚移出,最先收到的是最高位D15。时序图如图1所示。

16位串行数据中,D15D12为无关位,D11D8为地址位,8位为寄存器数据(LED位驱动寄存器数据或状态寄存器数据),数据格式如表1

MAX721914个可寻址命令寄存器,分别为8

个位驱动寄存器和6个状态寄存器,命令寄存器被初始化后,如不重新初始化,7219保持初始化的那些状态。地址排列见表2

112 状态控制寄存器功能

11211 译码方式寄存器(地址=×9H)

MAX7219提供了段选码和BCD译码两种方式,

具有译码功能,驱动多位LED时可以按位选择这两种方式。当译码方式寄存器的数据位D7D0为“1”时,该位LED选择BCD码方式,为“0”时为段选码方式。工作在BCD码方式时,LED能显示从“0”~“9”的数字以及“-”、“E”、“F”、“H”、“L”、“P”等字符和空显示,对应串行数据低8位依次为“×0H”~“×FH,

,LED3显示数字“5”时,串行数据格式为“×4

×5H,接线时必须将LED段选线与MAX7219的段选线一一对应连接;工作在段选码方式时,根据7LED每一段的亮?

灭状态可以显示多种字符,且无需将段选线一一对应相连,由于是共阴级LED,故当该

段数码管对应数据位置“1”时,该段亮。两种方式可以

根据需要灵活选择。11212 显示亮度寄存器(地址=×AH)MAX7219可以从两个方面来控制LED的段电

流。一个是在V+ISET管脚间加限流电阻,该电阻

最小为9.53k8,对应的段电流为37mA;另一个是根据亮度寄存器的数据,由内部的脉宽调制DAC来控

LED段电流的持续时间和扫描时间比,以此控制

LED的亮度,称为软件亮度控制,此时间比在31?

321?32之间(对应串行数据低8位为“×FH”~“×0H)11213 扫描位数寄存器(地址=×BH)1MAX7219驱动多片LED进行动态显示

,最多可驱动8LED,此时多路扫描器扫描频率为1300Hz,少于8LED,频率为8×1300?n(nLED扫描位数),对应不同的扫描位数,将扫描位数寄存器的数据置值,可以控制这个频率。多片MAX7219串联使用时,由于该寄存器控制了LED扫描时间,会影响LED亮度,故每片MAX7219的扫描位数寄存器应初始化为相同的值,当每片MAX7219驱动不同的LED位数时,还应按驱动位数最少的那一片来设置,例如用两片MAX7219串联,其中一片驱动5LED(D0D4),而另一片驱动3LED(D0D2),需将两

片均设置为扫描D0D2(

×2H),否则若设置成扫描D0D4(

×4H),则驱动3LED那一组的亮度会偏高,造成显示亮度不均匀。11214 关闭寄存器(地址=×CH)

系统上电时,MAX7219即进入关闭状态,此时所有的命令寄存器均被复位,数据寄存器内没有译码数据,且扫描位数寄存器复位为只扫描第0,显示亮度控制寄存器复位为最小值,LED不亮,所以要使显示器正常工作,必须在程序开头对各命令寄存器进行初始化。关闭寄存器的数据格式为“×0”时,表示进入关闭态,此时显示驱动器可受控于测试寄存器;数据格式为“×1”时,表示进入正常操作状态,可以对数码管的显示进行修改。

MAX7219串联驱动多片LED分区进行显示的电路

11215 显示测试寄存器(地址=×FH)

该控制寄存器有两种工作方式。当寄存器数据为“×1H”时,表明为测试状态,此时所有LED数码管维持全亮;当寄存器数据为“×0H”时,显示驱动器进入正常操作状态。

11216 空操作寄存器(地址=×0H)

此寄存器用于MAX7219的串联,各片MAX7219控制不同的显示区,在更新某一区时,可不影响其它显示区的状态。例如,用两片MAX7219串联,其中第1LED显示时间,2LED显示日期,硬件连接时将两片的LOAD管脚并在一起,2MAX7219

DOUT与第1区的DIN相连,则第2区的DIN为串

行数据输入端。当需要向第2区的MAX7219送命令驱动LED显示日期时,一次送两组数据,每组16位串行传送,根据串行接口的使用方法,先向DIN脚送空操作命令字数据(×0××H),接着送显示日期的数据字,当两组数据共32位全部串行输完后,空操作命令字(1组数据)已移入第1区的MAX7219,LOAD变为高电平时,两组数据均被锁存入所属的

MAX7219,于是第1MAX7219为空操作,其原

寄存器的状态不受影响,而第2MAX7219为显示日期操作,该区的LED可以改变日期的显示状态;

,当需要改变时间显示时,反过来向第2区送空操作

命令,从而不改变日期的显示状态。

综上所述,根据MAX7219的工作性能和各寄存器的方式选择,我们可以设计出适合该芯片三线串行接口的硬件电路,并在程序的开头初始化各状态控制寄存器。

2 MAX7219的应用实例

设计一个日期和时间的显示器,显示“年”、“月”、“日”、和“时”、“分”、“秒”,共需12LED,选用LC4011共阴极LED,驱动器采用两片MAX7219串联的方案,每片驱动6LED,分作两个显示区,17219控制显示“时”、“分”、“秒”,27219控制显示“年”、“月”、“日”。由于是动态显示,故将各区中6LED的段选线并在一起,分别连到所属7219的段选管脚,LED位选线连到7219对应位选管脚。串联MAX7219,只需将第2片的DOUT(串行数据输出)脚连到第1片的DIN(串行数据输入),两片7219LOADCLK均并联即可,故数据从第2片的DIN脚串入。为避免占用单片机的I?O,可由8155扩展的并口提供DINCLKLOAD信号,也可用一片74LS273提供,这里采用后一种,硬件连接见图3

软件设计

下面给出PL?M96语言程序清单,其中DIS2PLAY子程序处理三线串行接口,在主程序中初始化

MAX7219,显示时间、

日期时调用DISPLAY子程序。由于篇幅所限,只列出DISPLAY子程序,并假定时间、日期数据为处理后的BCD码数据,分别存在数组TIMEDATA(6)DATEDATA(6)中。

DISPLAY:PROCEDURE(COM1,COM2;

?3显示子程序3?

DECLARE(COM1,COM2)WORD;DECLAREIWORD;

DECLAREDISPREGBYTE;DISPREG=0;DOI=1TO16;

  IFBITTST(1COM1,16-I)THEN?串行数据测试位为“1,DIN为高电平3?    DISPREG=DISPREGOR00000001B;  ELSEDISPREG=DISPREGAND11111110B;?测试位为“0,DIN为低电平3?  DATA273=DISPREG;

  DATA273=DATA273OR00000010B;?3 CLK为高电平3?

  DATA273=DATA273AND11111101B;?3 CLK为低电平3

?END;

?116位串行数据输送完3?

DISPREG=0;DOI=1TO16;

  IFBITTST(1COM2,16-I)THEN;3? 串行数据测试位为“1,DIN为高电平 3?   DISPREG=DISPREGOR00000001B;

  ELSEDISPREG=DISPREGAND11111110B;?测试位为“0,DIN为低电平 3?    DATA273=DISPREG;   IFI=16THEN?216位串行数据输送完 3?     DO;

      DATA273=DATA273AND11111011B;?3 LOAD为低电平 3?      DATA273=DATA273OR00000110B;?3 CLKLOAD为高电平 3?      DATA273=DATA273AND11111101B;?3 CLK为低电平 3?     END;   ELSE?216位串行数据没输送完 3?     DO;

      DATA273=DATA273OR00000010B;?3 CLK为高电平 3?      DATA273=DATA273AND11111101B;?3 CLK为低电平 3?

     END;

ENDDISPLAY;

利用MAX7219芯片驱动共阴极数字LED进行

动态显示,可以用17219驱动多达8位数字LED,亦可用串联的方式扩展使用,实践证明,用该芯片驱动LED具有占用I?O口资源少,电路接线简单,使用灵活,显示效果好的优点。