#include <SPI.h>
static const int g_iBaudrate = 40000000;
SPIClass* hspi = nullptr;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
// Init SPI
hspi = new SPIClass( HSPI );
hspi->begin( 14, 12, 13, 27 ); // Set pins. CLK(SCK):14, MISO:12, MOSI:13, SS:27
pinMode( hspi->pinSS(), OUTPUT );
digitalWrite( hspi->pinSS(), HIGH );
// Init MAX7219 register
sendSPICmd( hspi, 0x9, 0 ); // Decode Mode:0 (Address:0x9, Data:0)
sendSPICmd( hspi, 0xA, 6 ); // Intensity:6 (Address:0xA, Data:6)
sendSPICmd( hspi, 0xB, 7 ); // Scan Limit:7(8 lines) (Address:0xB, Data:7)
sendSPICmd( hspi, 0xC, 1 ); // ShutDown:1 (Address:0xC, Data:1)
sendSPICmd( hspi, 0xF, 0 ); // Display Test:0 (Address:0xF, Data:0)
}
void loop() {
// put your main code here, to run repeatedly:
// Display LED
for( int i = 1; i <= 8; ++i )
{
if( i == 1 || i == 8 )
sendSPICmd( hspi, i, 255 );
else
sendSPICmd( hspi, i, 129 );
}
delay(200);
for( int i = 1; i <= 8; ++i )
{
if( i == 1 || i == 8 )
sendSPICmd( hspi, i, 0 );
else if( i == 2 || i == 7 )
sendSPICmd( hspi, i, 126 );
else
sendSPICmd( hspi, i, 66 );
}
delay(200);
for( int i = 1; i <= 8; ++i )
{
if( i == 1 || i == 2 || i == 7 || i == 8 )
sendSPICmd( hspi, i, 0 );
else if( i == 3 || i == 6 )
sendSPICmd( hspi, i, 60 );
else
sendSPICmd( hspi, i, 36 );
}
delay(200);
for( int i = 1; i <= 8; ++i )
{
if( i == 4 || i == 5 )
sendSPICmd( hspi, i, 24 );
else
sendSPICmd( hspi, i, 0 );
}
delay(200);
}
void sendSPICmd( SPIClass* spi, byte byReg, byte byBuf )
{
spi->beginTransaction( SPISettings( g_iBaudrate, MSBFIRST, SPI_MODE0 ) );
digitalWrite( hspi->pinSS(), LOW ); // Start communicate
spi->transfer( byReg );
spi->transfer( byBuf );
digitalWrite( hspi->pinSS(), HIGH ); // Stop communicate
spi->endTransaction();
}