max7219驱动数码管程序(51单片机+STM32 MAX7219数码管程序案例)

合集下载

max7219资料及电路图

max7219资料及电路图

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显示。

点阵屏驱动程序(MAX7219)

点阵屏驱动程序(MAX7219)
Write_Max7219_byte(0);
Write_Max7219_byte(0);
Write_Max7219_byte(0);
Max7219_pinCS=1;
Write_Max7219(0,0); //清除缓冲区数据,消除显示误差
}
}
void Display_4(uchar dat)
{
uchar i;
{0x00,0x70,0x88,0x80,0x80,0x80,0x88,0x70},//C16
};
//--------------------------------------------
//功能:向MAX7219(U3)写入字节
//入口参数:DATA
//出口参数:无
//说明:
void Write_Max7219_byte(uchar DATA)
Write_Max7219_byte(0);
Write_Max7219_byte(0);
Write_Max7219_byte(0);
Write_Max7219_byte(0);
Write_Max7219_byte(0);
Max7219_pinCS=1;
Write_Max7219(0,0); //清除缓冲区数据,消除显示误差
Write_Max7219(7,0);//清除缓冲区数据,消除显示误差
Write_Max7219(8,0);//清除缓冲区数据,消除显示误差
}
/***************************************************/
void Display_1(uchar dat)
{
Write_Max7219_byte(0);

MAX7219单片以及级联驱动程序

MAX7219单片以及级联驱动程序

MAX7219单片以及级联驱动程序2011-03-20 09:40说明一下:这个word版式是从百度上下载的,在原版中,作者只是写了驱动一片MAX7219的程序。

本人作为菜鸟,第一次使用MAX7219就用了两片级联来驱动15个数码管,按照原版程序驱动一片MAX7219是没有问题的,但是,驱动两片MAX7219就不行了。

自己先认真看了MAX7219的DataSsheet,因为英语是个二把刀,看的迷迷糊糊,似懂非懂(可见英语还是很重要的),又在网上搜索也没发现有正确的程序(都是有点儿问题,上网贴出来请教各位大虾的),没办法只能自力更生了,终于调出来了。

将原版增删修改,传上来共享,希望对以后某位菜鸟第一次使用MAX7219时有所帮助啦,嘿嘿!/**************************************************************** *常用符号定义******************************************************************/#define uchar unsigned char/**************************************************************** *定义MAX7219寄存器******************************************************************/#define REG_NO_OP 0x00 //定义空操作register#define DIG_1 0x01 // 定义数码管1 register#define DIG_2 0x02 // 定义数码管2 register#define DIG_3 0x03 // 定义数码管3 register#define DIG_4 0x04 // 定义数码管4 register#define DIG_5 0x05 // 定义数码管5 register#define DIG_6 0x06 // 定义数码管6 register#define DIG_7 0x07 // 定义数码管7 register#define DIG_8 0x08 // 定义数码管8 register#define REG_DECODE 0x09 // 定义解码控制register#define REG_INTENSITY 0x0a // 定义显示亮度register#define REG_SCAN_LIMIT 0x0b // 定义扫描限制register#define REG_SHUTDOWN 0x0c // 定义"shutdown"模式register#define REG_DISPLAY_TEST 0x0f // 定义"display test"模式register#define INTENSITY_MIN 0x00 // 定义最低显示亮度#define INTENSITY_MAX 0x0f // 定义最高显示亮度/****************************************************************** * 定义硬件引脚连接******************************************************************/#define DATA P2^3; //定义P3_5连接MAX7219 DATA引脚#define CLK P2^5; //定义P3_4连接MAX7219 CLK 引脚#define CS P2^4; //定义P3_3连接MAX7219 CS 引脚/***************************************************************** * 共阴极七段数码管显示对应段查询表(数字0-9分别对应code_table[0]-[9])***********************************************************/uchar code code_table[10]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b}; /*采用数组*//****************************************************************** * MAX7219_Send()描述: 向MAX7219传送一字节数据Arguments : dataout = data to sendReturns : none******************************************************************/ void send (uchar datain){char I,temp;for (i=8; i>0; i--){CLK=0; // CLK 置低temp=datain&0x80;if (temp==0x80) // 判断并输出一位DATA=1; // 输出"1"else // 或DATA=0; // 输出"0"datain<<=1; //datain左移位,以便再次与0x80按位与CLK=1; // CLK 置高}}/**************************************************************** * MAX7219_Write()/MAX7219_Write_1()描述: 向 MAX7219 写命令Arguments : reg_number = register to write todataout = data to write to MAX7219Returns : none************************************************************** */ void MAX7219_Write (uchar add1, uchar dat1) //向第一片MAX7219写数据{CS=0; // CS置低选通MAX7219send(add1); // 写register number 到MAX7219send(dat1); // 写data 到MAX7219CS=1; // 利用CS上升沿锁存以上移位进输入的16位数据}void MAX7219_Write_1(uchar add2,uchar dat2) //向第二片MAX7219写数据{CS=0;sent(add2);sent(dat2);CLK=1; // 第16.5个时钟周期,数据从第一片MAX7219的DOUT端开始输出sent(REG_NO_OP); //对第一片MAX7219进行空操作,sent(0x00);CS=1;}/******************************************************************** MAX7219_DisplayChar()描述: 使某一位显示一个数字Arguments : digit = digit number (0-7)character = character to display (0-9, A-Z)Returns : none****************************************************************/void MAX7219_DisplayChar (char digit, char character){MAX7219_Write(digit, character);}PS:这个函数可以不要,直接调用写数据函数就可以了(原版)/******************************************************************** MAX7219_Clear()/MAX7219_clear_1()描述: 清除所有位的显示Arguments : noneReturns : none*****************************************************************/ void MAX7219_Clear (){uchar i;for (i=0; i < 8; i++)MAX7219_Write(i, 0x00); // 清除第一片MAX7219所有位的显示}void MAX7219_Clear_1(){uchar i;for(i=1;i<=8;i++)MAX7219_Write_1(i,0x00); //清除第二片MAX7219所有位的显示}PS:可以两片一起清楚数据,但建议分开较好。

51单片机程序 MAX7219

51单片机程序 MAX7219
#define MSB 0x80
#define LSB 0x01
//max7219 part
#define DECODE_MODE 0x09
#define INTENSITY 0x0A
#define SCAN_LIMIT 0x0B
#define SHUT_DOWN 0x0C
#define DISPLAY_TEST 0x0F
{
LOAD = LOW;
Write_Max7219_byte(address);
Write_Max7219_byte(dat);
LOAD = HIGH;
}
void Init_Max7219(void) //初始化max7219子函数设置工作寄存器需要查看芯片手册
{
Write_Max7219(SHUT_DOWN,0x01); //Normal Operation XXXXXXX1 Shutdown Mode XXXXXXXX0
Write_Max7219(SCAN_LIMIT,0x07); //SCAN LIMIT 0~7 0xX0~0xX7
Write_Max7219(INTENSITY,0x0f); //Set Intensity 0xX0~0xXf强度调节
}
void main(void)//显示1~8数字
{
unsigned char i;
void delayms(uint z)//延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y-Fra bibliotek);}
void Write_Max7219_byte(unsigned char temp)//发送一个字节的子程序,上升沿发送数据

max7219使用详解

max7219使用详解

Max7219驱动程序一般的MCU因IO脚驱动能力不够,再加之MCU IO口资源有限,产品开发中通常是通过专门的驱动IC来驱动数码管。

7.1 学会看DatasheetMAX7219就是一款可以同时驱动8个数码管的IC。

下图是其引脚图及典型应用电路:我们的CPU只须三根线就可以控制MAX7219,这三根线是:DIN(第一脚),CS(第12脚),CLK(第13脚)。

DIN是数据输入脚,我们要显示的数据就是通过这根线发送到MAX7219的;CS是片选脚,MCU通过把该脚电平拉低来选中MAX7219,或者说MAX7219通过判断该引脚是否为低电平来使能该芯片。

CLK是时钟引脚,该时钟频率是MCU给到MAX7219的,MCU与7219之间的通信频率就根据该信号做基准。

7.2 MAX7219数据格式我们要让8个数码管显示"12345678",这个过程是怎么实现的呢?首先,要搞清楚MAX7219的数据格式,看图:MAX7219是以16位数据接收和发送的,也就是MCU传给MAX7219的数据必须是16位。

下面分析这16位数据格式:D15~D12为X:表示可以为任意值,因为这四位MAX7219目前还用不到。

D11~D8为ADDRESS:表示MAX7219的地址。

D7~D0为DATA,并且位7为高位(最先发送),位0位低位(最后发送)。

也就是当MCU向MAX7219发送一个16位数据时,其中的D11~D8表示选择MAX7219哪个地址,即数据D7~D0是送到该地址的。

7.3 地址译码MAX7219可以挂8个数码管,MCU是怎么把数据显示到指定的数码管的呢?这就要理解MAX7219的地址译码原理。

下图为MAX7219的地址映射图:D15~12以X表示,代表可为0,也可为1。

Digit0~7对应到8个数码管的地址。

Decode Mode:解码模式寄存器,其地址用16进制表示为0x09;Intensity:亮度调节寄存器,其地址用16进制表示为0x0A;Scan Limit:扫描范围寄存器,其地址用16进制表示为0x0B;Shutdown:省电模式,其地址用16进制表示为0x0C;Display Test:测试寄存器,其地址用16进制表示为0x0F;如果,我们要让第一个数码管显示,那么我们这里送到MAX7219的16位数据中的D11~8应该为0001。

MAX7219基本驱动程序

MAX7219基本驱动程序

MAX7219基本驱动程序2015.07.26Q群:沈阳理工大学电子爱好者Note:仅仅是基本驱动程序,那你可以根据自己的需要去修改本程序验证单片机型号:STC15W系列单片机编译软件:Keil3编程语言:C程序组成文件:STC15W.H MAX7219.H MAX7219.CSTC15W.H:把宏晶STC官网烧录软件的15系列头文件更名为STC15WMAX7219.H:/***************************************************文件名称:MAX7219.H功能:MAX7219的驱动四位数码管的函数修改时间:2015.06.28***************************************************/#ifndef_MAX7219_H_#define_MAX7219_H_#include"STC15W.H"#include"intrins.h"//这里的有关单片机的头文件用户可以改成自己的名字#define MAX7219_DIN P10//数据输入,CLK上升沿时数据读入#define MAX7219_CLK P11//时钟信号输入端#define MAX7219_LOAD P12//锁定最近的16位数据为有效数据并载入//用户可以根据自己的需求改变引脚//一条指令的传输:LOAD低-数据-CLK上升沿-数据-CLK上升沿。

LOAD上升沿数据载入#define LOW0#define HIGH1/**************/static void MAX7219_WOnebyte(unsigned char x,unsigned char y); //向MAX7219的X地址写入参数Yvoid MAX7219_Init(unsigned char seg_limit);//MAX7219功能初始化void MAX7219_WData(unsigned long seg_data);//向MAX7219写入需要显示的数据#endifMAX7219.H:/***************************************************文件名称:MAX7219.C功能:MAX7219的驱动四位数码管的函数修改时间:2015.06.28***************************************************/#include"MAX7219.H"unsigned char max7219_segnum=0;//这个参数用来表示当前数码管一共显示几位(1~8)enum MAX7219_ADD{MAX7219_ADD_Nop=0x50,MAX7219_ADD_Digit0,MAX7219_ADD_Digit1,MAX7219_ADD_Digit2,MAX7219_ADD_Digit3,MAX7219_ADD_Digit4,MAX7219_ADD_Digit5,MAX7219_ADD_Digit6,MAX7219_ADD_Digit7,MAX7219_ADD_Mode,MAX7219_ADD_Intensity,MAX7219_ADD_ScanLimit,MAX7219_ADD_ShutDown,MAX7219_ADD_Nouse1,MAX7219_ADD_Nouse2,MAX7219_ADD_DisplayTest,};//这个枚举类型MAX7219_ADD表示MAX7219的寄存器地址/***************************************************函数名称:MAX7219_WOnebyte功能:向MAX7219的X地址写入参数Y输入:X:地址Y:数据输出:无作用范围:局部MAX7219.C***************************************************/ static void MAX7219_WOnebyte(unsigned char x,unsigned char y) {unsigned char i,z=0;for(i=0;i<8;i++){z=(x<<i);if(z&0x80)MAX7219_DIN=HIGH;else MAX7219_DIN=LOW;_nop_();_nop_();MAX7219_CLK=HIGH;_nop_();_nop_();MAX7219_CLK=LOW;}for(i=0;i<8;i++){z=(y<<i);if(z&0x80)MAX7219_DIN=HIGH;else MAX7219_DIN=LOW;_nop_();_nop_();MAX7219_CLK=HIGH;_nop_();_nop_();MAX7219_CLK=LOW;}_nop_();_nop_();MAX7219_LOAD=HIGH;_nop_();_nop_();MAX7219_LOAD=LOW;}/***************************************************函数名称:MAX7219_Init功能:MAX7219功能初始化输入:seg_limit表示显示数码管的位数输出:无作用范围:全局***************************************************/ void MAX7219_Init(unsigned char seg_limit){max7219_segnum=seg_limit;//将设置的显示数码管个数保存MAX7219_LOAD=LOW;_nop_();_nop_();MAX7219_LOAD=HIGH;_nop_();_nop_();MAX7219_LOAD=LOW;MAX7219_WOnebyte(MAX7219_ADD_Mode,0xFF);//MAX7219为译码模式MAX7219_WOnebyte(MAX7219_ADD_Intensity,0x02);//MAX7219的显示亮度为最亮MAX7219_WOnebyte(MAX7219_ADD_ScanLimit,seg_limit);//MAX7219的显示4个数码光(0,1,2,3)MAX7219_WOnebyte(MAX7219_ADD_DisplayTest,0X00);//MAX7219正常工作模式,非测试MAX7219_WOnebyte(MAX7219_ADD_ShutDown,0X01);//MAX7219正常工作模式,非掉电MAX7219_DIN=LOW;MAX7219_CLK=LOW;MAX7219_LOAD=LOW;}/***************************************************函数名称:MAX7219_WData功能:向MAX7219写入需要显示的数据输入:seg_data表示数码管将要显示的数据输出:无作用范围:全局***************************************************/ void MAX7219_WData(unsigned long seg_data){unsigned char x0,x1,x2,x3,x4,x5,x6,x7,a=max7219_segnum;if(seg_data<99999999){x7=(seg_data/10000000);x6=(seg_data/1000000)%10;x5=(seg_data/100000)%10;x4=(seg_data/10000)%10;x3=(seg_data/1000)%10;x2=(seg_data/100)%10;x1=(seg_data/10)%10;x0=(seg_data%10);//将要显示的数据分位MAX7219_WOnebyte(MAX7219_ADD_Digit0,x0);if(a){MAX7219_WOnebyte(MAX7219_ADD_Digit1,x1);a--;}if(a){MAX7219_WOnebyte(MAX7219_ADD_Digit2,x2);a--;}if(a){MAX7219_WOnebyte(MAX7219_ADD_Digit3,x3);a--;}if(a){MAX7219_WOnebyte(MAX7219_ADD_Digit4,x4);a--;}if(a){MAX7219_WOnebyte(MAX7219_ADD_Digit5,x5);a--;}if(a){MAX7219_WOnebyte(MAX7219_ADD_Digit6,x6);a--;}if(a){MAX7219_WOnebyte(MAX7219_ADD_Digit7,x7);}}}验证电路:以上程序本人亲测可用,原版!!更多资讯请加入扣扣群:沈阳理工大学电子爱好者。

显示驱动芯片MAX7219在单片机中的应用

显示驱动芯片MAX7219在单片机中的应用

移入 的数 据 将 丢失 。
表 1 MA 7 1 X 2 9引脚说明表
引脚 号 l 2 3 5 8 1, 1 , , - , 0 1 名称 DN 工 D G ̄I7 IO D G 功 能 串行数据输A螭 8 LD位选线. 位 E 从共阴极 LD中吸入 E 电流
外, 它具有数字和模拟 亮度控 制以及与 S I 串行 口相兼 P,
段数字 L D显示器 , 6 E 或 4个 L D 和条 形图显示器 。它 E
与 单片机 的接 口非常 简单 , 仅用 3个引脚 与单片 机相应 端连接 即可实现最高 1 MHz串行 口。MAX7 1 0 2 9的位 选方 式独具 特色 , 它允 许用户选 择多 种译码方 式译码 选 位, 而且 , 每个显示位都 能个别 寻址和刷新 , 而不需要重 写其他 的显示 位 , 这使 得软件 编程 十分 简单且 灵活 。另
摘 要 : 阐述 了新型显示驱动芯片 MAx7 l 2 9的基本工作原理和软件设计方法 。该芯片功 能强大 、编程简单、控 显可靠 , 可广泛用于 工业控制器等方面的数码显示驱动 。并且运用 P 1 8高端系列 的单片机进行程序测试 。
关键词 :P ; S IMAX7 1 ; 2 9 单片机
D N= bt a des x 0 ; / I (i (d rs&0 8 ) ) /每次取高字节
a des <= ; d rs< 1 / /左移一位
PI =0: Rl

/ /主 函数
C K=1 L ; }
/ /发送数据 fr( O i ; + o i ; i ) = <8 +
容等 特点 。
49 , 1 2
1 3
GD N( 两个 QD必须连接在一起 ) I 装裁 数据输入

单片机时钟设计MAX7219驱动数码管

单片机时钟设计MAX7219驱动数码管

单片机时钟设计MAX7219驱动数码管#include#define uchar unsigned char#define uint unsigned intsbit DIN=P0^1; //"显示串行数据输入端"sbit LOAD=P0^2; //"显示数据锁存端"sbit CLK=P0^3; //"显示时钟输入端"#define DecodeMode 0x09 //"译码模式"#define Intensity 0x0a //"亮度"#define ScanLimit 0x0b //"扫描界限"#define ShutDown 0x0c //"掉电模式"#define DisplayTest 0x0f //"显示测试"uchar code seg_data[]={0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,0x7F,0x7B}; //"0,1,2,3,4,5,6,7,8,9" uchar disp_buf[5];uchar code bit_tab[]={0x01,0x02,0x03,0x04};uchar hour=12,min=0,sec=0,count=0;bit flag;void delay (uint a) //" 毫秒延时函数"{uint i;while( --a != 0){for(i = 0; i < 110; i++);}}void write_max7219_byte(uchar temp){uchar i;for(i=0;i<8;i++){CLK=0;DIN=(bit)(temp&0x80);temp<<=1;CLK=1;}}void write_max7219(uchar address,uint dat){LOAD=0;write_max7219_byte(address);write_max7219_byte(dat);LOAD=1;}void Init_max7219 (void){write_max7219(ScanLimit,0x07); //*"设置扫描界限"*/write_max7219(DecodeMode,0xff); //*"设置译码模式"*/ write_max7219(Intensity,0x04); //*"设置亮度"*/write_max7219(ShutDown,0x01); //*"设置电源工作模式"*/ write_max7219(DisplayTest,0x01);delay(5);write_max7219(DisplayTest,0x00);}void conv(uchar in1,in2){disp_buf[0]=in1/10;disp_buf[1]=in1%10;disp_buf[2]=in2/10;if(flag==0)disp_buf[3]=(in2%10)|0x80;elsedisp_buf[3]=in2%10;}void display( ){write_max7219(bit_tab[0],disp_buf[0]); write_max7219(bit_tab[1],disp_buf[1]); write_max7219(bit_tab[2],disp_buf[2]); write_max7219(bit_tab[3],disp_buf[3]); }void init(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==20){count=0;flag=~flag;sec++;if(sec==60) {sec=0;min++;if(min==60) {min=0;hour++;if(hour==24) {hour=0;min=0;sec=0;}}}}}void main() {init();Init_max7219 ( ); while(1){conv(hour,min); display( );}}。

max7219数码管驱动程序库函数

max7219数码管驱动程序库函数
MAX7219初始化函数
函数说明:初始化MAX7219芯片,MAX7219芯片按照顺序级联,
测试模式显示寄存器没有配置,若希望配置,应在max7219.h中将MAX7219_TestModeDisp_EN预定义为1,
并注意配置测试模式显示的时间,
若时间太短,将较难看到显示效果。
输入参数:n-----初始化芯片个数(n>=1,注意:第1个为第0号芯片,显示函数中有具体描述;
for(i=0;i<8;i++);//短延时
MAX7219_LOAD=0;
for(i=0;i<n;i++)//初始化几个MAX7219芯片,做几次设置操作
MAX7219_WriteAddrData (0x09,MAX7219_InitStructure.DecodeMode);//设置译码模式
MAX7219_LOAD=1;//LOAD上升沿锁存数据
*/
//#define DecodeMode0x09 //译码模式寄存器
//#define Intensity0x0a //亮度寄存器
//#define ScanLimit0x0b //扫描位数寄存器
//#define ShutDown0x0c //关机模式寄存器
//#define DisplayTest0x0f //显示测试寄存器
sbit MAX7219_DIN= P0^3; //串行数据输入
sbit MAX7219_CLK= P0^4; //串行时钟
sbit MAX7219_LOAD= P0^5; //显示数据锁存控制
/*****************************************************************

max7129 使用方法

max7129 使用方法

(一)、MAX7219 MAX7219是一种串入、并出的共阴极LED数码管显示驱动器,每片可驱动8位LED数码管显示,与单片机的接口只需3根线,内带BCD译码器,及显示测试、移位、锁存器等,输出电流达40mA,外围只需一只亮度调整电阻。

MAX7219引脚图1、引脚功能说明DIN:串行数据输入端,CLK的上升沿时数据被载入内部16位移位寄存器中CLK:串行时钟输入端,最高工作频率可达10MHz LOAD:片选端,低电平接收DIN端的数据,高电平时数据被所存DIG0~7:LED的位控制端A~DP:LED 的端控制端DOUT:串行数据输出端,用于芯片的级联ISET:硬件亮度调整端,在该引脚与VCC之间跨接一个电阻,LED的亮度即可通过该电阻来调节,流过LED的段驱动平均电流为流过此电阻电流的100倍,此电阻值范围为:10~80K之间。

2、内部寄存器说明A、译码方式选择寄存器地址:09H 赋值:FFH 表示使用MAX7219内部的BCD译码器00H 表示不使用MAX7219内部的BCD译码器B、亮度调节寄存器地址:0AH 赋值:00H~0FH 可改变MAX7219所驱动的LED的亮度,其变化范围在1/32~31/32之间C、扫描位数设定寄存器地址:0BH 赋值:00H 所有位不显示01H~07H 依次对应于1~8位及前面位全部显示(即需显示的位应为“1”)D、待机模式开关寄存器地址:0CH 赋值:00H LED全灭01H LED正常显示E、显示器测试寄存器地址:0FH 赋值:00H LED为正常显示状态01H LED测试状态,即LED全亮F、8位LED显示数据寄存器地址:01H~08H 对这些寄存器赋值(即需显示的内容),就会在对应的1~8位LED数码管上显示出来3、使用注意事项由于电源中杂波或附近的电磁等干扰信号,使MAX7219在上电后不显示或乱显示;为了消除这种现象应在MAX7219的VCC端与地之间接一只104pf的瓷片电容,在LOAD端于地之间接一只10K的电阻。

MAX7219驱动数码管应用

MAX7219驱动数码管应用

MAX7219驱动数码管应用MAX7219的PROTEUS仿真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的结构和功能1(引脚说明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相连,来调节最大段电流。

8位串行接口数码显示驱动器MAX7219及其应用

8位串行接口数码显示驱动器MAX7219及其应用

8位串行接口数码显示驱动器MAX7219及其应用潍坊高等专科学校 王瑞兰LED数码管的应用已十分广泛,用于数码管显示的驱动电路种类较多,但大致可分为静态显示驱动和动态扫描显示驱动两大类别。

本文所要介绍的MAX7219芯片就是 用于动态扫描显示驱动的芯片。

该芯片的特点是利用一块芯片就能完成8位字数据和8位线数据的驱动,使得电路紧凑。

多芯片级联时,采用串行输入输出,可节省CPU的口线和接口芯片。

与数码管联接时无需限流电阻,8位显示的电流可通过一个外部电阻进行调节。

显示亮度也可通过程序进行控制。

片内具有,可以对输入的数据先进行译码再驱动输出,也可以将输入的数据直接驱动。

一、管脚功能MAX7219采用24管脚DIP和SO两种封装形式,管脚排列如图1所示,各引脚功能见表1。

二、MAX7219内部结构MAX7219的内部功能框图如图2所示。

16位移位寄存器所存数据为D0~D15,见表2。

D8~D11为寄存器地址,D0-D7为数据,D12-D15为不关心位。

片内有14个寄存器,其中8个数据寄存器,寄存着与DIG 0-DIG 7对应的显示数据,地址依次为×1H-8H;6个控制寄存器,即译码控制寄存器(Decode Mode)、显示亮度控制寄存器(Intensity)、扫描频率限制寄存器(Scan Limit)、消隐控制寄存器(Shutdown)、显示测试寄存器Display Test)及无操作寄存器(No-Op),其地址依次为×9H-CH、×FH、×0H。

数据寄存器为8×8双指针SRAM。

因为各寄存器可直接寻址,所以寄存器的数据可分别进行修改。

寄存器的数据可以保存到电源电压降低到2V。

三、控制寄存器1. Shutdown 寄存器Shutdown 寄存器写入×××××××0B数据时,将呈现消隐状态。

51单片机+MAX7219

51单片机+MAX7219

Protues仿真51单片机+MAX7219循环显示0-9仿真电路代码:void delayms(unsigned int ms);//声明毫秒延时函数/********************************************************** **************I/O定义*********************************************************** **************/sbit DIN=P0^0;//MAX7219 DIN引脚sbit LOAD=P0^1;//MAX7219 Load引脚sbit CLK=P0^2; //MAX7219 CLK引脚/********************************************************** **************指令函数*********************************************************** **************/void Command(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){uchar d=0;Command(0x0c,0x01);//工作模式--常规模式Command(0x0b,0x07);//扫苗模式--7个数码管Command(0x0a,0x05);//亮度模式--11/32Command(0x09,0xff);//译码模式--7段数码管while(1){for(d=0;d<10;d++){switch(d){case0:Command(0x01,0x00);Command(0x02,0x01);Command(0x03,0x02);Co mmand(0x04,0x03);Command(0x05,0x04);Command(0x06,0x05);Comm and(0x07,0x06);Command(0x08,0x07);break;case1:Command(0x01,0x01);Command(0x02,0x02);Command(0x03,0x03);Co mmand(0x04,0x04);Command(0x05,0x05);Command(0x06,0x06);Comm and(0x07,0x07);Command(0x08,0x08);break;case2:Command(0x01,0x02);Command(0x02,0x03);Command(0x03,0x04);Co mmand(0x04,0x05);Command(0x05,0x06);Command(0x06,0x07);Comm and(0x07,0x08);Command(0x08,0x09);break;case3:Command(0x01,0x03);Command(0x02,0x04);Command(0x03,0x05);Co mmand(0x04,0x06);Command(0x05,0x07);Command(0x06,0x08);Comm and(0x07,0x09);Command(0x08,0x00);break;case4:Command(0x01,0x04);Command(0x02,0x05);Command(0x03,0x06);Co mmand(0x04,0x07);Command(0x05,0x08);Command(0x06,0x09);Comm and(0x07,0x00);Command(0x08,0x01);break;case5:Command(0x01,0x05);Command(0x02,0x06);Command(0x03,0x07);Co mmand(0x04,0x08);Command(0x05,0x09);Command(0x06,0x00);Command(0x07,0x01);Command(0x08,0x02);break;case6:Command(0x01,0x06);Command(0x02,0x07);Command(0x03,0x08);Co mmand(0x04,0x09);Command(0x05,0x00);Command(0x06,0x01);Comm and(0x07,0x02);Command(0x08,0x03);break;case7:Command(0x01,0x07);Command(0x02,0x08);Command(0x03,0x09);Co mmand(0x04,0x00);Command(0x05,0x01);Command(0x06,0x02);Comm and(0x07,0x03);Command(0x08,0x04);break;case8:Command(0x01,0x08);Command(0x02,0x09);Command(0x03,0x00);Co mmand(0x04,0x01);Command(0x05,0x02);Command(0x06,0x03);Comm and(0x07,0x04);Command(0x08,0x05);break;case9:Command(0x01,0x09);Command(0x02,0x00);Command(0x03,0x01);Co mmand(0x04,0x02);Command(0x05,0x03);Command(0x06,0x04);Comm and(0x07,0x05);Command(0x08,0x06);break;default:Command(0x01,0x00);Command(0x02,0x00);Command(0x03 ,0x00);Command(0x04,0x00);Command(0x05,0x00);Command(0x06,0x0 0);Command(0x07,0x00);Command(0x08,0x00);break;}delayms(1000);}}}/********************************************************** **************毫秒延时函数*********************************************************** **************/void delayms(unsigned int ms){unsigned int i,j;for(j=0;j<ms;j++)for(i=0;i<115;i++);}。

MAX7219驱动数码管显示程序

MAX7219驱动数码管显示程序
WriteWord (ShutDown,NormalOperation); /*设置电源工作模式*/
}
/*-------------------------------------------------
主函数
-------------------------------------------------*/
#define DisplayTest 0x0f /*显示测试*/
#define ShutdownMode 0x00 /*掉电方式工作*/
#define NormalOperation 0x01 /*正常操作方式*/
#define DecodeDigit 0xff /*译码位数设置*/
#define IntensityGrade 0x01 /*显示亮度级别设置*/ //0-10
#define ScanDigit 0x07 /*扫描位数设置*/
#define TestMode 0x01 /*显示测试方式*/
#define TextEnd 0x00 /*显示测试结束,正常工作*/
void InitDis (void)
{
WriteWord (ScanLimit,ScanDigit); /*设置扫描界限*/
WriteWord (DecodeMode,DecodeDigit); /*设置译码模式*/
WriteWord (Intensity,IntensityGrade); /*设置亮度*/
void WriteWord (unsigned char addr,unsigned char num)
{
dis_LOAD=0;
_nop_();

MAX7219共阴极LED驱动器程序

MAX7219共阴极LED驱动器程序

MAX7219共阴极LED数码管显示驱动(一)、MAX7219MAX7219是一种串入、并出的共阴极LED数码管显示驱动器,每片可驱动8位LED数码管显示,与单片机的接口只需3根线,内带BCD译码器,及显示测试、移位、锁存器等,输出电流达40mA,外围只需一只亮度调整电阻。

MAX7219引脚图1、引脚功能说明DIN:串行数据输入端,CLK的上升沿时数据被载入内部16位移位寄存器中CLK:串行时钟输入端,最高工作频率可达10MHzLOAD:片选端,低电平接收DIN端的数据,高电平时数据被所存DIG0~7:LED的位控制端A~DP:LED的端控制端DOUT:串行数据输出端,用于芯片的级联ISET:硬件亮度调整端,在该引脚与VCC之间跨接一个电阻,LED的亮度即可通过该电阻来调节,流过LED的段驱动平均电流为流过此电阻电流的100倍,此电阻值范围为:10~80K之间。

2、内部寄存器说明A、译码方式选择寄存器地址:09H赋值:FFH 表示使用MAX7219内部的BCD译码器00H 表示不使用MAX7219内部的BCD译码器B、亮度调节寄存器地址:0AH赋值:00H~0FH 可改变MAX7219所驱动的LED的亮度,其变化范围在1/32~31/32之间C、扫描位数设定寄存器地址:0BH赋值:00H 所有位不显示01H~07H 依次对应于1~8位及前面位全部显示(即需显示的位应为“1”)D、待机模式开关寄存器地址:0CH赋值:00H LED全灭01H LED正常显示E、显示器测试寄存器地址:0FHF、8位LED显示数据寄存器地址:01H~08H对这些寄存器赋值(即需显示的内容),就会在对应的1~8位LED数码管上显示出来3、使用注意事项由于电源中杂波或附近的电磁等干扰信号,使MAX7219在上电后不显示或乱显示;为了消除这种现象应在MAX7219的VCC端与地之间接一只104pf的瓷片电容,在LOAD端于地之间接一只10K的电阻。

max7219芯片4片级联C51程序与电路

max7219芯片4片级联C51程序与电路
send(0);//输入空操作
send(0);//输入空操作 load=1;//收尾 LOAD 升高 }
write3(uchar pos,num)//同理,多输出一对空操作数 { load=0; send(pos); send(num);
send(0); send(0); send(0); send(0); load=1; }
}
void main()//主函数! { init();初始化四片 7219,里面的 write,write2,write3,write4 就是分别向 4 片 7219 写入数据的程序! for(number=1;number<9;number++)//简单的循环,让四片 7219 都显示出 1~8,顺 序相反 { write(number,number); write2(number,9-number); write3(number,number); write4(number,9-number);
4 片 7219 芯片级联 C51 程序与电路
7219 芯片可以直接带动 8 个数码管显示只需要 3 个 IO 口控制,功能强大,现 在用四片 7219 级联,使用 C 语言编程,力求简单、有效,借鉴了前辈的一些经 验,欢迎各路人马提出宝贵意见! 一.电路 这是在 proteus 中模拟的电路图:
看了这个图你一定知道 4 片 7219 级联是绝对可行的,那么请看细节:
write2(0x0c,1);//开启正常工作模式 1 正常 0 关闭芯片 write2(0x0f,0);//显示测试 正常工作 0 全亮 1 write2(0x09,0xff);//解码方式 0xff 全译码 write2(0x0b,0x07);//8 只 LED 全用 write2(0x0a,10);//亮度为 10

单片机仿真之MAX7221驱动数码管

单片机仿真之MAX7221驱动数码管
_nop_();
CLK = 0;
}
for(i=0;i<8;i++)
{
CLK = 0;
Dat <<= 1;
DIN= CY;
CLK = 1;
_nop_();
_nop_();
CLK = 0;
}
CSB = 1;
}
void init()//初始化函数
{
Write(0x09,0xff);// B类编码显示数字
Write(0x0a,0x07);//强度寄存器赋初值
Write(0x0b,0x07);//显示受限寄存器赋初值,全部显示
Write(0x0c,0x01);//普通操作方式
}
void main()
{
uchar i;
iபைடு நூலகம்it();
delay(2);
for(i=0;i<8;i++)
{
Write(i+1,Disp_Buffer[i]);//依次写入数据
}
while(1);//程序停在这显示想要显示的内容
}
for(i=0;i<120;i++);
}
void Write(uchar Addr,uchar Dat)//写函数,参考时序来写,先写地址后写数据
{
uchar i;
CSB = 0;
for(i=0;i<8;i++)
{
CLK = 0;
Addr <<= 1;
DIN= CY;
CLK = 1;
_nop_();
sbit DIN = P2^0;//数据输入引脚
sbit CSB = P2^1;//使能端

树莓派上MAX7219的字符驱动程序编写

树莓派上MAX7219的字符驱动程序编写

树莓派上MAX7219的字符驱动程序编写1.认识MAX7219拿到MAX7219驱动的LED矩阵,第一件事是先连接并尝试显示图案。

使用MAX7219除了需要提供GND以及VCC外,只需要再提供三根引脚即可点亮矩阵。

其中,DIN引脚输入数据,CS(LOAD)引脚控制数据输入,CLK引脚用于区分每个bit。

MAX的整个写入流程为,首先CS引脚置0,表示允许写入。

而后从高位顺序写入16个bit。

每个bit的写入方式为首先DIN置为要写入的bit值,而后CLK产生一个下降沿(图中为上升沿,不知道为何有差别)即被读入。

最后CS引脚置1表示写入结束。

时序图如下:在运行之前,需要进行一次初始化,其行为是向某几个特定的地址写入特定的值。

至少需要写入两个地址,第一个是0x0b,写入0x07表示扫描显示所有行。

第二个是0x0c,写入1表示进入工作模式。

而后点阵上每一行都有其地址,如第一行是0x01到第八行是0x08,每次向固定行的地址写入一个8位二进制数即可在指定行上显示图案。

2. 树莓派对GPIO的访问虚拟文件系统访问Linux可以通过访问sys/class/gpio下的一些文件,通过对这些文件的读写来实现对于GPIO的访问。

!/bin/bash# DIN,CS,CLK的GPIO口位置DIN=4CS=3CLK=2# 一些文件路径GPIO_BASE=/sys/class/gpioGPIO_EXPORT=${GPIO_BASE}/exportGPIO_UNEXPORT=${GPIO_BASE}/unexportBIN=(00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000)# 生成指定GPIO引脚的文件夹位置。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SPI1_InitStructure.SPI_Mode=SPI_Mode_Master;//设置SPI工作模式;设置为主SPI
SPI1_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB; //高位MSB在先
SPI1_InitStructure.SPI_CPOL = SPI_CPOL_High; //选择了串行时钟的稳态,时钟悬空高
*功能:STM32_SPI1硬件配置初始化
*入口参数:无
*出口参数:无
*说明:STM32_SPI1硬件配置初始化,使用3V3
****************************************************************************/
void SPI1_Init(void)
SPI1_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//数据捕获于第二个时钟沿
SPI1_InitStructure.SPI_NSS = SPI_NSS_Soft;CPolynomial = 7;//CRC值计算的多项式
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOA,GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//SPI1相关引脚
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
#define Max7219_pinCS PAout(3)
#define Max7219_pinDIN PAout(7)
/****************************************************************************
*名称:SPI1_Init(void)
max7219驱动数码管程序(51单片机+STM32 MAX7219数码管程序案例)
1、STM32硬件SPI max7219 8位数码管显示模块数码管模块电路图
/*****************************************************************
Updated TIme:12th,12,2015
SPI1_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_64;//定义波特率预分频值;波特率预分频64
SPI1_InitStructure.SPI_DataSize=SPI_DataSize_8b;//设置SPI的数据大小;SPI发送接收8位帧结构
SPI_I2S_DeInit(SPI1);
SPI_Init(SPI1,SPI1_InitStructure); //根据指定的参数初始化
SPI_Cmd(SPI1,ENABLE); //SPI使能
FuncTIon:通过MAX7219驱动数码管
******************************************************************/
#include delay.h
#include sys.h
#include usart.h//串口通信
#define Max7219_pinCLK PAout(5)
{
SPI_InitTypeDef SPI1_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
//配置SPI1管脚
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//推挽复用功能
GPIO_Init(GPIOA,GPIO_InitStructure);
SPI1_InitStructure.SPI_DirecTIon=SPI_DirecTIon_2Lines_FullDuplex;//设置SPI单向或者双向的数据模式;SPI设置为双线双向全双工
相关文档
最新文档