2025年单片机常用芯片MAX7219(数码管驱动)

单片机常用芯片MAX7219(数码管驱动)博主福利 100G 电子设计资料合集 https dwz date fyQa MAX7219 是 MAXIM 公司生产的串行输入 输出共阴极数码管显示驱动芯片 一片 MAX7219 可驱动 8 个 7 段 包括小数点共 8 段 数字 LED LED 条线图形显示器 或 64 个分立的 LED 发光二级管

大家好,我是讯享网,很高兴认识大家。

博主福利:100G+电子设计资料合集icon-default.png?t=N7T8
讯享网https://dwz.date/fyQa

MAX7219是MAXIM公司生产的串行输入/输出共阴极数码管显示驱动芯片,一片MAX7219可驱动8个7段(包括小数点共8段)数字LED、LED条线图形显示器、或64个分立的LED发光二级管。该芯片具有10MHz传输率的三线串行接口可与任何微处理器相连,只需一个外接电阻即可设置所有LED的段电流。。它的操作很简单,MCU只需通过模拟SPI三线接口就可以将相关的指令写入MAX7219的内部指令和数据寄存器,同时它还允许用户选择多种译码方式和译码位。此外它还支持多片7219串联方式,这样MCU就可以通过3根线(即串行数据线、串行时钟线和芯片选通线)控制更多的数码管显示。MAX7219的外部引脚分配如图1所示及内部结构如图2所示。

图1   MAX7219的外部引脚分配

图2   MAX7219的内部引脚分配

各引脚的功能为:

DIN:串行数据输入端

DOUT:串行数据输出端,用于级连扩展

LOAD:装载数据输入

CLK:串行时钟输入

DIG0~DIG7:8位LED位选线,从共阴极LED中吸入电流

SEG A~SEG G DP     7段驱动和小数点驱动

ISET:  通过一个10k电阻和Vcc相连,设置段电流

MAX7219有下列几组寄存器:(如图3)

MAX7219内部的寄存器如图3,主要有:译码控制寄存器、亮度控制寄存器、扫描界限寄存器、关断模式寄存器、测试控制寄存器。编程时只有正确操作这些寄存器,MAX7219才可工作。

图 3   MAX7219内部的相关寄存器

分别介绍如下:

(1)        译码控制寄存器(X9H)

如图4所示,MAX7219有两种译码方式:B译码方式和不译码方式。当选择不译码时,8个数据为分别一一对应7个段和小数点位;B译码方式是BCD译码,直接送数据就可以显示。实际应用中可以按位设置选择B译码或是不译码方式。

图4   MAX7219的译码控制寄存器

(2)        扫描界限寄存器(XBH)

如图5所示,此寄存器用于设置显示的LED的个数(1~8),比如当设置为0xX4时,LED 0~5显示。

图5   MAX7219的扫描界限控制寄存器

(3)        亮度控制寄存器(XAH)

共有16级可选择,用于设置LED的显示亮度,从0xX0~0xXF

(4)        关断模式寄存器(XCH)

共有两种模式选择,一是关断状态,(最低位 D0=0)一是正常工作状态(D0=1)。

(5)        显示测试寄存器(XFH)

用于设置LED是测试状态还是正常工作状态,当测试状态时(最低位 D0=1)各位显示全亮,正常工作状态(D0=0)。

各寄存器具体操作见驱动程序详解。

2 读写时序说明

MAX7129是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。

       要想与MAX7129通信,首先要先了解MAX7129的控制字。MAX7129的控制字格式如图6。

图6   控制字(即地址及命令字节)

如图,工作时,MAX7219规定一次接收16位数据,在接收的16位数据中:D15~D12可以与操作无关,可以任意写入,D11~D8决定所选通的内部寄存器地址,D7~D0为待显示数据或是初始化控制字。在CLK脉冲作用下,DIN的数据以串行方式依次移入内部16位寄存器,然后在一个LOAD上升沿作用下,锁存到内部的寄存器中。注意在接收时,先接收最高位D16,最后是D0,因此,在程序发送时必须先送高位数据,在循环移位。工作时序图见图7。

由于51是8位单片机故需要分两次来送数据。具体操作见驱动程序详解。

图7  数据读写时序

3 电路原理图

电路原理图

电路原理图如图7,MAX7219与单片机的连接只需要3条线:LOAD(CS)片选引脚、CLK串行时钟引脚、DIN串行数据引脚。其中C1 为电源滤波电容,R1用来设置段电流。 MAX7219的PCB布线有些难度,作者可以提供画好的PCB给读者。有需要的读者请与作者联系。邮箱:

图8  电路原理图

4 驱动程序

//管脚定义 sbit LOAD=P1^2;          //MAX7219片选           12脚 sbit DIN=P1^1;           //MAX7219串行数据       1脚 sbit CLK=P1^0;           //MAX7219串行时钟        13脚 //寄存器宏定义 #define DECODE_MODE  0x09   //译码控制寄存器 #define INTENSITY    0x0A   //亮度控制寄存器 #define SCAN_LIMIT   0x0B   //扫描界限寄存器 #define SHUT_DOWN    0x0C   //关断模式寄存器 #define DISPLAY_TEST 0x0F   //测试控制寄存器         //函数声明 void Write7219(unsigned char address,unsigned char dat); void Initial(void); //地址、数据发送子程序 void Write7219(unsigned char address,unsigned char dat) {       unsigned char i;     LOAD=0;    //拉低片选线,选中器件     //发送地址     for (i=0;i<8;i++)        //移位循环8次                  {          CLK=0;        //清零时钟总线        DIN=(bit)(address&0x80); //每次取高字节             address<<=1;             //左移一位        CLK=1;        //时钟上升沿,发送地址     }     //发送数据     for (i=0;i<8;i++)                   {          CLK=0;        DIN=(bit)(dat&0x80);            dat<<=1;         CLK=1;        //时钟上升沿,发送数据     }     LOAD=1;    //发送结束,上升沿锁存数据                       } //MAX7219初始化,设置MAX7219内部的控制寄存器 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);          //设置初始亮度      }

讯享网

测试程序

讯享网void main(void) {     unsigned char i;     Initial();               //MAX7219初始化     while(1)     {         for(i=1;i<9;i++)        {            Write7219(i,i);      //数码管显示1~8        }     } }

典型应用电路:

小讯
上一篇 2025-03-02 16:27
下一篇 2025-03-09 17:28

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/28309.html