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给读者。有需要的读者请与作者联系。邮箱:zhaoliang_0801@dl.cn
图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
}
}
}
典型应用电路:
上一篇:STM8S MAX7219点阵模块驱动芯片程序
下一篇:MAX7219点阵模块 Arduino
推荐阅读
史海拾趣
随着全球对环保和可持续发展的重视,ELNA也开始关注绿色制造和环保产品。公司积极采用环保材料和清洁能源,减少生产过程中的污染和排放。同时,ELNA还加强了对废旧产品的回收和再利用,推动循环经济的发展。
Analog Power公司成立于XXXX年,创立初期主要专注于电源管理解决方案的研发。面对当时竞争激烈的市场环境,公司创始人凭借对电源管理技术的深刻理解和坚定信念,带领团队克服了种种困难,逐步在市场中找到了自己的定位。他们深入研究客户需求,不断优化产品设计,逐渐赢得了客户的信任和认可。
在电子行业的初创期,Avasem公司以其独特的技术创新而崭露头角。创始人团队在半导体材料领域拥有深厚的研究背景,他们成功研发出了一种新型的、性能卓越的芯片材料。这一突破不仅大幅提升了电子设备的运算速度和能效,还降低了生产成本。随着市场对该材料的需求日益增长,Avasem公司迅速获得了风险投资的青睐,并通过与各大电子制造商的合作,将产品推向全球市场。公司因此实现了快速扩张,并在行业中建立了良好的口碑。
在国内市场取得一定成功后,Avasem公司开始实施国际化战略,以进一步拓展全球市场份额。公司首先在欧洲和北美等成熟市场设立了研发中心和销售网点,以便更好地了解当地市场需求和消费者偏好。随后,Avasem公司通过与当地合作伙伴建立战略联盟,共同推广其产品和技术。这一战略不仅提升了公司在全球市场的知名度,还为其带来了可观的收益增长。
Bomar公司成立于1963年,最初是一家专注于石英晶体制造的公司。在当时的电子行业,石英晶体作为频率控制元件,对于无线通信和电子设备的稳定运行至关重要。Bomar公司通过不断的研发和技术创新,成功突破了石英晶振在宽频率范围内的高稳定性问题,满足了严格的FCC规范。这一技术突破使得Bomar公司的石英晶振在市场上获得了广泛的认可,并为公司的发展奠定了坚实的基础。
EMC Technology RF Labs成立于XXXX年,作为EMC Technology公司的一个专门研究射频(RF)技术的实验室。创立之初,RF Labs的目标是为电子通信行业提供高质量的射频元件和解决方案。公司聚集了一批在射频技术领域具有丰富经验和专业知识的工程师,开始了对射频技术的深入研究和探索。
Vcc=5V, VoH(min)=3.4V, VoL(max)=0.2V, ViH(min)=2.0V, ViL(max)=0.8V, IiH=0.04ma 问后面的非门要能正确识别前一级送出的信号,R的值最大取多少… 查看全部问答∨ |
标致 Peugeot 法国标致公司在1812年创办于蒙特伯里亚德(Montbeliard),得名于家族祖先让·贾克斯·标致(Jean-Jaques Peugeot,1699~1741)。让·皮埃尔(Jean-Pierre)和让·弗雷德里克(Jean-Frederic)兄弟俩把他们的 ...… 查看全部问答∨ |
1.在用protel99绘制三极管(或其它分立元件)符号时,需不需要加上含电气热点的PIN脚啊?还是只要画好原理图符号就可以了呢(直接可以调用的了)? 2.采用SMD表贴元件时,是不是只要在SCH编辑器中将元件的封装设定为贴片类型(如0603,0402)即可?生成PCB ...… 查看全部问答∨ |
QT:multiple definition of错误???????? 源码:tem.h中定义Tem类 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/ioctl.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/select.h ...… 查看全部问答∨ |
TIM时钟选择: ● 1> 内部时钟CK_INT ● 2> 外部时钟模式1:外部输入脚(Tix) ● 3> 外部时钟模式2:外部触发输入(ETR) ● 4> ...… 查看全部问答∨ |
手头上一个项目用STM8S103K3T6,程序调完了,无聊的时候用手摸摸芯片的IO口,发现凡是输入口,摸多几次芯片必复位(最惨 ...… 查看全部问答∨ |
TI的文档通过设置 P1DIR 来改变SCL 和SDA的高低, 为何不把P1设为输出,再通过改变P1OUT来给SCL,SDA 置0 或 1 呢??… 查看全部问答∨ |