数码管显示芯片MAX7219
仿真在这篇blog里
1.max7219芯片
各引脚的功能为:
DIN:串行数据输入端
DOUT:串行数据输出端,用于级连扩展
LOAD:装载数据输入
CLK:串行时钟输入
DIG0~DIG7:8位LED位选线,从共阴极LED中吸入电流
SEG A~SEG G DP 7段驱动和小数点驱动
ISET: 通过一个10k电阻和Vcc相连,设置段电流
2.数据及时序
1.max7219通信方式为SPI,16bit 数据格式就是2字节 = 地址 + 数据 。先发高位,即先发地址再发数据。
16位数据包结构如下图:
2.对AX719串行数据以16位包的形式从DIN引脚串行输人,在CLK的每一个上升沿一位行地送入芯片内部16位移位寄存器,而不管LOAD脚的状态如何,LOAD脚必须在第16CK上升沿出现的同时或之后,并在下一个 CLK上升沿之前变为高电平,否则移入的数据将丢失。
3.寄存器及指令
下图就是寄存器表地址
5个控制寄存器分别为:译码方式,亮度设置,扫描范围(选择扫描位数),停机方式,显示测试
功能概述
解码模式(指令=X9+hex code)
是否支持BCD解码
亮度设置(指令=XA+hex code)
选择亮度
扫描限制(指令=XB+hex code)
选择使用几个数码管,数量小于等于三个时必须进行电流设置
掉电模式 (指令=XC+hex code)
选择是否掉电
显示测试 (指令=XF+hex code)
正常显示=0;显示测试=1;
4.初始化max7219
//寄存器宏定义#define DECODE_MODE 0x09 //译码控制寄存器#define INTENSITY 0x0A //亮度控制寄存器#define SCAN_LIMIT 0x0B //扫描界限寄存器#define SHUT_DOWN 0x0C //掉电模式寄存器#define DISPLAY_TEST 0x0F //显示控制寄存器 void Initial(void){Write7219(SHUT_DOWN,0x01); //开启正常工作模式(0xX1)Write7219(DISPLAY_TEST,0x00);//选择正常工作模式(0xX0)Write7219(DECODE_MODE,0xff); //选用全译码模式Write7219(SCAN_LIMIT,0x07); //8只LED全用Write7219(INTENSITY,0x04);//设置初始亮度9/32}