MAX7219芯片的学习使用

主宰稳场 提交于 2020-02-27 23:59:01
  最近从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个位是高电平还是低电平决定
译码方式译码表

BCD译码表

在这里插入图片描述
不译码方式

在这里插入图片描述

亮度设置

  亮度有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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!