MAX7219的PROTEUS仿真 MAX7219是美国MAXIM(美信)公司生产的串行输入/输出共阴极显示驱动器。它采用了3线串行接口,传送速率达10M数据,能驱动8位七段数字型LED或条形显示器或64只独立的LED。MAX7219内置BCD码译码器、多路扫描电路、段和数字驱动器和存储每一位的8*8静态RAM。能方便的用模拟或数字方法控制段电流的大小,改变显示器的数量;能进入低功耗的关断模式(仅消耗150uA电流,数据保留);能方便地进行级联。可广泛用于条形图显示、七段显示、工业控制、仪器仪表面板等领域。而且其最重要的一点是,每个显示位都能个别寻址和刷新,而不需要重写其他的显示位,这使得软件编程十分简单且灵活。MAX719后缀表示其封装方式和工作温度,如表所示: 一. 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位串行数据格式为: 发送的16位串行数据格式如上表所示:D15在先,D15---D12位(4位)可为任意值。D11---D8位(4位)指定14个内部寄存器的地址。D7---D0位(8位)为送入的指定寄存器的数据(包括显示数据和控制数据)。 3.寄存器功能及说明 MAX7219内部共有14个可寻址的数字、控制寄存器和空操作寄存器。数字寄存器由一个片内8×8静态RAM组成。控制寄存器包括译码方式、亮度控制、扫描数量、停机模式、测试模式等寄存器组成,如下表所示: 下面从使用的角度,对MAX7219内部控制器的功能加以说明: (1)译码控制寄存器(地址09H):译码方式寄存器可以对每个数进行设置,使其为BCD译码方式或不译码方式。寄存器的每一位和一个数位相对应。为“1”时,选择BCD译码方式,为“0”选择不译码方式。例如,0---7位不译码,则给译码寄存器09H送00H。第一位译码,其余位不译码,则给译码寄存器09H送01H。 译码方式控制寄存器举例(地址09H): * 当采用BCD译码方式时,译码器仅对寄存器中数据的低四位(D3-D0)有效,高四位(D7-D4)位无效。BCD码的字形为:当数据为00-09H时,显示为0-9;当数据为0AH-0EH时,显示为-,E,H,L,P。当数据为0FH时,数据被消隐,处于不显示状态。 代码BCD字形表: 小数点由D7设置,D7=1亮,D7=0不亮。 * 当采用不译码方式时,数据位D7-D0和字段的对应关系如图3所示: (2)亮度控制寄存器(地址0AH):MAX7219的亮度控制有两种方式:即模拟法和数字法。 * 模拟法:在引脚ISET和VCC之间接电阻RSET,各段驱动峰电流约为RSET中电流(Iset)的100倍,RSET的最小阻值为9.53KΩ,这时数码显示处于最亮状态。RSET可用电位器代替,放到面板上用来调节数码显示的亮度。 * 数字法:将数据写入到亮度控制寄存器中,即可按16各等级控制亮度。数值为00H,对应电流1/32Iset(最暗);数值为0FH,对应电流31/32Iset(最亮)。此数值加1,电流增大1/16。 亮度寄存器格式(地址0AH) (3)扫描位数(界限)寄存器(地址0BH):扫描(界限)寄存器用来设定多少个数位处于显示态,范围为1到8。MAX7219的各个数位按1300Hz的扫描频率分路驱动,轮流点亮8各显示器。若需要显示的数位少,可降低扫描数量,以提高扫速和亮度。该寄存器的低3位指定要扫描的数位,即00-07H分别对应1-8个数位。但此值最好不要小于4,否则需要改变RSET的值。 扫描位数寄存器(地址0BH)的格式: (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.典型应用电路 二 MAX7219的PROTUES仿真电路 据说PROTEUS里的MAX7219模型在级连时仿真有问题,时序和实际电路的不同。 三 MAX7219的PROTUES仿真源程序 /* 显示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); }
}
|