产品 求购 供应 文章 问题

0431-81702023
LED
LED显示驱动器MAX7219的单片机接口技术及编程

LED显示驱动器MAX7219的单片机接口技术及编程

刘汉民

佛山分析仪器厂 广东省佛山市 528041

 摘要:介绍LED显示驱动器MAX7219结构原理、性能特点、应用电路以及编程方法。

关键词:LED 串行数据 时序 CPU

概述

MAX7219是美国MAXIM公司研制的紧凑型、串行输入、串行输出、共阴极新型LED显示驱动器。它一片芯片可以驱动多达87LED显示器、条型图形、或64个单个LED。其片内有BCD译码器、多路复用扫描电路、段和数字驱动器、以及存贮每个数字的8@8静态RAM。所有LED的段电流设定只需一个外部电阻来。这种LED驱动器有以下特点:

(1)接口简单,占用CPUI/O口线少。对外接口只有3I/O口线。

(2)各个寄存器可一单独被寻址和更新,不需要全部更新。

(3)允许用户对每个显示位是选择BCD译码方式还是非译码方式进行定义。

(4)具有150LA的低功耗停机方式。

(5)可以模拟和数据控制显示的亮度。

(6)可以进行级连,最多可以级连8MAX7219,驱动64个数码管。

硬件接口电路

MAX721924DIP塑料封装元件,3MAX7219芯片与89C52芯片及共阴极小电流LED段码显示器的接口电路简单,原理图如图1所示。其中89C52P1.0接第一片MAX7219DIN数据输入管脚,P1.2接三片MAX7219CLK时钟输入管脚,P1.1三片接MAX7219LOAD锁定输入管脚,第一片MAX7219DOUT数据输出管脚接到第二片MAX7219DIN数据输入管脚,第二片MAX7219DOUT数据输出管脚接到第三片MAX7219DIN数据输入管脚。

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的倍数时,最好将每个芯片所驱动的显示位数设计为一样,这样所有显示器的显示亮度才一致。

软件编程

MAX721989C52芯片采用的是串行方式进行数据传送,数据格为16,发送到DIN端的串行数据在每个CLK的上升沿移入到内部16位移位寄存器中,然后在LOAD的上升沿时数据被锁存到数字或控制寄存器中。DIN端的数据通过移位寄存器传送,并在16.5个时钟周期后出现在DOUT,并向下一个MAX7219芯片送数。16位数据中D8~D11是寄存器地址,D0~D7为数据,D12~D15为无关位,MAX7219接收的第一位为D15MAX7219中有14个数据和控制寄存器。

311 寄存器

(1)非工作寄存器(No-Op) 是作为MAX7219级连时使用,其地址为X0H。这个寄存器是在MAX7219级连,只需要给后面的数据存贮器送数,不用给前面的数送数时使用。

(2)数据存贮寄存器(DIG0~DIG7) 8个存贮器用来存放显示数据,其地址码分别为X1H~X8HMAX7219BCD译码显示方式中,X1~X8中存贮的数为00H~0FH,这时数码管只能显示0~9-EHLP或不显示;在非译码方式显示中,X1~X8中存贮的数为一个不定值,相应的笔划要显示时其值为1,不显示时为0,DPA~FD7~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) 用来调节显示器的显示段电流(占空比),其地址为XAHXA=00H01H,,0EH0FH,相应的占空比为1/323/32,,29/3231/32

(5)扫描限制寄存器(SCANLIMIT) 用来限制显示扫描显示位数,其地址为XBH。当XBH=X000B~X111B时对应的显示位为1~8位。即XBH=X000B,DIG0位显示,其它位不显示;XBH=X001B,DIG0DIG1位显示,其它位不显示;XBH=X010B,DIG0DIG1DIG2位显示,其它位不显示;其余类推。

(6)停机寄存器(SHUTDOWN) 用来设定显示器是否显示的寄存器,其地址为XCH。当XCH=X0B,所有的显示器停止显示;XCH=X1B,所有的显示器按设定的方式显示。

(7)显示测试寄存器(DISPLAYTEST) 用来测试显示芯片是否正常的寄存器,其地址为XFH。当XFH=X0B,为正常显示模式;XFH=X1B,显示测试模式。

312 编程

MAX721989C52芯片编程主要分为二部分:初始化子程序、送显子程序以及数据传送。

(1)数据传送子程序 是根据器件的传送的时序编写的子程序,其主要功能是串行传送数据,8位数据(一个字节)传送如下例所示。程序中,DISDINMAX7219数据输入线;DISCLKMAX7219时钟输入线。调用数据传送子程序前先把要传送的数据付给累加器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的片选脚电平拉高(变为高电平),这样数据才被锁存到相应的数据存贮器里。在给nMAX7219芯片送数时需要时钟的个数由最后芯片的序号n乘上16(n@16);在进行数据传送时,可以给nMAX7219芯片或其中某几片MAX7219芯片同时送数某一存贮单元送数,也可以单独给某一芯片的某一存贮单元送数,送数的顺序是最后序号芯片的数据在最前面,其余顺序类推。

(2)初始化程序 主要是对每片MAX7219的显示模式、显示亮度、显示位数进行初始化。初始化时首先,将所有MAX7219芯片的显示关掉,即给每片MAX7219芯片的0CH单元送00H;第二,对每片MAX7219芯片的每一显示位进行初始化,选择相应的显示方式(非译码方式或译码方式),即给译码方式寄存器(DECODEMODE)X9H单元送相应的数值;第三,对每片MAX7219芯片所驱动的数码管的显示电流进行初始化,选择相应的显示电流(占空比),即给亮度寄存器(INTENSITY)XAH单元送相应的数值;第四,对每片MAX7219芯片的驱动数码管数量进行初始化,限制显示扫描显示位数,即给扫描限制寄存器(SCANLIMIT)XBH单元送相应的数值;第五,将所有的显示开启,即给每片MAX7219芯片的0CH单元送01H。这样就完成整个初始化过程。

(3)送显程序的功能 是将要显示的数值送到每片MAX7219的数据寄存器(X1H~X8H),使其显示出来。

结束语

MAX7219是高性能的LED显示驱动器,它的主要特点是占用CPUI/O口线少(3),可以把几块MAX7219连起来使用(最多8),它占用的I/O口线还是不变(3),这对于那些要求占用的I/O口线少,LED显示位数多的显示设计中特别适用,该芯片已在我厂的多个产品中得到很好的应用。