在2008年开发的红酒自动售卖机上用MAX7219实现8个4位LED显示,一直稳定运行,今天由于要修改一下红酒机的代码,特此分享下MAX7219的驱动。
MAX7219.h
#ifndef MAX7219_H
#define MAX7219_H
#define SPI_NSS_LOW() GPIO_ResetBits(GPIOA, GPIO_Pin_4)
#define SPI_NSS_HIGH() GPIO_SetBits(GPIOA, GPIO_Pin_4)
void IniFourMax7219(void);
void SPI_Max7219_SendFourWord(s32* pEightLedData);
void IniMax7219s(void);
void MAX7219_CloseAllLedDisplay(void);
void MAX7219_OpenAllLedDisplay(void);
void MAX7219_Send4BitNum(u8 LedIndex, u16 data);
void MAX7219_Send4BitDark(u8 LedIndex);
void MAX7219_Send4BitLow(u8 LedIndex);
void MAX7219_Send4BitMiddle(u8 LedIndex);
void MAX7219_Send4BitHeight(u8 LedIndex);
void MAX7219_IntensityAdjust(u8 MAX7219Index, u8 IntensityValue);
u8 MAX7219_LedBitCoding(u8 data);
void MAX7219_SendDataToFirstMax7219(u8 Reg, u8 data);
void MAX7219_SendDataToSecMax7219(u8 Reg, u8 data);
void MAX7219_SendDataToThirdMax7219(u8 Reg, u8 data);
void MAX7219_SendDataToFourMax7219(u8 Reg, u8 data);
#endif
MAX7219.c
#include "stm32f10x.h"
#include "MAX7219.h"
#define REG_DIGIT0 0x01
#define REG_DIGIT1 0x02
#define REG_DIGIT2 0x03
#define REG_DIGIT3 0x04
#define REG_DIGIT4 0x05
#define REG_DIGIT5 0x06
#define REG_DIGIT6 0x07
#define REG_DIGIT7 0x08
#define REG_H 0x0C
#define REG_M 0x0A
#define REG_L 0x0D
#define REG_DECODE 0x09
#define REG_INTENSITY 0x0A
#define REG_LIMIT 0x0B
#define REG_SHUTDOWN 0x0C
#define REG_DISPTEST 0x0F
#define REG_NO_OP 0xF0
#define DECODE_MODE_NO_DECODE 0x00
#define DECODE_MODE_BCD_FOR_DIGIT0 0x01
#define DECODE_MODE_BCD_FOR_DIGIT0_TO_DIGIT3 0x0F
#define DECODE_MODE_BCD_FOR_ALL_DIGIT 0xFF
#define INTENSITY_1_32 0x00
#define INTENSITY_3_32 0x01
#define INTENSITY_5_32 0x02
#define INTENSITY_7_32 0x03
#define INTENSITY_9_32 0x04
#define INTENSITY_11_32 0x05
#define INTENSITY_13_32 0x06
#define INTENSITY_15_32 0x07
#define INTENSITY_17_32 0x08
#define INTENSITY_19_32 0x09
#define INTENSITY_21_32 0x0A
#define INTENSITY_23_32 0x0B
#define INTENSITY_25_32 0x0C
#define INTENSITY_27_32 0x0D
#define INTENSITY_29_32 0x0E
#define INTENSITY_31_32 0x0F
#define SCAN_LIMIT_DIG0 0x00
#define SCAN_LIMIT_DIG01 0x01
#define SCAN_LIMIT_DIG012 0x02
#define SCAN_LIMIT_DIG0123 0x03
#define SCAN_LIMIT_DIG01234 0x04
#define SCAN_LIMIT_DIG012345 0x05
#define SCAN_LIMIT_DIG0123456 0x06
#define SCAN_LIMIT_DIG01234567 0x07
#define SHUTDOWN_SHUTDOWN 0x00
#define SHUTDOWN_NORMAL 0x01
#define DISPLAY_TEST_NORMAL 0x00
#define DISPLAY_TEST_TEST 0x01
#define LED_SEG_G 0x01
#define LED_SEG_F 0x02
#define LED_SEG_E 0x04
#define LED_SEG_D 0x08
#define LED_SEG_C 0x10
#define LED_SEG_B 0x20
#define LED_SEG_A 0x40
#define LED_SEG_DP 0x80
#define NULL_OP (u16)((REG_NO_OP<<8)&0xFF00)
void SPI_Max7219_Init(void);
void IniFourMax7219(void);
void SPI_Max7219_SendFourWord(s32* pEightLedData);
void SPI_Max7219_Init(void)
{
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft ;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1, ENABLE);
SPI_NSS_HIGH();
}
void IniFourMax7219(void)
{
int i;
u8 ucs[10] = { REG_DECODE, 0xFF,
REG_INTENSITY, 0x06,
REG_LIMIT, 0x07,
REG_SHUTDOWN, 0x01,
REG_DISPTEST, 0x00
};
SPI_Max7219_Init();
SPI_NSS_LOW();
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[0]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[1]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[0]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[1]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[0]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[1]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[0]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[1]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_NSS_HIGH();
SPI_NSS_LOW();
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[2]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[3]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[2]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[3]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[2]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[3]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[2]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[3]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_NSS_HIGH();
for(i=0;i<100;i++);
SPI_NSS_LOW();
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[4]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[5]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[4]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[5]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[4]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[5]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[4]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[5]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_NSS_HIGH();
for(i=0;i<100;i++);
SPI_NSS_LOW();
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[6]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[7]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[6]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[7]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[6]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[7]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[6]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[7]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_NSS_HIGH();
for(i=0;i<100;i++);
SPI_NSS_LOW();
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[8]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[9]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[8]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[9]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[8]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[9]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[8]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,ucs[9]);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_NSS_HIGH();
}
void IniMax7219s(void)
{
s32 i;
SPI_Max7219_Init();
for (i=0;i<999999;i++);
MAX7219_SendDataToFirstMax7219(REG_DECODE, DECODE_MODE_NO_DECODE);
MAX7219_SendDataToFirstMax7219(REG_INTENSITY, INTENSITY_31_32);
MAX7219_SendDataToFirstMax7219(REG_LIMIT, SCAN_LIMIT_DIG01234567);
MAX7219_SendDataToFirstMax7219(REG_SHUTDOWN, SHUTDOWN_NORMAL);
MAX7219_SendDataToFirstMax7219(REG_DISPTEST, DISPLAY_TEST_NORMAL);
MAX7219_Send4BitNum(0,0);
MAX7219_Send4BitNum(1,1);
MAX7219_SendDataToSecMax7219(REG_DECODE, DECODE_MODE_NO_DECODE);
MAX7219_SendDataToSecMax7219(REG_INTENSITY, INTENSITY_31_32);
MAX7219_SendDataToSecMax7219(REG_LIMIT, SCAN_LIMIT_DIG01234567);
MAX7219_SendDataToSecMax7219(REG_SHUTDOWN, SHUTDOWN_NORMAL);
MAX7219_SendDataToSecMax7219(REG_DISPTEST, DISPLAY_TEST_NORMAL);
MAX7219_Send4BitNum(2,0);
MAX7219_Send4BitNum(3,1);
MAX7219_SendDataToThirdMax7219(REG_DECODE, DECODE_MODE_NO_DECODE);
MAX7219_SendDataToThirdMax7219(REG_INTENSITY, INTENSITY_31_32);
MAX7219_SendDataToThirdMax7219(REG_LIMIT, SCAN_LIMIT_DIG01234567);
MAX7219_SendDataToThirdMax7219(REG_SHUTDOWN, SHUTDOWN_NORMAL);
MAX7219_SendDataToThirdMax7219(REG_DISPTEST, DISPLAY_TEST_NORMAL);
MAX7219_SendDataToThirdMax7219(REG_DIGIT0, 1);
MAX7219_Send4BitNum(4,4);
MAX7219_Send4BitNum(5,5);
MAX7219_SendDataToFourMax7219(REG_DECODE, DECODE_MODE_NO_DECODE);
MAX7219_SendDataToFourMax7219(REG_INTENSITY, INTENSITY_31_32);
MAX7219_SendDataToFourMax7219(REG_LIMIT, SCAN_LIMIT_DIG01234567);
MAX7219_SendDataToFourMax7219(REG_SHUTDOWN, SHUTDOWN_NORMAL);
MAX7219_SendDataToFourMax7219(REG_DISPTEST, DISPLAY_TEST_NORMAL);
MAX7219_Send4BitNum(6,6);
MAX7219_Send4BitNum(7,7);
}
void SPI_Max7219_SendFourWord(s32* pEightLedData)
{
s32 i;
s32 j;
s32 m;
u8 leds[4][8];
u8 digit[8];
s32 temp;
for (i=0,m=0;i<4;i++,m+=2)
{
temp = pEightLedData[m+1];
digit[4] = temp/1000;
temp %= 1000;
digit[5] = temp/100;
temp %= 100;
digit[6] = temp/10;
digit[7] = temp%10;
temp = pEightLedData[m];
digit[0] = temp/1000;
temp %= 1000;
digit[1] = temp/100;
temp %= 100;
digit[2] =temp/10;
digit[3] = temp%10;
for (j=0;j<8;j++)
{
leds[i][j] = digit[j];
}
}
for(i=7;i>=0;i--)
{
SPI_NSS_LOW();
for(j=3;j>=0;j--)
{
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1,i+1 );
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, leds[j][i]);
}
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_NSS_HIGH();
}
}
void MAX7219_SendDataToFirstMax7219(u8 Reg, u8 data)
{
u16 temp1;
u16 temp2;
temp1 = (u16)Reg;
temp2 = (u16)data;
temp1<<=8;
temp1 &= 0xFF00;
temp2 &= 0x00FF;
temp1 |= temp2;
SPI_NSS_LOW();
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, NULL_OP);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, NULL_OP);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, NULL_OP);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, temp1);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_NSS_HIGH();
}
void MAX7219_SendDataToSecMax7219(u8 Reg, u8 data)
{
u16 temp1;
u16 temp2;
temp1 = (u16)Reg;
temp2 = (u16)data;
temp1<<=8;
temp1 &= 0xFF00;
temp2 &= 0x00FF;
temp1 |= temp2;
SPI_NSS_LOW();
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, NULL_OP);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, NULL_OP);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, temp1);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, NULL_OP);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_NSS_HIGH();
}
void MAX7219_SendDataToThirdMax7219(u8 Reg, u8 data)
{
u16 temp1;
u16 temp2;
temp1 = (u16)Reg;
temp2 = (u16)data;
temp1<<=8;
temp1 &= 0xFF00;
temp2 &= 0x00FF;
temp1 |= temp2;
SPI_NSS_LOW();
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, NULL_OP);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, temp1);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, NULL_OP);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, NULL_OP);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_NSS_HIGH();
}
void MAX7219_SendDataToFourMax7219(u8 Reg, u8 data)
{
u16 temp1;
u16 temp2;
temp1 = (u16)Reg;
temp2 = (u16)data;
temp1<<=8;
temp1 &= 0xFF00;
temp2 &= 0x00FF;
temp1 |= temp2;
SPI_NSS_LOW();
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, temp1);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, NULL_OP);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, NULL_OP);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, NULL_OP);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_NSS_HIGH();
}
u8 MAX7219_LedBitCoding(u8 data)
{
u8 ret;
switch ((u16)data)
{
case 0x00:
ret = LED_SEG_A|LED_SEG_B|LED_SEG_C|LED_SEG_D|LED_SEG_E|LED_SEG_F;
break;
case 0x01:
ret = LED_SEG_B|LED_SEG_C;
break;
case 0x02:
ret = LED_SEG_A|LED_SEG_B|LED_SEG_G|LED_SEG_E|LED_SEG_D;
break;
case 0x03:
ret = LED_SEG_A|LED_SEG_B|LED_SEG_G|LED_SEG_C|LED_SEG_D;
break;
case 0x04:
ret = LED_SEG_F|LED_SEG_G|LED_SEG_B|LED_SEG_C;
break;
case 0x05:
ret = LED_SEG_A|LED_SEG_F|LED_SEG_G|LED_SEG_C|LED_SEG_D;
break;
case 0x06:
ret = LED_SEG_A|LED_SEG_F|LED_SEG_E|LED_SEG_C|LED_SEG_D|LED_SEG_G;
break;
case 0x07:
ret = LED_SEG_A|LED_SEG_B|LED_SEG_C;
break;
case 0x08:
ret = LED_SEG_A|LED_SEG_B|LED_SEG_C|LED_SEG_D|LED_SEG_E|LED_SEG_F|LED_SEG_G;
break;
case 0x09:
ret = LED_SEG_A|LED_SEG_B|LED_SEG_C|LED_SEG_D|LED_SEG_F|LED_SEG_G;
break;
case 0x0A:
ret = LED_SEG_A|LED_SEG_F|LED_SEG_E|LED_SEG_B|LED_SEG_C|LED_SEG_G;
break;
case 0x0B:
ret = LED_SEG_DP;
break;
case 0x0C:
ret = LED_SEG_A|LED_SEG_F|LED_SEG_E|LED_SEG_D;
break;
case 0x0D:
ret = 0;
break;
case 0x0E:
ret = LED_SEG_A|LED_SEG_F|LED_SEG_E|LED_SEG_D|LED_SEG_G;
break;
case 0x0F:
ret = LED_SEG_A|LED_SEG_F|LED_SEG_E|LED_SEG_G;
break;
case 0x10:
ret = LED_SEG_D;
break;
case 0x11:
ret = LED_SEG_G;
break;
case 0x12:
ret = LED_SEG_A;
break;
default:
ret = 0x00;
break;
}
return ret;
}
void MAX7219_Send4BitNum(u8 LedIndex, u16 data)
{
u8 digit[4];
u16 temp;
if ( data<=9999 )
{
temp = data;
digit[0] = temp/1000;
temp %= 1000;
digit[1] = temp/100;
temp %= 100;
digit[2] = temp/10;
digit[3] = temp%10;
switch (LedIndex)
{
case 0:
MAX7219_SendDataToFirstMax7219(REG_DIGIT0, MAX7219_LedBitCoding(digit[0]));
MAX7219_SendDataToFirstMax7219(REG_DIGIT1, MAX7219_LedBitCoding(digit[1]));
MAX7219_SendDataToFirstMax7219(REG_DIGIT2, MAX7219_LedBitCoding(digit[2]));
MAX7219_SendDataToFirstMax7219(REG_DIGIT3, MAX7219_LedBitCoding(digit[3]));
break;
case 1:
MAX7219_SendDataToFirstMax7219(REG_DIGIT4, MAX7219_LedBitCoding(digit[0]));
MAX7219_SendDataToFirstMax7219(REG_DIGIT5, MAX7219_LedBitCoding(digit[1]));
MAX7219_SendDataToFirstMax7219(REG_DIGIT6, MAX7219_LedBitCoding(digit[2]));
MAX7219_SendDataToFirstMax7219(REG_DIGIT7, MAX7219_LedBitCoding(digit[3]));
break;
case 2:
MAX7219_SendDataToSecMax7219(REG_DIGIT0, MAX7219_LedBitCoding(digit[0]));
MAX7219_SendDataToSecMax7219(REG_DIGIT1, MAX7219_LedBitCoding(digit[1]));
MAX7219_SendDataToSecMax7219(REG_DIGIT2, MAX7219_LedBitCoding(digit[2]));
MAX7219_SendDataToSecMax7219(REG_DIGIT3, MAX7219_LedBitCoding(digit[3]));
break;
case 3:
MAX7219_SendDataToSecMax7219(REG_DIGIT4, MAX7219_LedBitCoding(digit[0]));
MAX7219_SendDataToSecMax7219(REG_DIGIT5, MAX7219_LedBitCoding(digit[1]));
MAX7219_SendDataToSecMax7219(REG_DIGIT6, MAX7219_LedBitCoding(digit[2]));
MAX7219_SendDataToSecMax7219(REG_DIGIT7, MAX7219_LedBitCoding(digit[3]));
break;
case 4:
MAX7219_SendDataToThirdMax7219(REG_DIGIT0, MAX7219_LedBitCoding(digit[0]));
MAX7219_SendDataToThirdMax7219(REG_DIGIT1, MAX7219_LedBitCoding(digit[1]));
MAX7219_SendDataToThirdMax7219(REG_DIGIT2, MAX7219_LedBitCoding(digit[2]));
MAX7219_SendDataToThirdMax7219(REG_DIGIT3, MAX7219_LedBitCoding(digit[3]));
break;
case 5:
MAX7219_SendDataToThirdMax7219(REG_DIGIT4, MAX7219_LedBitCoding(digit[0]));
MAX7219_SendDataToThirdMax7219(REG_DIGIT5, MAX7219_LedBitCoding(digit[1]));
MAX7219_SendDataToThirdMax7219(REG_DIGIT6, MAX7219_LedBitCoding(digit[2]));
MAX7219_SendDataToThirdMax7219(REG_DIGIT7, MAX7219_LedBitCoding(digit[3]));
break;
case 6:
MAX7219_SendDataToFourMax7219(REG_DIGIT0, MAX7219_LedBitCoding(digit[0]));
MAX7219_SendDataToFourMax7219(REG_DIGIT1, MAX7219_LedBitCoding(digit[1]));
MAX7219_SendDataToFourMax7219(REG_DIGIT2, MAX7219_LedBitCoding(digit[2]));
MAX7219_SendDataToFourMax7219(REG_DIGIT3, MAX7219_LedBitCoding(digit[3]));
break;
case 7:
MAX7219_SendDataToFourMax7219(REG_DIGIT4, MAX7219_LedBitCoding(digit[0]));
MAX7219_SendDataToFourMax7219(REG_DIGIT5, MAX7219_LedBitCoding(digit[1]));
MAX7219_SendDataToFourMax7219(REG_DIGIT6, MAX7219_LedBitCoding(digit[2]));
MAX7219_SendDataToFourMax7219(REG_DIGIT7, MAX7219_LedBitCoding(digit[3]));
break;
default:
break;
}
}
else if (data==0xF000)
{
MAX7219_Send4BitDark(LedIndex);
}
}
void MAX7219_Send4BitDark(u8 LedIndex)
{
#define LED_DARK 0x0D
switch (LedIndex)
{
case 0:
MAX7219_SendDataToFirstMax7219(REG_DIGIT0, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToFirstMax7219(REG_DIGIT1, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToFirstMax7219(REG_DIGIT2, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToFirstMax7219(REG_DIGIT3, MAX7219_LedBitCoding(LED_DARK));
break;
case 1:
MAX7219_SendDataToFirstMax7219(REG_DIGIT4, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToFirstMax7219(REG_DIGIT5, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToFirstMax7219(REG_DIGIT6, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToFirstMax7219(REG_DIGIT7, MAX7219_LedBitCoding(LED_DARK));
break;
case 2:
MAX7219_SendDataToSecMax7219(REG_DIGIT0, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToSecMax7219(REG_DIGIT1, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToSecMax7219(REG_DIGIT2, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToSecMax7219(REG_DIGIT3, MAX7219_LedBitCoding(LED_DARK));
break;
case 3:
MAX7219_SendDataToSecMax7219(REG_DIGIT4, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToSecMax7219(REG_DIGIT5, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToSecMax7219(REG_DIGIT6, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToSecMax7219(REG_DIGIT7, MAX7219_LedBitCoding(LED_DARK));
break;
case 4:
MAX7219_SendDataToThirdMax7219(REG_DIGIT0, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToThirdMax7219(REG_DIGIT1, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToThirdMax7219(REG_DIGIT2, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToThirdMax7219(REG_DIGIT3, MAX7219_LedBitCoding(LED_DARK));
break;
case 5:
MAX7219_SendDataToThirdMax7219(REG_DIGIT4, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToThirdMax7219(REG_DIGIT5, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToThirdMax7219(REG_DIGIT6, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToThirdMax7219(REG_DIGIT7, MAX7219_LedBitCoding(LED_DARK));
break;
case 6:
MAX7219_SendDataToFourMax7219(REG_DIGIT0, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToFourMax7219(REG_DIGIT1, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToFourMax7219(REG_DIGIT2, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToFourMax7219(REG_DIGIT3, MAX7219_LedBitCoding(LED_DARK));
break;
case 7:
MAX7219_SendDataToFourMax7219(REG_DIGIT4, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToFourMax7219(REG_DIGIT5, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToFourMax7219(REG_DIGIT6, MAX7219_LedBitCoding(LED_DARK));
MAX7219_SendDataToFourMax7219(REG_DIGIT7, MAX7219_LedBitCoding(LED_DARK));
break;
default:
break;
}
}
void MAX7219_Send4BitLow(u8 LedIndex)
{
#define LED_LOW_LINE 0x10
switch (LedIndex)
{
case 0:
MAX7219_SendDataToFirstMax7219(REG_DIGIT0, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToFirstMax7219(REG_DIGIT1, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToFirstMax7219(REG_DIGIT2, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToFirstMax7219(REG_DIGIT3, MAX7219_LedBitCoding(LED_LOW_LINE));
break;
case 1:
MAX7219_SendDataToFirstMax7219(REG_DIGIT4, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToFirstMax7219(REG_DIGIT5, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToFirstMax7219(REG_DIGIT6, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToFirstMax7219(REG_DIGIT7, MAX7219_LedBitCoding(LED_LOW_LINE));
break;
case 2:
MAX7219_SendDataToSecMax7219(REG_DIGIT0, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToSecMax7219(REG_DIGIT1, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToSecMax7219(REG_DIGIT2, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToSecMax7219(REG_DIGIT3, MAX7219_LedBitCoding(LED_LOW_LINE));
break;
case 3:
MAX7219_SendDataToSecMax7219(REG_DIGIT4, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToSecMax7219(REG_DIGIT5, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToSecMax7219(REG_DIGIT6, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToSecMax7219(REG_DIGIT7, MAX7219_LedBitCoding(LED_LOW_LINE));
break;
case 4:
MAX7219_SendDataToThirdMax7219(REG_DIGIT0, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToThirdMax7219(REG_DIGIT1, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToThirdMax7219(REG_DIGIT2, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToThirdMax7219(REG_DIGIT3, MAX7219_LedBitCoding(LED_LOW_LINE));
break;
case 5:
MAX7219_SendDataToThirdMax7219(REG_DIGIT4, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToThirdMax7219(REG_DIGIT5, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToThirdMax7219(REG_DIGIT6, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToThirdMax7219(REG_DIGIT7, MAX7219_LedBitCoding(LED_LOW_LINE));
break;
case 6:
MAX7219_SendDataToFourMax7219(REG_DIGIT0, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToFourMax7219(REG_DIGIT1, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToFourMax7219(REG_DIGIT2, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToFourMax7219(REG_DIGIT3, MAX7219_LedBitCoding(LED_LOW_LINE));
break;
case 7:
MAX7219_SendDataToFourMax7219(REG_DIGIT4, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToFourMax7219(REG_DIGIT5, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToFourMax7219(REG_DIGIT6, MAX7219_LedBitCoding(LED_LOW_LINE));
MAX7219_SendDataToFourMax7219(REG_DIGIT7, MAX7219_LedBitCoding(LED_LOW_LINE));
break;
default:
break;
}
}
void MAX7219_Send4BitMiddle(u8 LedIndex)
{
#define LED_MIDDLE_LINE 0x11
switch (LedIndex)
{
case 0:
MAX7219_SendDataToFirstMax7219(REG_DIGIT0, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToFirstMax7219(REG_DIGIT1, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToFirstMax7219(REG_DIGIT2, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToFirstMax7219(REG_DIGIT3, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
break;
case 1:
MAX7219_SendDataToFirstMax7219(REG_DIGIT4, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToFirstMax7219(REG_DIGIT5, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToFirstMax7219(REG_DIGIT6, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToFirstMax7219(REG_DIGIT7, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
break;
case 2:
MAX7219_SendDataToSecMax7219(REG_DIGIT0, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToSecMax7219(REG_DIGIT1, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToSecMax7219(REG_DIGIT2, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToSecMax7219(REG_DIGIT3, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
break;
case 3:
MAX7219_SendDataToSecMax7219(REG_DIGIT4, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToSecMax7219(REG_DIGIT5, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToSecMax7219(REG_DIGIT6, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToSecMax7219(REG_DIGIT7, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
break;
case 4:
MAX7219_SendDataToThirdMax7219(REG_DIGIT0, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToThirdMax7219(REG_DIGIT1, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToThirdMax7219(REG_DIGIT2, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToThirdMax7219(REG_DIGIT3, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
break;
case 5:
MAX7219_SendDataToThirdMax7219(REG_DIGIT4, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToThirdMax7219(REG_DIGIT5, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToThirdMax7219(REG_DIGIT6, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToThirdMax7219(REG_DIGIT7, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
break;
case 6:
MAX7219_SendDataToFourMax7219(REG_DIGIT0, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToFourMax7219(REG_DIGIT1, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToFourMax7219(REG_DIGIT2, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToFourMax7219(REG_DIGIT3, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
break;
case 7:
MAX7219_SendDataToFourMax7219(REG_DIGIT4, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToFourMax7219(REG_DIGIT5, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToFourMax7219(REG_DIGIT6, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
MAX7219_SendDataToFourMax7219(REG_DIGIT7, MAX7219_LedBitCoding(LED_MIDDLE_LINE));
break;
default:
break;
}
}
void MAX7219_Send4BitHeight(u8 LedIndex)
{
#define LED_HEIGHT_LINE 0x12
switch (LedIndex)
{
case 0:
MAX7219_SendDataToFirstMax7219(REG_DIGIT0, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToFirstMax7219(REG_DIGIT1, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToFirstMax7219(REG_DIGIT2, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToFirstMax7219(REG_DIGIT3, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
break;
case 1:
MAX7219_SendDataToFirstMax7219(REG_DIGIT4, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToFirstMax7219(REG_DIGIT5, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToFirstMax7219(REG_DIGIT6, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToFirstMax7219(REG_DIGIT7, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
break;
case 2:
MAX7219_SendDataToSecMax7219(REG_DIGIT0, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToSecMax7219(REG_DIGIT1, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToSecMax7219(REG_DIGIT2, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToSecMax7219(REG_DIGIT3, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
break;
case 3:
MAX7219_SendDataToSecMax7219(REG_DIGIT4, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToSecMax7219(REG_DIGIT5, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToSecMax7219(REG_DIGIT6, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToSecMax7219(REG_DIGIT7, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
break;
case 4:
MAX7219_SendDataToThirdMax7219(REG_DIGIT0, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToThirdMax7219(REG_DIGIT1, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToThirdMax7219(REG_DIGIT2, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToThirdMax7219(REG_DIGIT3, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
break;
case 5:
MAX7219_SendDataToThirdMax7219(REG_DIGIT4, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToThirdMax7219(REG_DIGIT5, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToThirdMax7219(REG_DIGIT6, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToThirdMax7219(REG_DIGIT7, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
break;
case 6:
MAX7219_SendDataToFourMax7219(REG_DIGIT0, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToFourMax7219(REG_DIGIT1, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToFourMax7219(REG_DIGIT2, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToFourMax7219(REG_DIGIT3, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
break;
case 7:
MAX7219_SendDataToFourMax7219(REG_DIGIT4, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToFourMax7219(REG_DIGIT5, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToFourMax7219(REG_DIGIT6, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
MAX7219_SendDataToFourMax7219(REG_DIGIT7, MAX7219_LedBitCoding(LED_HEIGHT_LINE));
break;
default:
break;
}
}
void MAX7219_IntensityAdjust(u8 MAX7219Index, u8 IntensityValue)
{
switch (MAX7219Index)
{
case 0:
MAX7219_SendDataToFirstMax7219(REG_INTENSITY, IntensityValue);
break;
case 1:
MAX7219_SendDataToSecMax7219(REG_INTENSITY, IntensityValue);
break;
case 2:
MAX7219_SendDataToThirdMax7219(REG_INTENSITY, IntensityValue);
break;
case 3:
MAX7219_SendDataToFourMax7219(REG_INTENSITY, IntensityValue);
break;
default:
break;
}
}
void MAX7219_CloseAllLedDisplay(void)
{
MAX7219_SendDataToFirstMax7219(REG_SHUTDOWN, SHUTDOWN_SHUTDOWN);
MAX7219_SendDataToSecMax7219(REG_SHUTDOWN, SHUTDOWN_SHUTDOWN);
MAX7219_SendDataToThirdMax7219(REG_SHUTDOWN, SHUTDOWN_SHUTDOWN);
MAX7219_SendDataToFourMax7219(REG_SHUTDOWN, SHUTDOWN_SHUTDOWN);
}
void MAX7219_OpenAllLedDisplay(void)
{
MAX7219_SendDataToFirstMax7219(REG_SHUTDOWN, SHUTDOWN_NORMAL);
MAX7219_SendDataToSecMax7219(REG_SHUTDOWN, SHUTDOWN_NORMAL);
MAX7219_SendDataToThirdMax7219(REG_SHUTDOWN, SHUTDOWN_NORMAL);
MAX7219_SendDataToFourMax7219(REG_SHUTDOWN, SHUTDOWN_NORMAL);
}