利用MAX7219驱动LED显示器
北京矿冶研究总院电化学控制浮选研究室(100044) 唐晓蓉 周俊武 肖玉明
摘 要:介绍了一种新型的共阴极LED驱动芯片——MAX7219,单片7219可驱动8位共阴极7段LED数码管。着重论述了该芯片的硬件特点和使用方法,并给出用该芯片串联以驱动多片LED进行显示的实例。用该芯片驱动LED,较常规动态显示和静态显示,具有硬件电路简单、软件工作量小、显示亮度高、不闪烁等优点。
关键词:LED显示器 共阴极LED驱动芯片 MAX7219应用实例
MAX7219是MAXIM公司生产的7段共阴极LED数码管的驱动芯片,每一片7219最多可驱动8位LED或64位单独的数码管。它集BCD码译码器、多路扫描器、段驱动和位驱动电路于一体,内含8×8位双口静态SRAM,可保存8位LED数据。外围接口电路简单,使用方便,仅需三根I?O口线便可提供串行数据DIN、
时钟信号CLK和数据锁存信号LOAD。即可驱动多块LED进行动态显示,并可串联使用。常规的动态显示往往具有亮度不够、闪烁等缺点,而静态显示又有硬件电路复杂,线路板设计成本高等缺陷,若采用MAX7219驱动LED,则可克服上述缺点,大大简化硬件电路和减小软件的工作量。
1 MAX7219的工作性能与寄存器
111 MAX7219工作性能
MAX7219芯片具有典型的三线串行接口,命令
与数据组成16位字串,从DIN管脚串入,从DOUT管脚串出。当每一个CLK脉冲上升沿到来时,串行数据从DIN管脚进入7219的内部移位寄存器,第16个CLK上升沿,LOAD管脚变为高电平,数据即被锁存入内部寄存器中,第16.5个CLK脉冲后,数据在CLK下降沿从DOUT管脚移出,最先收到的是最高位D15。时序图如图1所示。
16位串行数据中,D15~D12为无关位,D11~D8为地址位,低8位为寄存器数据(LED位驱动寄存器数据或状态寄存器数据),数据格式如表1
MAX7219有14个可寻址命令寄存器,分别为8
个位驱动寄存器和6个状态寄存器,命令寄存器被初始化后,如不重新初始化,则7219保持初始化的那些状态。地址排列见表2。
112 状态控制寄存器功能
11211 译码方式寄存器(地址=×9H)
MAX7219提供了段选码和BCD译码两种方式,
具有译码功能,驱动多位LED时可以按位选择这两种方式。当译码方式寄存器的数据位D7~D0为“1”时,该位LED选择BCD码方式,为“0”时为段选码方式。工作在BCD码方式时,LED能显示从“0”~“9”的数字以及“-”、“E”、“F”、“H”、“L”、“P”等字符和空显示,对应串行数据低8位依次为“×0H”~“×FH”,例
如,让LED位3显示数字“5”时,串行数据格式为“×4
×5H”,接线时必须将LED段选线与MAX7219的段选线一一对应连接;工作在段选码方式时,根据7段LED每一段的亮?
灭状态可以显示多种字符,且无需将段选线一一对应相连,由于是共阴级LED,故当该
段数码管对应数据位置“1”时,该段亮。两种方式可以
根据需要灵活选择。11212 显示亮度寄存器(地址=×AH)MAX7219可以从两个方面来控制LED的段电
流。一个是在V+和ISET管脚间加限流电阻,该电阻
最小为9.53k8,对应的段电流为37mA;另一个是根据亮度寄存器的数据,由内部的脉宽调制DAC来控
制LED段电流的持续时间和扫描时间比,以此控制
LED的亮度,称为软件亮度控制,此时间比在31?
32~1?32之间(对应串行数据低8位为“×FH”~“×0H”)。11213 扫描位数寄存器(地址=×BH)用1片MAX7219驱动多片LED进行动态显示
时,最多可驱动8位LED,此时多路扫描器扫描频率为1300Hz,少于8位LED时,频率为8×1300?n(n为LED扫描位数),对应不同的扫描位数,将扫描位数寄存器的数据置值,可以控制这个频率。多片MAX7219串联使用时,由于该寄存器控制了LED扫描时间,会影响LED亮度,故每片MAX7219的扫描位数寄存器应初始化为相同的值,当每片MAX7219驱动不同的LED位数时,还应按驱动位数最少的那一片来设置,例如用两片MAX7219串联,其中一片驱动5位LED(D0~D4),而另一片驱动3位LED(D0~D2),需将两
片均设置为扫描D0~D2位(“
×2H),否则若设置成扫描D0~D4位(“
×4H),则驱动3位LED那一组的亮度会偏高,造成显示亮度不均匀。11214 关闭寄存器(地址=×CH)
系统上电时,MAX7219即进入关闭状态,此时所有的命令寄存器均被复位,数据寄存器内没有译码数据,且扫描位数寄存器复位为只扫描第0位,显示亮度控制寄存器复位为最小值,LED不亮,所以要使显示器正常工作,必须在程序开头对各命令寄存器进行初始化。关闭寄存器的数据格式为“×0”时,表示进入关闭态,此时显示驱动器可受控于测试寄存器;数据格式为“×1”时,表示进入正常操作状态,可以对数码管的显示进行修改。
图2 用MAX7219串联驱动多片LED分区进行显示的电路
11215 显示测试寄存器(地址=×FH)
该控制寄存器有两种工作方式。当寄存器数据为“×1H”时,表明为测试状态,此时所有LED数码管维持全亮;当寄存器数据为“×0H”时,显示驱动器进入正常操作状态。
11216 空操作寄存器(地址=×0H)
此寄存器用于MAX7219的串联,各片MAX7219控制不同的显示区,在更新某一区时,可不影响其它显示区的状态。例如,用两片MAX7219串联,其中第1区LED显示时间,第2区LED显示日期,硬件连接时将两片的LOAD管脚并在一起,第2区MAX7219的
DOUT与第1区的DIN相连,则第2区的DIN为串
行数据输入端。当需要向第2区的MAX7219送命令驱动LED显示日期时,一次送两组数据,每组16位串行传送,根据串行接口的使用方法,先向DIN脚送空操作命令字数据(×0××H),接着送显示日期的数据字,当两组数据共32位全部串行输完后,空操作命令字(第1组数据)已移入第1区的MAX7219,当LOAD变为高电平时,两组数据均被锁存入所属的
MAX7219中,于是第1区MAX7219为空操作,其原
寄存器的状态不受影响,而第2区MAX7219为显示日期操作,该区的LED可以改变日期的显示状态;同
样,当需要改变时间显示时,反过来向第2区送空操作
命令,从而不改变日期的显示状态。
综上所述,根据MAX7219的工作性能和各寄存器的方式选择,我们可以设计出适合该芯片三线串行接口的硬件电路,并在程序的开头初始化各状态控制寄存器。
2 MAX7219的应用实例
设计一个日期和时间的显示器,显示“年”、“月”、“日”、和“时”、“分”、“秒”,共需12片LED,选用LC4011共阴极LED,驱动器采用两片MAX7219串联的方案,每片驱动6位LED,分作两个显示区,第1片7219控制显示“时”、“分”、“秒”,第2片7219控制显示“年”、“月”、“日”。由于是动态显示,故将各区中6位LED的段选线并在一起,分别连到所属7219的段选管脚,各LED位选线连到7219对应位选管脚。串联MAX7219时,只需将第2片的DOUT(串行数据输出)脚连到第1片的DIN(串行数据输入)脚,两片7219的LOAD和CLK均并联即可,故数据从第2片的DIN脚串入。为避免占用单片机的I?O口,可由8155扩展的并口提供DIN、CLK和LOAD信号,也可用一片74LS273提供,这里采用后一种,硬件连接见图3。
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?3 串行数据测试位为“1”,DIN为高电平3? DISPREG=DISPREGOR0000$0001B; ELSEDISPREG=DISPREGAND1111$1110B;?3 测试位为“0”,DIN为低电平3? DATA273=DISPREG;
DATA273=DATA273OR0000$0010B;?3 CLK为高电平3?
DATA273=DATA273AND1111$1101B;?3 CLK为低电平3
?END;
?3 第1片16位串行数据输送完3?
DISPREG=0;DOI=1TO16;
IFBITTST(1COM2,16-I)THEN;3? 串行数据测试位为“1”,DIN为高电平 3? DISPREG=DISPREGOR0000$0001B;
ELSEDISPREG=DISPREGAND1111$1110B;?3 测试位为“0”,DIN为低电平 3? DATA273=DISPREG; IFI=16THEN?3 第2片16位串行数据输送完 3? DO;
DATA273=DATA273AND1111$1011B;?3 LOAD为低电平 3? DATA273=DATA273OR0000$0110B;?3 CLK和LOAD为高电平 3? DATA273=DATA273AND1111$1101B;?3 CLK为低电平 3? END; ELSE?3 第2片16位串行数据没输送完 3? DO;
DATA273=DATA273OR0000$0010B;?3 CLK为高电平 3? DATA273=DATA273AND1111$1101B;?3 CLK为低电平 3?
END;
ENDDISPLAY;
利用MAX7219芯片驱动共阴极数字LED进行
动态显示,可以用1片7219驱动多达8位数字LED,亦可用串联的方式扩展使用,实践证明,用该芯片驱动LED具有占用I?O口资源少,电路接线简单,使用灵活,显示效果好的优点。