目录

(SPI协议)引脚定义:

数据传输方式:

数据组成:

单片数据传输示例程序:

MAX7219驱动函数模块(当前为级联的驱动,单片也可以使用)

MAX7219运行函数:

仿真图:


(SPI协议)引脚定义:

 DIN:数据传输引脚

CLK:时钟线引脚

LOAD(CS):也就是片选

BIG1-BIG8位选引脚

SEGA1-DP是数据引脚

示例测试电路是3块8x8的点阵级联显示

数据传输方式:

CS:拉低0

CLK:拉低

DIN:放入数据

CLK:拉高

(循环15次后)

CS:拉高

即完成一次传输

数据组成:

NE NE NE NE D3 D2 D1 D0 DP A B C D E F G

由16位数据组成,前4位为无效位,后4位表示芯片各功能的寄存器地址,后8位为数据位

注意:在不使用BCD码解码工作方式时,数据位并不是A-DP而是DP然后A到G,所以需要进行循环移位后进行传输!

单片数据传输示例程序:

MAX7219驱动函数模块(当前为级联的驱动,单片也可以使用)

#include <REGX52.H>

/*功能寄存器定义*/
#define  DECODE_MODE   0x09	//解码模式
#define  INTENSITY     0x0A //亮度
#define  SCAN_LIMIT    0x0B	//扫描位数
#define  SHUT_DOWN     0x0C //工作模式
#define  DISPLAY_TEST  0x0F //显示器自检

/*位选寄存器地址定义*/
#define  D_1  0x01
#define  D_2  0x02
#define  D_3  0x03
#define  D_4  0x04
#define  D_5  0x05
#define  D_6  0x06
#define  D_7  0x07
#define  D_8  0x08

/*控制端口定义*/
sbit DIN=P1^0; 
sbit CLK=P1^1;

sbit LOAD1=P1^2;
sbit LOAD2=P1^3;
sbit LOAD3=P1^4;


/**----------------------------------------------------------------------------------------------
  * @brief  数据二进制循环移位数据
  * @param  biter	要转换的数据

  * @retval dier 转换好的数据8位
---------------------------------------------------------------------------------*/
unsigned char biter_zuo(unsigned char biter)
{
	static unsigned char diyi,dier;

	diyi = biter << 7;
	dier = biter >> 1;
	dier = dier | diyi;
	
	return dier;
}

/**----------------------------------------------------------------------------------------------
  * @brief  基本函数,写入一个8位数据0xXX 
  * @param  temp:写入的字节
  * @retval 无
---------------------------------------------------------------------------------*/
void Max7219_Wbyte(unsigned char temp)
{
	unsigned char i;
	for (i=0;i<8;i++)
	{
		CLK = 0;
		DIN = temp&(0x80>>i);
		CLK = 1;
	}
}

/**----------------------------------------------------------------------------------------------
  * @brief  点阵驱动应用函数,可以将数据直接经过转换后正常显示

  * @param  pianxuan:片选 1-3
			digit:	  位选
			Biters:  传的数据
  * @retval 无
---------------------------------------------------------------------------------*/
void MAX7219_Digit(unsigned char pianxuan,digit,Biters)
{
	Biters = biter_zuo(Biters);

	if(pianxuan == 1)
	{
		LOAD1=0;
		Max7219_Wbyte(digit);
		Max7219_Wbyte(Biters);
		LOAD1=1;
	}
	if(pianxuan == 2)
	{
		LOAD2=0;
		Max7219_Wbyte(digit);
		Max7219_Wbyte(Biters);
		LOAD2=1;
	}
	if(pianxuan == 3)
	{
		LOAD3=0;
		Max7219_Wbyte(digit);
		Max7219_Wbyte(Biters);
		LOAD3=1;
	}
}

/**----------------------------------------------------------------------------------------------
  * @brief  调试函数,传输原地址,数据

  * @param  pianxuan:片选,选择要写入的芯片序号1-3
			digit:	  功能命令地址
			Biters:  要传的数据
  * @retval 无
---------------------------------------------------------------------------------*/
void MAX7219_WInit(unsigned char pianxuan,digit,Biters)
{
	if(pianxuan == 1)
	{
		LOAD1 = 0;
		Max7219_Wbyte(digit);
		Max7219_Wbyte(Biters);
		LOAD1 = 1;
	}
	if(pianxuan == 2)
	{
		LOAD2 = 0;
		Max7219_Wbyte(digit);
		Max7219_Wbyte(Biters);
		LOAD2 = 1;
	}	
	if(pianxuan == 3)
	{
		LOAD3 = 0;
		Max7219_Wbyte(digit);
		Max7219_Wbyte(Biters);
		LOAD3 = 1;
	}
}

