MAX7219的硬件连接比较大略,除用于驱动LED的16个引脚外,ISET引脚可以设置LED的驱动电流值(由于MAX7219是恒流驱动形式)。也便是说,你只须要额外添加一个外围电阻即可使MAX7219正常事情,《显示器件》给出的电路类似如下图所示。须要特殊把稳的是,MAX7219只能驱动共阴(common-cathode)类型的数码管。
那怎么样才能让MAX7219驱动数码管显示想要的数据呢?险些所有LED驱动芯片是相似的,我们肯定须要往芯片的某个存储区域写入一些数据。首先我们来明确单片机是如何掌握MAX7219的,它是由时钟(CLK)、数据(DIN)、载入(LOAD)这3个引脚完成的串行通信来实现,每次传输16位数据(高位先行),相应的格式如下图所示。
可以看到,给MAX7219发送的16位数据中,低8位是详细的数据(DATA),而高8位为相应的地址(ADDRESS,仅低4位有效),以是其有效的寄存器最多只有16个(8位寄存器),以是我们接下来须要明确这16个寄存器各自的功能是什么。

MAX7219内部存在14个寄存器(2个地址无效),总体来说可以分为数据寄存器与掌握寄存器,前者决定LED数码管可以显示的内容(大略地说,你往里面写什么,LED数码管就会显示什么),后者则决定LED如何显示内容,详细如下图所示。
Digit0~~Digit7(地址为0x1~0x8,写成0xX1~0xX8是由于仅低4位有效)这8个寄存器分别对应多位数码管的每一位数字,在上面的仿真电路图中,Digit0对应最左侧位,Digit1对应左侧第二位,其它依此类推,下面为显示数字0~7的仿真效果。
现在的问题是:怎么样才能显示出这样的效果呢?往数据寄存器中写入BCD码还是字型码(代表每个段亮灭的数据)呢?这取决于译码模式(Decode Mode)寄存器,它的每一位(共8位)可以掌握相应数据寄存器的译码模式,详细如下表所示。
例如,当设置译码模式寄存器的D0位为1时,表示Digit0数据寄存器中的数据会经由译码后驱动LED数码管(而不是直接输出),这样如果你须要最左侧显示“0”,则只须要往Digit0数据寄存器中写入0的BCD码即可(也便是0),详细的译码表如下所示。
如果你选择不译码,数据寄存器中的数据会直接输出以驱动LED数码管的每个段,那么同样显示数字“0”就得往相应的数据寄存器中写入0b1111110(0x7E)。也便是说,译码模式对付LED数码管非常方便,但是只能显示约定好的某些特定字符,对付须要驱动LED点阵模块的场合,常日还是会选择不译码。
当然,上面这个译码表成立的条件条件是,你必须按照预定义的连接办法将MAX7219与LED数码管连接,MAX7219约定的段与数据位的对应关系如下图所示,前面的仿真电路图也屈服此约定,这样可以避免将大略的问题繁芜化。
须要把稳的是,当你利用译码模式时,数据寄存器仅利用到了低4位,而最高位对应小数点掌握位(1为亮,0为灭),下图是已经往Digit3与Digit4数据寄存器的最高位写入的1后的显示效果。
MAX7219还可以掌握扫描的数码管位数,这是由扫描限定(Scan-Limit)寄存器完成的。与译码模式掌握寄存器有限不同的是,你须要往个中输入限定位数的BCD码(而并非每一位数据寄存器对应掌握扫描与否,这也就意味着,扫描位数只能是连续的,你不能异想天开地只企图扫描第1、3、5位)。例如,当你往个中写入0时,表示仅扫描第0位对应的数码管(其它数码管不会亮,即便你已经往个中写入了数据),当你往个中写入4时,则表示第0、1、2、3、4位都会扫描,而5、6、7位不扫描(不会亮),相应的表格如图所示:
下图是限定扫描位数为4的显示效果。
当然,想要让MAX7219正常显示,显示测试(Display Test)与关闭(Shutdown)寄存器也必须得进行合理设置。显示测试寄存器紧张用于测试,当其最低位为1时,表示进入测试模式,此时所有数码管都会亮起来(即显示8.8.8.8.8.8.8.8.),这样你就可以判断芯片驱动是否正常,数码管是否存在无法点亮的段等情形。在正常事情(Normal Operation)时,该当将其最低位置0,如下表所示:
关闭寄存器可以掌握是否输出。在关闭模式下,MAX7219内部时钟源处于挂起状态,所有段驱动引脚(Seg A,B,C,…)都下拉到地,所有位选通引脚(DIG0~7)都上拉到电源,此时所有数码管都不会显示,详细如下表所示。
下图为限定低4位扫描时依次发送的数据。首先发送“F00”表示往显示测试寄存器(地址为0xF)中写入0,将最低位清零也就进入了正常事情模式。然后往译码模式寄存器(地址为0x9)中写入“9FF”,表示进行全8位译码,由于我们驱动的是LED数码管。接下来的“B03”表示限定扫描位数为0、1、2、3,以是最右侧4位是不会显示的。
“A0F”通过往亮度(Intensity)寄存器中写入数据以达到掌握LED显示亮度的目的,实质上是通过掌握PWM来实现的,受限于篇幅不再谈论,由于即便你不往个中写入数据,MAX7219也存在一个默认的亮度,有兴趣的读者可参考《显示器件》一书。
紧接着往关闭寄存器(地址为0xC)中发送“C01”,将最低位置1即可进入正常事情模式,此后,数据寄存器中的数据将会被显示出来。当然,到目前为止,我们还没有往数据寄存器中写入任何内容,本例中依次往地址0x1~0x8中写入0~7的BDC码即可,值得一提的是,Digit3与Digit4数据寄存器的最高位被置1,表示显示小数点,但由于前面已经限定了扫描位数,以是你只看得到一个小数点。