MAX7219与51单片机的驳接
扫描二维码
随时随地手机看文章
MAX7219是一种高集成化的串行输入/输出的共阴极LED显示驱动器。每片可驱动8位7段加小数点的共阴极数码管,可以数片级联,而与微处理器的连接只需3根线。MAX7219内部设有扫描电路,除了更新显示数据时从单片机接收数据外,平时独立工作,极大地节省了MCU有限的运行时间和程序资源。
MAX7219芯片上包括BCD译码器、多位扫描电路、段驱动器、位驱动器和用于存放每个数据位的8×8静态RAM以及数个工作寄存器。通过指令设置这些工作寄存器,可以使MAX7219进入不同的工作状态。
1 管脚说明
图1是MAX7219的管脚分布图。其中:
(1)DIN 为串行数据输入端。当CLK为上升沿时,数据被载入16 b内部移位寄存器。
(2)CLK 为串行时钟输入端。其最大工作频率可达10 MHz。
(3)LOAD 为片选端,当LOAD为低电平时,芯片接收来自DIN的数据,接收完毕,LOAD回到高电平时,接收的数据将被锁定。
(4)DIG0~DIG7 为吸收显示器共阴极电流的位驱动线。其最大值可达500 mA,关闭状态时,输出+VCC。
(5)SEGA~SEGG,DP 为驱动显示器7段及小数点的输出电流,一般为40 mA左右,可软件调整,关闭状态时,接入GND。
(6)DOUT 为串行数据输出端,通常直接接入下一片MAX7219的DIN端。
2 操作指令
MAX7219有5个工作状态寄存器,分别是译码方式选择、亮度调节、扫描位数设定、待机开关、显示器检测。除空指令外,7219的所有操作指令都是2个字节,前一个是操作代码,后一个是操作数。下面用十六进制数对控制命令加以说明。
2.1 译码方式选择
操作代码为“09H”,操作数为“0”或“0FFH”。选中“0”则不使用BCD译码器,在显示数字或符号时,按每段点亮与否编排传送码。而选中 “0FFH”时,则按8421标准二进制编码来代表相应的显示数字,如表1所示。需要说明的是,无论译码与否,表1中操作数的最高位D7均为小数点,“1”为亮,“0”为灭,所以表1中所列是小数点不亮时的操作数。
2.2 亮度调节
操作代码为“0AH”,操作数如表2所示。
这个指令可以用来调节显示器的亮度,改变其操作数可以改变MAX7219内部扫描脉冲的宽度,从而使电流的平均值有所变化,这个电流平均值可以从最小的1/32至最大的31/32之间进行16级调节。
MAX7219还提供了一种硬件调整显示器亮度的方式,即通过第18管脚的ISET和+VCC之间跨接的一个电阻来调节其亮度,段驱动平均电流大约为流过此电阻电流的100倍,实际应用中常用十几kΩ的电阻直接接入即可。
2.3 扫描位数设定
操作代码为“0BH”,操作数如表3所示。
如果所用的显示器少于8位,则应通过这条指令设置相应的位数。因为设置的位数如果比实际使用的位数大,就会形成“虚位”,而一旦对“虚位”进行操作,将会引起整个显示器的混乱,这是需要加以注意的。
另外,扫描位数的设置,会影响到扫描频率的变化,相应地,显示器亮度也会随着变化,所以应先确定扫描位数,再设置显示器亮度。
2.4 待机开关
操作代码为“0CH”,操作数为“0”或“1”。
操作数为“0”,则显示器不工作(灭灯),反之,显示器正常工作。待机状态下,7219的工作电流仅为150μA。
2.5 显示器检测
操作代码为“0FH”,操作数为“0”或“1”。
选择操作数为“1”时,可点亮整个显示器,通常用来检查数码管及连接电路是否存在故障。检测时,不会改变各位原有的显示数据,即检测完毕后,再送入不检测指令“0”,又可恢复显示原数据。
2.6 位操作指令
位操作指令就是对8个数码管显示内容的操作,也是2个字节,第1个字节是位的代码,如表4所示,第2个字节则根据译码方式的选择,来使用表1中的编码。
需要说明的是,上述所有指令的输入,不分先后(但每个指令2个字节的秩序不能颠倒)。通常,前5条指令一般在上电初始化程序中加以设置,而在工作程序中,仅使用位操作指令即可。另外,MAX7219上电时,译码方式、亮度调节、扫描位数、待机开关、显示检测等5 个控制寄存器全部归零。
3 与单片机的连接
3.1 与单片机任意3个端口连接的方式
假定按图3所示方法连接。
MAX7219每次接收2个字节,高位在先,其指令可编写为:
3.2 用单片机的串行接口
如果将MAX7219的DIN接入单片机的RXD,CLK接入TXD,LOAD选任一口线,则可通过单片机串行口对MAX7219像对其他设备一样按模式0进行发送操作。但由于串行口数据缓冲寄存器SBUF为右移发送,所以MAX7219的所有命令和操作数与第一种方式相比均应反转,见表5~9。注意表 6中操作数的最低位D0为小数点。
4 MAX7219的多片级联
MAX7219可以多片级联,只需将上一片的DOUT连接下一片的DIN即可,CLK和LOAD线全部公用,连在一起。
在多片级联时,对MAX7219的操作指令要注意LOAD信号的起止点,操作开始时,LOAD下降为低电平,按照每片MAX7219两个字节,如果有N片,则
发送2N个字节后,LOAD上升为高电平。还需注意的是,先发送的指令将到达级联的最后一片。
还有一条专为MAX7219多片级联设置的一条空操作指令,操作代码为“00H”。当不希望对级联中的某片或某几片MAX7219进行操作时,就可以用空操作指令跳过这片或这几片。例如,如果4个7219串联,为了写入第4个芯片,要在3个空操作指令码后发送2个字节的指令,当LOAD升为高电平时,数据被锁存到所有设备,前3个芯片收到的是空操作命令,而第4个收到预期的数据。
参考文献
[1] Serially Interfaced.8 - Digit LED display drivers.