1、MAX7219介绍
MAX7219是一种高集成化的串行输入/输出共阴极显示驱动器,可实现微处理器与7段码的接口,可以显示8位或64位单一LED。芯片上包括BCD码译码器、多位扫描电路、段驱动器、位驱动器、内含8×8位静态RAM,用于存放显示数据。只需外接一个电阻就可为所有的LED提供段电流。
MAX7219的三线串行接口适用于所有微处理器,单一位数据可被寻址和修正,无需重写整个显示器。MAX7219具有软件译码和硬件译码两种功能,软件译码是根据各段笔划与数据位的对应关系进行编码,硬件译码采用BCD码(简称B码)译码。MAX7219工作模式包括150μA低压电源关闭模式、模拟数字亮度控制、限扫寄存器(允许用户从第1位数字显示到第8位)及测试模式(点亮所有LED)。
2、MAX7219引脚功能
MAX1279引脚排列如图1所示,
图1 MAX1279引脚排列图
引脚功能:
DIN:串行数据输入端。当CLK为上升沿时,数据存入内部的16位寄存器
DOUT:串行数据输出端,用于级连扩展
LOAD:装载数据输入,在装载的上升沿,串行输入的最后一个16位数据被锁存。
CLK:串行时钟输入,其最大工作频率可达10MHz。时钟上升沿是数据输入,时钟下降时数据从串行数据输出口输出
DIG0~DIG7:8位LED位选线,从共阴极LED中吸入电流
SEGA~SEGGDP7段驱动和小数点驱动
ISET:通过一个10k电阻和Vcc相连,设置段电流
GND:地线
V+:电源
3、MAX7219的功能框图
图2 MAX7219的功能框图
串行输入数据在时钟上升沿时移入内部的16位移位寄存器,在装载的上升沿时数据被锁存在每一位或寄存器中。装载信号必须在第16个时钟上升沿发生时或之后达到高电平,但要在下一个时钟的上升沿和数据丢失之前到达。串行输入数据通过移位寄存器传输,在以后数据输出的16.5个时钟循环出现,数据在时钟的下降沿记录下来。数据各位记录为D0~D15(如表2所列),D8~D11为移位寄存器地址,D0~D7为数据,D12~D15是无关位。第一位接收到的位是最高位D15。D7为数据最高有效位,D0为数据最低有效位。
4、MAX7219控制字
MAX7219有14个可寻址的控制字寄存器(如表3),控制字寄存器由芯片的8×8双端口SRAM识别,SRAM直接寻址,这样单一的位能被更改或保留,条件是电源电压明显大于2V。控制字寄存器包括译码模式、显示强度、扫描限制(被扫描位的个数)、关闭模式、显示测试(点亮所有的LED)。另外还有一个空操作寄存器,该寄存器允许数据从DIN直送DOUT,在设备串接情况下,不会改变显示或影响任何控制寄存器。
图3 MAX7219内部的相关寄存器
分别介绍如下:
(1)译码控制寄存器(X9H)
如图4所示,MAX7219有两种译码方式:B译码方式和不译码方式。当选择不译码时,8个数据为分别一一对应7个段和小数点位;B译码方式是BCD译码,直接送数据就可以显示。实际应用中可以按位设置选择B译码或是不译码方式。
图4 MAX7219的译码控制寄存器
当选择软件译码方式时,数据D7~D0对应的MAX7219码的各段笔划如表5所列。当工作于硬件(B码)译码模式时,译码器只选择数据寄存器中较低的几位(D3~D0),不考虑D4~D6位。D7位显示十进制小数点,独立于译码器,当D7=1时,十进制小数DP点亮。字符0~9对应的16进制码为×0~×9,字符-、E、H、L、P和消隐分别对应的16进制码为×A~×F。
(2)扫描界限寄存器(XBH)
如图5所示,此寄存器用于设置显示的LED的个数(1~8),比如当设置为0xX4时,LED0~5显示。
图5 MAX7219的扫描界限控制寄存器
(3)亮度控制寄存器(XAH)
共有16级可选择,用于设置LED的显示亮度,从0xX0~0xXF
(4)关断模式寄存器(XCH)
共有两种模式选择,一是关断状态,(最低位D0=0)一是正常工作状态(D0=1)。
(5)显示测试寄存器(XFH)
显示检测寄存器有两种操作模式:一般测试和显示测试。显示测试模式时所有的LED点亮,方法是将所有控制字寄存器(包括关闭寄存器)置成无效。在显示测试模式下扫描8位的串行接口8位LED显示驱动器MAX7219工作周期是31/32。正常测试的16进制码为×0,显示测试的16进制码为×1。
(6)空操作寄存器
空操作寄存器在MAX7219串接时使用,把所有芯片的LOAD端连在一起,并将DOUT连接到下一个MAX7219的DIN上。DOUT是CMOS输出,可以驱动后边的串接MAX7219。例如,4个MAX7219串联,然后写第4个片子,再送入设想的16位字,紧跟3个空操作码(×0××),当LOAD升高时,所有装置的数据被锁存,前3个芯片接到空操作命令,第4个芯片接到设想的数据。
5、 应用实例
图3 为8051 与MAX7219 接口组成的8位L ED 硬件扫描动态显示器。假如使显示器显示出“HEL P7219”, 软件译码和硬件译码的具体实现方法如下。
(1) 软件译码编程:
先找出各字符的编码,根据a 、b 、c 、d 、e 、f 、g 各段与数据位的对应关系,可得: H 中a 、d 段为0 , 。其余为1 ,即00110111 或37H ,同样E、L 、P 、7、2、1、9 的编码分别为4FH、0EH、67H、70H、6DH、30H、73H。将HEL P7219 字符编码分别存入8051 地址为50H 单元(片内RAM存放显示数据的8 个字节单元首地址) 。显示器最左边一位为第一位,R0 为对应的显示位,R1 为显示数据单元地址,R2 为显示位数,共8 位。因8051 串行输出的时序顺序为将一字节的最低位最先送出, 而MAX7219 的时序顺序为将接收到的第一位当作该一字节数据的最高位, 所以需要改变送出位的顺序。
程序如下:
SHOW: CL R P1. 0 ;LOAD 置低
MOV A , # 09H ;译码模式控制字
LCALL CHAN GE
MOV A , # 00H ;软件译码
LCALL CHAN GE
SETB P1. 0 ; 置LOAD 为高, 锁存软件译码控制字
ACALL DISPLA Y8 ;显示8 位数据
DISPLA Y8 :MOV R0 , # 01H ;置显示位,从第0 位开始
MOV R1 , # 50H ;置显示数据首址
MOV R2 , # 08H ;共8 位显示
A GAIN : CL R P1. 0
MOV A ,R0 ;显示位
LCALL CHAN GE
MOV A , @R1 ;取出显示数据
LCALL CHAN GE ;输出数据
SETB P1. 0
INC R0 ;指向下一位
INC R1 ;指向下一位显示数据
DJNZ R2 ,A GAIN ;8 位未完,继续
RET
CHAN GE : MOV C ,ACC. 7 ; 改变位顺序,对应于接收位
MOV 0A0H ,C
MOV C ,ACC. 6
MOV 0A1H ,C
MOV C ,ACC. 5
MOV 0A2H ,C
MOV C ,ACC. 4
MOV 0A3H ,C
MOV C ,ACC. 3
MOV 0A4H ,C
MOV C ,ACC. 2
MOV 0A5H ,C
MOV C ,ACC. 1
MOV 0A6H ,C
MOV C ,ACC. 0
MOV 0A7H ,C
MOV A ,0A0H
MOV SBU F ,A (下转P45图3 8051 与MAX7219 组成的8 位L ED 显示器)
JNB TI , $ ;等待发送完毕
CL R TI ;清TI 标志,允许再发
RET
(2) 硬件译码编程:
若采用B 码译码显示“HEL P7219”字符串,对应的编码分别为:0CH、0BH、0DH、0EH、07H、02H、01H、09H。8 个数据字节存50H开始的单元中,程序如下:
SHOW: CL R P1. 0 ;LOAD 置低
MOV A , # 09H ;译码模式控制字
LCALL CHAN GE
MOV A , # FFH ;B 码硬件译码
SETB P1. 0 ; 置LOAD 为高, 锁存硬件译码控制字
ACALL DISPLA YS ;显示8 位数据