/**----------------------------------------------------------------------------------------------
  * @brief 	MAX7219初始化
  * @param  无

  * @retval 无
---------------------------------------------------------------------------------*/
void MAX7019_Init(void)     
{
	DIN   = 1;
	CLK   = 1;
	LOAD1 = 1;
	LOAD2 = 1;
	LOAD3 = 1;

	MAX7219_WInit(1,SHUT_DOWN, 0x01);   	//正常运行:0xx1 关机模式:0xx0
	MAX7219_WInit(1,DISPLAY_TEST, 0x00);  //正常运行:0xx0 显示测试模式:
	MAX7219_WInit(1,DECODE_MODE, 0x00);   //解码模式选择 BOS码
	MAX7219_WInit(1,SCAN_LIMIT, 0x07);   	//扫描限制:0~7 0xX0~0xX7
	MAX7219_WInit(1,INTENSITY, 0x03);   	//亮度选择0xX0~0xXF
	
	MAX7219_WInit(2,SHUT_DOWN, 0x01);   	//正常运行:0xx1 关机模式:0xx0
	MAX7219_WInit(2,DISPLAY_TEST, 0x00);  //正常运行:0xx0 显示测试模式:
	MAX7219_WInit(2,DECODE_MODE, 0x00);   //解码模式选择 BOS码
	MAX7219_WInit(2,SCAN_LIMIT, 0x07);   	//扫描限制:0~7 0xX0~0xX7
	MAX7219_WInit(2,INTENSITY, 0x03);   	//亮度选择0xX0~0xXF

	MAX7219_WInit(3,SHUT_DOWN, 0x01);   	//正常运行:0xx1 关机模式:0xx0
	MAX7219_WInit(3,DISPLAY_TEST, 0x00);  //正常运行:0xx0 显示测试模式:
	MAX7219_WInit(3,DECODE_MODE, 0x00);   //解码模式选择 BOS码
	MAX7219_WInit(3,SCAN_LIMIT, 0x07);   	//扫描限制:0~7 0xX0~0xX7
	MAX7219_WInit(3,INTENSITY, 0x03);   	//亮度选择0xX0~0xXF
}

MAX7219运行函数:

#include <REGX52.H>
#include "Delay.h"
#include "MAX7219.h"

unsigned char gImage_A[] = {0x07,0x1F,0x74,0xF4,0xF4,0x7C,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char gImage_B[8] = {0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00};
unsigned char gImage_C[8] = {0x08,0x3C,0xFE,0xFF,0xFF,0xFE,0x3C,0x08};
unsigned char i;



void main()
{
	MAX7019_Init();	

	while(1)
	{
		for (i=0;i<8;i++)
		{
			MAX7219_Digit(1,i+1,gImage_A[i]);
		}
		Delay(30);
		for (i=0;i<8;i++)
		{
			MAX7219_Digit(1,i+1,gImage_A[i+1]);
		}
		Delay(30);
		for (i=0;i<8;i++)
		{
			MAX7219_Digit(1,i+1,gImage_A[i+2]);
		}
		Delay(30);
		for (i=0;i<8;i++)
		{
			MAX7219_Digit(1,i+1,gImage_A[i+3]);
		}
		Delay(30);
		for (i=0;i<8;i++)
		{
			MAX7219_Digit(1,i+1,gImage_A[i+4]);
		}
		Delay(30);
		for (i=0;i<8;i++)
		{
			MAX7219_Digit(1,i+1,gImage_A[i+5]);
		}
		Delay(30);
		for (i=0;i<8;i++)
		{
			MAX7219_Digit(1,i+1,gImage_A[i+6]);
		}
		Delay(30);
		for (i=0;i<8;i++)
		{
			MAX7219_Digit(1,i+1,gImage_A[i+7]);
		}
		Delay(30);
	}
}

仿真图:

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