我最近从TB买了很多各种各样的模块玩。 其中有用MAX7219芯片设计的8X8点模块。 于是去找这个芯片的资料,留下学习笔记。 目录概要MAX7219概要MAX7219插针图功能说明MAX7219内部结构MAX7219寄存器解码方式亮度设定扫描极限停止模式显示测试APP应用电路例自己制作的驱动程序(C51 ) () () ) () ) ) ) )
概要
MAX7219是美国MAXIM公司推出的多位LED显示驱动器,串行输入/输出共阴极显示驱动器,http://www.Sina.com 它可以直接与单片机传输数据,包括硬件动态扫描电路、BCD解码器、分段驱动器和位驱动器。 它还包含一个8X8位静态RAM,用于存储8个数字的显示数据。
MAX7219概述MAX7219的MCU引线为DIN、CLK、LOAD/CS根,采用16位数据的串行移位接收方式。 在CLK的每个上升沿将1位的数据移动到MAX7219内部的移位寄存器,在每个下降沿从DOUT侧输出数据。 16位数据的所有填充完成后,在LOAD端子信号的上升沿将16位数据加载到MAX7219内的相应位置,在MAX7219内部的动态扫描显示控制电路的作用下实现动态显示。
3358www.Sina.com/与MAX7219几乎相同,可视为MAX7219的3线。 与MAX7219相比:
1. MAX7221的分段驱动有回流限制可减少EMI;
2.http://与www.Sina.com/SPI、QSPI和MICROWIRE的兼容性
也就是说,MAX7219对EMI不敏感,所以MAX7221更可靠。
MAX7219针图MAX7219是24针芯片
端子功能说明v :正电源GND :接地CLK :移位脉冲输入端子DIN :串行数据输入端子DOUT :串行数据输出端子LOAD :负载数据信号输入端子DIG0~DIG7:LED位线SEGA~SEGP、SEGDp :
MAX7219内部结构
数据格式:
16位串行数据通过升级版输入到芯片内部。
D15~D12无效位
D11~D8 MAX7221位,决定发送数据的寄存器的地址
D7~D0 MAX7221位是导入MAX7219内寄存器的数据
在高位在前的情况下,串行数据向DIN输入16位分组,并且无论LOAD/CS处于什么状态,数据都会在时钟的上升沿移动到内部的16位移位寄存器中。
对于地址,无论数据输入和输出如何,LOAD/CS都必须处于低电平,然后数据在LOAD/CS的启动时加载到内部寄存器中。
L0AD/CS端子必须与第16个时钟的上升沿同时或之后,在下一个时钟的上升沿之前处于高电平。 否则,为数据。 DIN侧的数据传输到移位寄存器是在16. 5个时钟周期后出现在DOUT侧,并在时钟下降沿输出数据。
硬件亮度调整:
MAX7219通过v和ISET之间的外部电阻控制亮度。 (MAX7219的段驱动电流峰值一般是ISET引脚上电流的100倍)该电阻的最小值为9.53K,段电流峰值为40mA。
MAX7219寄存器由于浪费了地址的前4位,因此默认为0H
解码方式解码方式有MAX7219和MAX7221两种
8个LED解码方式由解码模式寄存器(09H )的8位是高电平还是低电平决定
3358 www.Sina.com/http://www.Sina.com /亮度设置
亮度有16个等级,由0AH低位4位数据将会丢失的16个值设定
MAX7219的最低亮度为1/32,MAX7221为1/16,但两者的移位间隔均为1/16
扫描极限MAX7219可以选择要扫描的LED的数量,其设置为0BH后3位BCD译码的8个值
停止模式0CH最低D0为低电平时进入停止模式,扫描振荡器截止,所有段的电流源被引向地,所有位驱动被引向v,显示器停止显示,但不译码
>,且掉电模式下是
可以编写驱动的。停机模式可以节省电源。 显示测试
当0FH的最低位 D0 为高电平时进入显示测试模式,所有LED以最大亮度(31/32)显示。停机模式下不影响进入显示测试模式,因此可以用停机模式和显示测试来制作闪烁效果。
应用电路示例
自己编写的驱动程序(C51) /********************************************************************************** * 程序名: MAX7219驱动程序 * 作者: DaveoCKII * 日期: 2020.2.27 * 版本: STC12C5A60S2 **********************************************************************************/ #ifndef _MAX7219_H_#define _MAX7219_H_#include <STC12C5A60S3.H>//--------------------------------------------------------------------------------//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个LEDWrite7219(0X0A,Luminance); // 初始亮度设置 0-15设置1-16档亮度}//--------------------------------------------------------------------------------//#endif
DaveoCKII
2020.2.27