LED显示驱动器MAX7219的单片机接口技术及编程
刘汉民
佛山分析仪器厂 广东省佛山市 528041
摘要:介绍LED显示驱动器MAX7219结构原理、性能特点、应用电路以及编程方法。
关键词:LED 串行数据 时序 CPU
1 概述
MAX7219是美国MAXIM公司研制的紧凑型、串行输入、串行输出、共阴极新型LED显示驱动器。它一片芯片可以驱动多达8位7段LED显示器、条型图形、或64个单个LED。其片内有BCD译码器、多路复用扫描电路、段和数字驱动器、以及存贮每个数字的8@8静态RAM。所有LED的段电流设定只需一个外部电阻来。这种LED驱动器有以下特点:
(1)接口简单,占用CPU的I/O口线少。对外接口只有3根I/O口线。
(2)各个寄存器可一单独被寻址和更新,不需要全部更新。
(3)允许用户对每个显示位是选择BCD译码方式还是非译码方式进行定义。
(4)具有150LA的低功耗停机方式。
(5)可以模拟和数据控制显示的亮度。
(6)可以进行级连,最多可以级连8片MAX7219,驱动64个数码管。
2 硬件接口电路
MAX7219是24脚DIP塑料封装元件,3片MAX7219芯片与89C52芯片及共阴极小电流LED段码显示器的接口电路简单,原理图如图1所示。其中89C52的P1.0接第一片MAX7219的DIN数据输入管脚,P1.2接三片MAX7219的CLK时钟输入管脚,P1.1三片接MAX7219的LOAD锁定输入管脚,第一片MAX7219的DOUT数据输出管脚接到第二片MAX7219的DIN数据输入管脚,第二片MAX7219的DOUT数据输出管脚接到第三片MAX7219的DIN数据输入管脚。
MAX7219可通过V+管脚和ISET管脚之间所接的外部电阻RSET来控制,RSET电阻越大段电流越小。其最小值不小于95308,此时典型段电流为37mA.为了减少外界的干扰,应在MAX7219V+管脚和GND管脚之间加上一个0.1LF的涤纶电容和一个10LF的钽电容。当MAX7219芯片和主控芯片(例如CPU)的距离较远时,为了防止高频信号的干扰,传输数据的频率最好低一些,并在CLK时钟输入管脚和LOAD锁定输入管脚和GND管脚之间各自接上一个1000pF的瓷片电容器,在进行电路板设计时应尽可能使MAX7219芯片和所驱动的LED显示器以及主控芯片(例如CPU)靠近,以防止高频信号的干扰;当MAX7219芯片和主控芯片(例如CPU)的距离较近时,CLK时钟输入管脚和LOAD锁定输入管脚和GND管脚之间无需再各自接上一个1000pF的瓷片电容器。MAX7219所能直接驱动的是共阴极小电流LED显示器,它不能直接驱动共阳极LED显示器,否则会损坏器件。在级连显示时,当被驱动的数码管不是8的倍数时,最好将每个芯片所驱动的显示位数设计为一样,这样所有显示器的显示亮度才一致。
3 软件编程
MAX7219与89C52芯片采用的是串行方式进行数据传送,数据格为16位,发送到DIN端的串行数据在每个CLK的上升沿移入到内部16位移位寄存器中,然后在LOAD的上升沿时数据被锁存到数字或控制寄存器中。DIN端的数据通过移位寄存器传送,并在16.5个时钟周期后出现在DOUT端,并向下一个MAX7219芯片送数。16位数据中D8~D11是寄存器地址,D0~D7为数据,D12~D15为无关位,MAX7219接收的第一位为D15。MAX7219中有14个数据和控制寄存器。
311 寄存器
(1)非工作寄存器(No-Op) 是作为MAX7219级连时使用,其地址为X0H。这个寄存器是在MAX7219级连,只需要给后面的数据存贮器送数,不用给前面的数送数时使用。
(2)数据存贮寄存器(DIG0~DIG7) 这8个存贮器用来存放显示数据,其地址码分别为X1H~X8H。MAX7219在BCD译码显示方式中,X1~X8中存贮的数为00H~0FH,这时数码管只能显示0~9、-、E、H、L、P或不显示;在非译码方式显示中,X1~X8中存贮的数为一个不定值,相应的笔划要显示时其值为1,不显示时为0,DP、A~F和D7~D0为一一对应关系。
(3)译码方式寄存器(DECODEMODE) 是作为DIG0~DIG7显示方式选择寄存器,其地址为X9H。当X9=00H时,DIG0~DIG7全部选择非译码方式显示;当X9=01H时,DIG0选择BCD译码方式显示,DIG1~DIG7选择非译码方式显示;当X9=0FH时,DIG0~DIG3选择BCD译码方式显示,DIG4~DIG7选择非译码方式显示;当X9=0FFH时,DIG0~DIG7全部选择BCD译码方式显示。
(4)亮度寄存器(INTENSITY) 用来调节显示器的显示段电流(占空比),其地址为XAH。XA=00H、01H,,0EH、0FH时,相应的占空比为1/32、3/32,,29/32、31/32。
(5)扫描限制寄存器(SCANLIMIT) 用来限制显示扫描显示位数,其地址为XBH。当XBH=X000B~X111B时对应的显示位为1~8位。即XBH=X000B时,DIG0位显示,其它位不显示;XBH=X001B时,DIG0、DIG1位显示,其它位不显示;当XBH=X010B时,DIG0、DIG1、DIG2位显示,其它位不显示;其余类推。
(6)停机寄存器(SHUTDOWN) 用来设定显示器是否显示的寄存器,其地址为XCH。当XCH=X0B时,所有的显示器停止显示;当XCH=X1B时,所有的显示器按设定的方式显示。
(7)显示测试寄存器(DISPLAYTEST) 用来测试显示芯片是否正常的寄存器,其地址为XFH。当XFH=X0B时,为正常显示模式;当XFH=X1B时,显示测试模式。
312 编程
MAX7219与89C52芯片编程主要分为二部分:初始化子程序、送显子程序以及数据传送。
(1)数据传送子程序 是根据器件的传送的时序编写的子程序,其主要功能是串行传送数据,8位数据(一个字节)传送如下例所示。程序中,DISDIN为MAX7219数据输入线;DISCLK为MAX7219时钟输入线。调用数据传送子程序前先把要传送的数据付给累加器A。
DISDIN EQU P1.0;MAX7219数据输入线
DISCLK EQU P1.2;MAX7219时钟输入线
DISP: CLR RS0
CLR RS1
MOV R1,#08H
DISP01: RLC A
JC DISP03
LJMP DISP04
DISP02: DJNZ R1,DISP01
RET
DISP03: SETB DISDIN
SETB DISCLK
CLR DISCLK
CLR DISDIN
LJMP DISP02
DISP04: CLR DISDIN
SETB DIS
CLKCLR DISCLK
LJMP DISP02
给MAX7219送数时,首先是使MAX7219的片选脚电平来低(变为低电平),接着给MAX7219传送的数是该单元的单元单员值(一个字节),然后给MAX7219传送要送到单元送数(一个字节),最后使MAX7219的片选脚电平拉高(变为高电平),这样数据才被锁存到相应的数据存贮器里。在给n片MAX7219芯片送数时需要时钟的个数由最后芯片的序号n乘上16(n@16);在进行数据传送时,可以给n片MAX7219芯片或其中某几片MAX7219芯片同时送数某一存贮单元送数,也可以单独给某一芯片的某一存贮单元送数,送数的顺序是最后序号芯片的数据在最前面,其余顺序类推。
(2)初始化程序 主要是对每片MAX7219的显示模式、显示亮度、显示位数进行初始化。初始化时首先,将所有MAX7219芯片的显示关掉,即给每片MAX7219芯片的0CH单元送00H;第二,对每片MAX7219芯片的每一显示位进行初始化,选择相应的显示方式(非译码方式或译码方式),即给译码方式寄存器(DECODEMODE)X9H单元送相应的数值;第三,对每片MAX7219芯片所驱动的数码管的显示电流进行初始化,选择相应的显示电流(占空比),即给亮度寄存器(INTENSITY)XAH单元送相应的数值;第四,对每片MAX7219芯片的驱动数码管数量进行初始化,限制显示扫描显示位数,即给扫描限制寄存器(SCANLIMIT)XBH单元送相应的数值;第五,将所有的显示开启,即给每片MAX7219芯片的0CH单元送01H。这样就完成整个初始化过程。
(3)送显程序的功能 是将要显示的数值送到每片MAX7219的数据寄存器(X1H~X8H)里,使其显示出来。
4 结束语
MAX7219是高性能的LED显示驱动器,它的主要特点是占用CPU的I/O口线少(3根),可以把几块MAX7219连起来使用(最多8块),它占用的I/O口线还是不变(3根),这对于那些要求占用的I/O口线少,LED显示位数多的显示设计中特别适用,该芯片已在我厂的多个产品中得到很好的应用。