The MAX7219/MAX7221 are compact, serial input/output common-cathode display drivers that interface microprocessors (µPs) to 7-segment numeric LED displays of up to 8 digits, bar-graph displays, or 64 individual LEDs. Included on-chip are a BCD code-B decoder, mulTIplex scan circuitry, segment and digit drivers, and an 8×8 staTIc RAM that stores each digit. Only one external resistor is required to set the segment current for all LEDs. The MAX7221 is compaTIble with SPI™, QSPI™, and MICROWIRE™, and has slew-rate-limited segment drivers to reduce EMI.
A convenient 4-wire serial interface connects to all common µPs. Individual digits may be addressed and updated without rewriTIng the entire display. The MAX7219/MAX7221 also allow the user to select code-B decoding or no-decode for each digit.
The devices include a 150µA low-power shutdown mode, analog and digital brightness control, a scan-limit register that allows the user to display from 1 to 8 digits, and a test mode that forces all LEDs on.
For applications requiring 3V operation or segment blinking, refer to the MAX6951 data sheet.
MAX7219是MAXIM公司出产的串行输入/输出共阴极数码管显现驱动芯片,一片MAX7219可驱动8个7段(包含小数点共8段)数字LED、LED条线图形显现器、或64个分立的LED发光二级管。该芯片具有10MHz传输率的三线串行接口可与任何微处理器相连,只需一个外接电阻即可设置一切LED的段电流。。它的操作很简单,MCU只需经过模仿SPI三线接口就能够将相关的指令写入MAX7219的内部指令和数据寄存器,一起它还答使用户挑选多种译码方法和译码位。此外它还支撑多片7219串联方法,这样MCU就能够经过3根线(即串行数据线、串行时钟线和芯片选通线)操控更多的数码管显现。MAX7219的外部引脚分配如图1所示及内部结构如图2所示。
图1 MAX7219的外部引脚分配
图2 MAX7219的内部引脚分配
各引脚的功能为:
DIN:串行数据输入端
DOUT:串行数据输出端,用于级连扩展
LOAD:装载数据输入
CLK:串行时钟输入
DIG0~DIG7:8位LED位选线,从共阴极LED中吸入电流
SEG A~SEG G DP 7段驱动和小数点驱动
ISET: 经过一个10k电阻和Vcc相连,设置段电流
MAX7219有下列几组寄存器:(如图3)
MAX7219内部的寄存器如图3,主要有:译码操控寄存器、亮度操控寄存器、扫描边界寄存器、关断形式寄存器、测验操控寄存器。编程时只要正确操作这些寄存器,MAX7219才可作业。
图 3 MAX7219内部的相关寄存器
别离介绍如下:
(1) 译码操控寄存器(X9H)
如图4所示,MAX7219有两种译码方法:B译码方法和不译码方法。当挑选不译码时,8个数据为别离一一对应7个段和小数点位;B译码方法是BCD译码,直接送数据就能够显现。实践使用中能够按位设置挑选B译码或是不译码方法。
图4 MAX7219的译码操控寄存器
(2) 扫描边界寄存器(XBH)
如图5所示,此寄存器用于设置显现的LED的个数(1~8),比方当设置为0xX4时,LED 0~5显现。
图5 MAX7219的扫描边界操控寄存器
(3) 亮度操控寄存器(XAH)
共有16级可挑选,用于设置LED的显现亮度,从0xX0~0xXF
(4) 关断形式寄存器(XCH)
共有两种形式挑选,一是关断状况,(最低位 D0=0)一是正常作业状况(D0=1)。
(5) 显现测验寄存器(XFH)
用于设置LED是测验状况仍是正常作业状况,当测验状况时(最低位 D0=1)各位显现全亮,正常作业状况(D0=0)。
各寄存器具体操作见驱动程序详解。
2 读写时序阐明
MAX7129是SPI总线驱动方法。它不只要向寄存器写入操控字,还需求读取相应寄存器的数据。
要想与MAX7129通讯,首先要先了解MAX7129的操控字。MAX7129的操控字格局如图6。
图6 操控字(即地址及指令字节)
如图,作业时,MAX7219规则一次接纳16位数据,在接纳的16位数据中:D15~D12能够与操作无关,能够恣意写入,D11~D8决议所选通的内部寄存器地址,D7~D0为待显现数据或是初始化操控字。在CLK脉冲效果下,DIN的数据以串行方法顺次移入内部16位寄存器,然后在一个LOAD上升沿效果下,锁存到内部的寄存器中。注意在接纳时,先接纳最高位D16,最终是D0,因而,在程序发送时必须先送高位数据,在循环移位。作业时序图见图7。
因为51是8位单片机故需求分两次来送数据。具体操作见驱动程序详解。
图7 数据读写时序
3 电路原理图
电路原理图
电路原理图如图7,MAX7219与单片机的衔接只需求3条线:LOAD(CS)片选引脚、CLK串行时钟引脚、DIN串行数据引脚。其间C1 为电源滤波电容,R1用来设置段电流。 MAX7219的PCB布线有些难度,作者能够供给画好的PCB给读者。有需求的读者请与作者联络。邮箱:zhaoliang_0801@dl.cn
图8 电路原理图
4 驱动程序
//管脚界说
sbit LOAD=P1^2; //MAX7219片选 12脚
sbit DIN=P1^1; //MAX7219串行数据 1脚
sbit CLK=P1^0; //MAX7219串行时钟 13脚
//寄存器宏界说
#define DECODE_MODE 0x09 //译码操控寄存器
#define INTENSITY 0x0A //亮度操控寄存器
#define SCAN_LIMIT 0x0B //扫描边界寄存器
#define SHUT_DOWN 0x0C //关断形式寄存器
#define DISPLAY_TEST 0x0F //测验操控寄存器
//函数声明
void Write7219(unsigned char address,unsigned char dat);
void Initial(void);
//地址、数据发送子程序
void Write7219(unsigned char address,unsigned char dat)
{
unsigned char i;
LOAD=0; //拉低片选线,选中器材
//发送地址
for (i=0;i<8;i++) //移位循环8次
{
CLK=0; //清零时钟总线
DIN=(bit)(address&0x80); //每次取高字节
address<<=1; //左移一位
CLK=1; //时钟上升沿,发送地址
}
//发送数据
for (i=0;i<8;i++)
{
CLK=0;
DIN=(bit)(dat&0x80);
dat<<=1;
CLK=1; //时钟上升沿,发送数据
}
LOAD=1; //发送完毕,上升沿锁存数据
}
//MAX7219初始化,设置MAX7219内部的操控寄存器
void Initial(void)
{
Write7219(SHUT_DOWN,0x01); //敞开正常作业形式(0xX1)
Write7219(DISPLAY_TEST,0x00); //挑选作业形式(0xX0)
Write7219(DECODE_MODE,0xff); //选用全译码形式
Write7219(SCAN_LIMIT,0x07); //8只LED全用
Write7219(INTENSITY,0x04); //设置初始亮度
}
测验程序
void main(void)
{
unsigned char i;
Initial(); //MAX7219初始化
while(1)
{
for(i=1;i<9;i++)
{
Write7219(i,i); //数码管显现1~8
}
}
}
典型使用电路: