查看: 1612|回复: 0
打印 上一主题 下一主题

串行输入输出共阴极显示驱动器MAX7219应用

[复制链接]
跳转到指定楼层
沙发
发表于 2015-4-15 13:08:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MAX7219PROTEUS仿真
    MAX7219是美国MAXIM(美信)公司生产的串行输入/输出共阴极显示驱动器。它采用了3线串行接口,传送速率达10M数据,能驱动8位七段数字型LED或条形显示器或64只独立的LED。MAX7219内置BCD码译码器、多路扫描电路、段和数字驱动器和存储每一位的8*8静态RAM。能方便的用模拟或数字方法控制段电流的大小,改变显示器的数量;能进入低功耗的关断模式(仅消耗150uA电流,数据保留);能方便地进行级联。可广泛用于条形图显示、七段显示、工业控制、仪器仪表面板等领域。而且其最重要的一点是,每个显示位都能个别寻址和刷新,而不需要重写其他的显示位,这使得软件编程十分简单且灵活。MAX719后缀表示其封装方式和工作温度,如表所示:
  
后缀
  
封装
工作温度
CNG
窄24脚
0----70℃
CWG
SO24脚
0----70℃
ENG
窄24脚
-40---85℃
EWG
SO24脚
-40---85℃
. MAX7219的结构和功能
MAX7219的引脚排列如图所示,各引脚功能叙述如下:
(1)脚:DIN,串行数据输入。在CLK的上升沿到来时,数据被移入到内部的16位移位寄存器中。
(2)、(3)、(5)~(8)、(10)、(11)脚:DIG0—DIG7,输入。8位数字位位选线,从共阴极显示器吸收电流。
(4)、(9)脚:GND,地。两个引脚必须连接在一起。
(12)脚:LOAD,数据装载输入端。在LOAD上升沿,移位寄存器接受的数据被锁存。
(13)脚:CLK,时钟输入端,最高时钟频率10MHz。在CLK的上升沿,数据被移入到内部的16位移位寄存器中。在CLK的下降沿,数据从DOUT脚输出。
(14)~(15)、(20)~(23)脚:输出。七段驱动器和小数点驱动器。它供给显示器电流。
(18)脚:ISET,电流调节端。通过一个电阻和VCC相连,来调节最大段电流。
(19)脚:VCC。电源输入端。
(24)脚:DOUT。串行数据输出。输入到DIN的数据在16.5各时钟周期后,在DOUT端有效。该脚常用于几个MAX7219的级联。
MAX7219采用串行寻址方式,在传送的串行数据中包含内部RAM的地址。加在DIN脚上的串行数据,必须在LOAD信号为高电平的前提下,以每个字节为一个数据包,在CLK信号上升沿移入16位的移位寄存器。然后在LOAD信号的上升沿锁存进数字或控制寄存器中。LOAD信号必须在第16个CLK信号上升沿的同时,或在下一个CLK信号上升沿之前升高,否则,数据会丢失。DIN脚上的串行数据在16.5个CLK信号后出现在DOUT脚上,以便级联应用时传到下一个MAX7219上。
其数据串行传送时序图如下图所示:
发送的16位串行数据格式为:
  
D15
  
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
X
X
X
X
地址
高         数据               低
发送的16位串行数据格式如上表所示:D15在先,D15---D12位(4位)可为任意值。D11---D8位(4位)指定14个内部寄存器的地址。D7---D0位(8位)为送入的指定寄存器的数据(包括显示数据和控制数据)。
3.寄存器功能及说明
MAX7219内部共有14个可寻址的数字、控制寄存器和空操作寄存器。数字寄存器由一个片内8×8静态RAM组成。控制寄存器包括译码方式、亮度控制、扫描数量、停机模式、测试模式等寄存器组成,如下表所示:
  
寄存器名称
  
十六进制数地址
寄存器名称
十六进制数地址
空操作
00H
DIG6
07H
DIG0
01H
DIG7
08H
DIG1
02H
译码控制
09H
DIG2
03H
亮度控制
0AH
DIG3
04H
扫描控制
0BH
DIG4
05H
停机控制
0CH
DIG5
06H
显示测试控制
0FH
下面从使用的角度,对MAX7219内部控制器的功能加以说明:
(1)译码控制寄存器(地址09H):译码方式寄存器可以对每个数进行设置,使其为BCD译码方式或不译码方式。寄存器的每一位和一个数位相对应。为“1”时,选择BCD译码方式,为“0”选择不译码方式。例如,0---7位不译码,则给译码寄存器09H送00H。第一位译码,其余位不译码,则给译码寄存器09H送01H。
译码方式控制寄存器举例(地址09H):
  
  
寄存器数据
16进制代码(HEX)
D7
D6
D5
D4
D3
D2
D1
D0
第1-8位LED不译码
0
0
0
0
0
0
0
0
00
第1位译码,其余不
0
0
0
0
0
0
0
1
01
低四位译码,高不
0
0
0
0
1
1
1
1
0F
第1-8位LED译码
1
1
1
1
1
1
1
1
FF
* 当采用BCD译码方式时,译码器仅对寄存器中数据的低四位(D3-D0)有效,高四位(D7-D4)位无效。BCD码的字形为:当数据为00-09H时,显示为0-9;当数据为0AH-0EH时,显示为-,E,H,L,P。当数据为0FH时,数据被消隐,处于不显示状态。
代码BCD字形表:
  
显示字符
  
寄存器数据
段码点亮=1
D7
D6
D5
D4
D3
D2
D1
D0
DP
A
B
C
D
E
F
G
0
×
×
×
0
0
0
0
1
1
1
1
1
1
0
1
×
×
×
0
0
0
1
0
1
1
0
0
0
0
2
×
×
×
0
0
1
0
1
1
0
1
1
0
1
3
×
×
×
0
0
1
1
1
1
1
1
0
0
1
4
×
×
×
0
1
0
0
0
1
1
0
0
1
1
5
×
×
×
0
1
0
1
1
0
1
1
0
1
1
6
×
×
×
0
1
1
0
1
0
1
1
1
1
1
7
×
×
×
0
1
1
1
1
1
1
0
0
0
0
8
×
×
×
1
0
0
0
1
1
1
1
1
1
1
9
×
×
×
1
0
0
1
1
1
1
1
0
1
1
-
×
×
×
1
0
1
0
0
0
0
0
0
0
1
E
×
×
×
1
0
1
1
1
0
0
1
1
1
1
H
×
×
×
1
1
0
0
0
1
1
0
1
1
1
L
×
×
×
1
1
0
1
0
0
0
1
1
1
0
P
×
×
×
1
1
1
0
1
1
0
0
1
1
1
×
×
×
1
1
1
1
0
0
0
0
0
0
0
小数点由D7设置,D7=1亮,D7=0不亮。
* 当采用不译码方式时,数据位D7-D0和字段的对应关系如图3所示:
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg

需要说明的是:不管对MAX7219设置的是译码方式还是非译码方式,D7位始终和数码位的小数点DP相连,当D7=1时,小数点亮,当D7=0时,小数点灭。
(2)亮度控制寄存器(地址0AH):MAX7219的亮度控制有两种方式:即模拟法和数字法。
* 模拟法:在引脚ISET和VCC之间接电阻RSET,各段驱动峰电流约为RSET中电流(Iset)的100倍,RSET的最小阻值为9.53KΩ,这时数码显示处于最亮状态。RSET可用电位器代替,放到面板上用来调节数码显示的亮度。
* 数字法:将数据写入到亮度控制寄存器中,即可按16各等级控制亮度。数值为00H,对应电流1/32Iset(最暗);数值为0FH,对应电流31/32Iset(最亮)。此数值加1,电流增大1/16。
亮度寄存器格式(地址0AH)
  
占空比
  
寄存器数据
16进制代码(HEX)
D7
D6
D5
D4
D3
D2
D1
D0
1/32
×
×
×
×
0
0
0
0
×0
3/32
×
×
×
×
0
0
0
1
×1
5/32
×
×
×
×
0
0
1
0
×2
7/32
×
×
×
×
0
0
1
1
×3
9/32
×
×
×
×
0
1
0
0
×4
11/32
×
×
×
×
0
1
0
1
×5
13/32
×
×
×
×
0
1
1
0
×6
15/32
×
×
×
×
0
1
1
1
×7
17/32
×
×
×
×
1
0
0
0
×8
19/32
×
×
×
×
1
0
0
1
×9
21/32
×
×
×
×
1
0
1
0
×A
23/32
×
×
×
×
1
0
1
1
×B
25/32
×
×
×
×
1
1
0
0
×C
27/32
×
×
×
×
1
1
0
1
×D
29/32
×
×
×
×
1
1
1
0
×E
31/32
×
×
×
×
1
1
1
1
×F
(3)扫描位数(界限)寄存器(地址0BH):扫描(界限)寄存器用来设定多少个数位处于显示态,范围为1到8。MAX7219的各个数位按1300Hz的扫描频率分路驱动,轮流点亮8各显示器。若需要显示的数位少,可降低扫描数量,以提高扫速和亮度。该寄存器的低3位指定要扫描的数位,即00-07H分别对应1-8个数位。但此值最好不要小于4,否则需要改变RSET的值。
扫描位数寄存器(地址0BH)的格式:
  
  
寄存器数据
16进制代码(HEX)
D7
D6
D5
D4
D3
D2
D1
D0
显示位1
×
×
×
×
×
0
0
0
×0
显示位1,2
×
×
×
×
×
0
0
1
×1
显示位1,2,3
×
×
×
×
×
0
1
0
×2
显示位1,2,3,4
×
×
×
×
×
0
1
1
×3
显示位1,2,3,4,5
×
×
×
×
×
1
0
0
×4
显示位1,2,3,4,5,6
×
×
×
×
×
1
0
1
×5
显示位1,2,3,4,5,6,7
×
×
×
×
×
1
1
0
×6
显示位1,2,3,4,5,6,7,8
×
×
×
×
×
1
1
1
×7
(4)停机控制寄存器(地址0CH):关断寄存器的D0位控制MAX7219处于怎样的显示状态。当D0=0时,MAX7219处于关断状态,当D0=1时,MAX7219处于正常显示状态。当处于关断状态时,扫描振荡器暂停,显示器熄灭,各寄存器中的数据不变,这时总电流小于150uA,,但仍可以编程。进入此状态后,至少250uS才能退出。当将D0位置1后(即0CH写01H),即可回到正常显示状态。
(5)显示测试寄存器(地址0FH):显示测试寄存器有两种工作方式:当送01H时,MAX7219便进入测试工作状态,所有数码管显示8及小数点,电流占空比为31/32,内部的所有数据及控制寄存器的值都不改变。当送00H时,MAX7219进入正常工作方式。
(6)空操作寄存器(地址00H):即写入0000H,可允许数据通过而不对当前的MAX7219产生影响,可用于两个或多个MAX7219进行级连。这样只要三根信号线就可以驱动,在控制时只要把待编程的MAX7219之前的那些MAX7219设置为空操作即可。
4.典型应用电路
MAX7219PROTUES仿真电路
据说PROTEUS里的MAX7219模型在级连时仿真有问题,时序和实际电路的不同。
MAX7219PROTUES仿真源程序
/* 显示12345678*/
#include <reg52.h>
#include <stdio.h>
#define uchar unsigned char
sbit DIN=P3^1;
sbit CLK=P3^3;
sbit LOAD=P3^2;
void send(uchar add,uchar dat)
{
    uchar ADS,i,j;
    CLK=0;
    LOAD=0;
    DIN=0;
    i=4;
    while(i<16)
    {
        if(i<8)
        {
           ADS=add;
       }
      else
        {
           ADS=dat;
       }
      for(j=8;j>=1;j--)
        {
           if((ADS&0x80)==0)
           {   DIN=0 ;}
           else
           {   DIN=1;}
            ADS=ADS<<1;
      
       CLK=1;
       CLK=0;
         }
      i=i+8;
   }
   LOAD=1;
}
void main(void)
{
  send(0x0c,0x01);//正常状态
  send(0x0b,0x07);//设置扫描范围DIG0-7
    send(0x0a,0x05);//设置亮度11/32
  send(0x09,0xff);//采用译码方式
   while(1)
   {
   send(0x01,0x81);
   send(0x02,0x82);
   send(0x03,0x83);
  send(0x04,0x84);
  send(0x05,0x85);
  send(0x06,0x86);
  send(0x07,0x87);
  send(0x08,0x88);
  }

}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入中科因仑

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表