MAX7219芯片 共阴LED驱动器 详细介绍

  最近从TB买了一大堆各种各样的模块来玩,其中就有用MAX7219芯片来设计的8X8点阵模块,于是去查找了这个芯片的资料,现将学习笔记留下。

目录

    • 概述
    • MAX7219简介
    • MAX7219引脚图
      • 引脚功能说明
    • MAX7219内部结构
    • MAX7219寄存器
      • 译码方式
      • 亮度设置
      • 扫描界限
      • 停机模式
      • 显示测试
    • 应用电路示例
    • 自己编写的驱动程序(C51)

概述

  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引脚芯片
MAX7219芯片 共阴LED驱动器 详细介绍_第1张图片
MAX7219芯片 共阴LED驱动器 详细介绍_第2张图片

引脚功能说明

  • V+:正电源
  • GND:地
  • CLK:移位脉冲输入端
  • DIN:串行数据输入端
  • DOUT:串行数据输出端
  • LOAD:装载数据信号输入端
  • DIG0~DIG7:LED位线
  • SEGA~SEGP,SEGDp:段码输出端
  • ISET:硬件方式亮度调节端

MAX7219内部结构

MAX7219芯片 共阴LED驱动器 详细介绍_第3张图片
数据格式:
  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
MAX7219芯片 共阴LED驱动器 详细介绍_第4张图片

译码方式

  译码方式有BCD译码不译码两种方式
  8个LED的译码方式由 译码模式寄存器(09H) 8个位是高电平还是低电平决定
MAX7219芯片 共阴LED驱动器 详细介绍_第5张图片

BCD译码表

MAX7219芯片 共阴LED驱动器 详细介绍_第6张图片
不译码方式

MAX7219芯片 共阴LED驱动器 详细介绍_第7张图片

亮度设置

  亮度有16档,由0AH低4位D3~D0的16个值来设置
  MAX7219最低亮度是1/32,而MAX7221是1/16,但两者的档位间隔都是1/16
MAX7219芯片 共阴LED驱动器 详细介绍_第8张图片

扫描界限

  MAX7219 可以选择扫描的LED个数,由0BH低3位的D2~D0的8个值来设置
MAX7219芯片 共阴LED驱动器 详细介绍_第9张图片

停机模式

  当0CH的最低位 D0 为低电平时进入停机模式,扫描振荡器关闭,所有段电流源被拉到地,而所有的位驱动被拉到V+,显示器停止显示,但寄存器中的数据不变,且掉电模式下是可以编写驱动的。停机模式可以节省电源。

显示测试

  当0FH的最低位 D0 为高电平时进入显示测试模式,所有LED以最大亮度(31/32)显示。停机模式下不影响进入显示测试模式,因此可以用停机模式和显示测试来制作闪烁效果。

应用电路示例

MAX7219芯片 共阴LED驱动器 详细介绍_第10张图片

自己编写的驱动程序(C51)

/**********************************************************************************
 * 程序名:    MAX7219驱动程序
 * 作者:      DaveoCKII
 * 日期:      2020.2.27
 * 版本:      STC12C5A60S2
 **********************************************************************************/
 
#ifndef _MAX7219_H_
#define _MAX7219_H_

#include 
//--------------------------------------------------------------------------------//
sbit DIN = P1^3;    // 数据线
sbit CS  = P1^2;    // 片选线
sbit CLK = P1^1;    // 时钟线
unsigned char LED_CC[16]={
     0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  // 共阴LED显示数据 '0~F'
unsigned char LED_CA[16]={
     0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};  // 共阳LED显示数据 '0~F'
//--------------------------------------------------------------------------------//

void Write7219(unsigned char addr, unsigned char Data);			// MAX7219数据写入函数

void Init7219(unsigned char work_state, unsigned char test_state, unsigned char decode_nums,	// MAX7219初始化设置
              unsigned char display_nums, unsigned char Luminance);		                        // 工作模式、测试模式、解码模式、扫描模式、亮度

//--------------------------------------------------------------------------------//
void Write7219(unsigned char addr, unsigned char dat) 
{
     
	unsigned char i;
	CS=0;		// 拉低CS选中芯片
	
	for(i=0; i<8; i++)      // 传输地址 
	{
     
		CLK=0;				// 拉低时钟线
		DIN=Data & 0x80;    // 数据格式:高位在前
		addr<<=1;			
		CLK=1;				// 拉高时钟线,写入数据
	}
	
	for(i=0; i<8; i++)      // 传输数据    
	{
     
		CLK=0;
        DIN=dat & 0x80;
		dat<<=1;
		CLK=1;	
	}
	
	CS=1;		// 数据锁入
}

void Init7219(unsigned char work_state, unsigned char test_state, unsigned char decode_nums,
              unsigned char display_nums, unsigned char Luminance)     
{
     
	Write7219(0X0C,work_state);	    // 工作模式选择   1:正常工作  0:掉电模式
	Write7219(0X0F,test_state);	    // 测试模式开关   1:测试模式  0:正常工作
	Write7219(0X09,decode_nums);	// 解码模式选择   8个位分别控制8个LED是否解码,'1'为BCD解码,'0'为不解码
	Write7219(0X0B,display_nums);	// 扫描方式选择   0-7 设置扫描1-8个LED
	Write7219(0X0A,Luminance);	    // 初始亮度设置   0-15设置1-16档亮度
}


//--------------------------------------------------------------------------------//


#endif


DaveoCKII
2020.2.27

你可能感兴趣的:(芯片学习,单片机,嵌入式)