最近从TB买了一大堆各种各样的模块来玩,其中就有用MAX7219芯片来设计的8X8点阵模块,于是去查找了这个芯片的资料,现将学习笔记留下。 |
概述
MAX7219 是美国 MAXIM 公司推出的多位LED显示驱动器,是一种集成化的 串行 输入/输出 共阴极 显示驱动器,采用3线串行接口传送数据,可直接与单片机接口连接,用户能方便修改其内部参数,以实现多位LED显示。它内含硬件动态扫描电路、BCD译码器、段驱动器和位驱动器。此外,其内部还含有8X8 位静态RAM,用于存放8 个数字的显示数据。
MAX7219简介
MAX7219与MCU相连的引线有三条:DIN、CLK、LOAD/CS,采用16位数据串行移位接收方式。在 CLK 的每个上升沿将一位数据移入 MAX7219 内部的移位寄存器,在每个下降沿将数据从 DOUT 端输出。当16位数据全部移入完毕,在 LOAD 引脚信号上升沿将16位数据装入 MAX7219 内相应位置,在 MAX7219 内部动态扫描显示控制电路的作用下实现动态显示。
MAX7221 同 MAX7219 基本相同,可以视作 MAX7219 的升级版。相比MAX7219:
1.MAX7221的段驱动有回流限制可以减少EMI;
2.MAX7221与 SPI™、QSPI™、MICROWIRE™ 相兼容
即MAX7219抗EMI能力比较差, 相对而言用MAX7221比较可靠一点。
MAX7219引脚图
MAX7219为24引脚芯片
引脚功能说明
- V+:正电源
- GND:地
- CLK:移位脉冲输入端
- DIN:串行数据输入端
- DOUT:串行数据输出端
- LOAD:装载数据信号输入端
- DIG0~DIG7:LED位线
- SEGA~SEGP,SEGDp:段码输出端
- ISET:硬件方式亮度调节端
MAX7219内部结构图
数据格式:
16位串行数据以 高位在前 的方式输入到芯片内部。
D15~D12 无效位
D11~D8 地址位,确定要送入数据的寄存器的地址
D7~D0 数据位,是要送入MAX7219内寄存器的数据
对于MAX7219,串行数据在 DIN 输入16位数据包,无论 LOAD/CS 处于何种状态,在时钟的上升沿数据均移入到内部16位移位寄存器。
对于MAX7221,无论数据输入或输出 LOAD/CS 必须为低电平,之后数据在 LOAD/CS 的上升沿被载入内部寄存器。
L0AD/CS 端在第16个时钟的上升沿同时或之后,下个时钟上升沿之前变为高电平,否则数据将会丢失。在 DIN 端的数据传输到移位寄存器在16. 5个时钟周期之后出现在DOUT端,在时钟的下降沿数据将被输出。
硬件方式调节亮度:
MAX7219通过V+和ISET之间的外部电阻来控制亮度。(MAX7219的段驱动电流峰值一般是流入ISET端电流的100倍)这个电阻最小值为9.53KΩ,设定段电流峰值为40mA。
MAX7219 寄存器
由于地址高四位无用所以默认为0H
译码方式
译码方式有BCD译码和不译码两种方式
8个LED的译码方式由 译码模式寄存器(09H) 8个位是高电平还是低电平决定
亮度设置
亮度有16档,由0AH低4位D3~D0的16个值来设置
MAX7219最低亮度是1/32,而MAX7221是1/16,但两者的档位间隔都是1/16
扫描界限
MAX7219 可以选择扫描的LED个数,由0BH低3位的D2~D0的8个值来设置
停机模式
当0CH的最低位 D0 为低电平时进入停机模式,扫描振荡器关闭,所有段电流源被拉到地,而所有的位驱动被拉到V+,显示器停止显示,但寄存器中的数据不变,且掉电模式下是可以编写驱动的。停机模式可以节省电源。
显示测试
当0FH的最低位 D0 为高电平时进入显示测试模式,所有LED以最大亮度(31/32)显示。停机模式下不影响进入显示测试模式,因此可以用停机模式和显示测试来制作闪烁效果。
应用电路示例
驱动代码示例(C51)
// MAX7219 数据写入
void Write7219(unsigned char addr, unsigned char Data)
{
unsigned char i; // 用于循环计数变的量
CS=0; // 拉低CS选中芯片
for(i=0; i<8; i++) // 传输地址
{
CLK=0; // 拉低时钟线
if(addr & 0x80) // 判断最高位是0或1
DIN=1;
else
DIN=0;
addr<<=1; // 移位
CLK=1; // 拉高时钟线,写入数据
}
for(i=0; i<8; i++) // 传输数据
{
CLK=0;
if(Data & 0x80)
DIN=1;
else
DIN=0;
Data<<=1;
CLK=1;
}
CS=1; // 数据锁入
}
// MAX7219 初始化
void Init7219()
{
Write7219(0X0C,0X01); // 工作模式选择 正常工作
Write7219(0X0F,0X00); // 测试模式开关 关闭测试模式
Write7219(0X09,0X00); // 解码模式选择 选择0-7无解码
Write7219(0X0B,0X07); // 扫描方式选择 扫描7个数码管
Write7219(0X0A,0X01); // 初始亮度设置 选择2档亮度
}
——2020.2.27 |
来源:CSDN
作者:DaveoCKII
链接:https://blog.csdn.net/qq_39829913/article/details/104540105