Simple demo to drive a 8x8-as LED matrix by a MAX7219 LED driver IC. After initialisation two characters (H and W) are displayed alternatively. The MAX7219 IC is driven by hardware SPI: SPI0 module at PTD1, PTD2, PTD3.

Dependencies:   mbed

main.cpp

Committer:
Diego_Mbed
Date:
2020-05-18
Revision:
1:a354187e025d
Parent:
0:bd34a367f642

File content as of revision 1:a354187e025d:

/* 06_spi_max7219_led8x8
 *
 * Simple demo to drive a 8x8-as LED matrix by a MAX7219 LED driver IC
 * After initialisation two characters (H and W) are displayed alternatively.
 * The MAX7219 IC is driven by hardware SPI: SPI0 module at PTD1, PTD2, PTD3.
 */

#include "mbed.h"

SPI spi(D11, NC, D13);          // Arduino compatible MOSI, MISO, SCLK
DigitalOut cs(D10);                // Chip select

const unsigned char num1[]= {
    0x00,0x00,0x00,0x42,0x7F,0x40,0x00,0x00
};  //1
const unsigned char num2[]= {
    0x00,0x46,0x61,0x51,0x49,0x46,0x00,0x00
};  //2
const unsigned char num3[]= {
    0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x00
};  //3
const unsigned char num4[]= {
    0x00,0x0C,0x0A,0x09,0x7F,0x08,0x00,0x00
};  //4
const unsigned char num5[]= {
    0x00,0x00,0x4F,0x49,0x49,0x31,0x00,0x00
};  //5
const unsigned char num6[]= {
    0x00,0x00,0x3C,0x4A,0x49,0x30,0x00,0x00
};  //6
const unsigned char num7[]= {
    0x00,0x00,0x61,0x11,0x09,0x07,0x00,0x00
};  //7
const unsigned char num8[]= {
    0x00,0x00,0x36,0x49,0x49,0x36,0x00,0x00
};  //8
const unsigned char num9[]= {
    0x00,0x00,0x06,0x49,0x49,0x3E,0x00,0x00
};  //9
const unsigned char num0[]= {
    0x00,0x00,0x3E,0x41,0x41,0x3E,0x00,0x00
};  //0

/// Send two bytes to SPI bus
void SPI_Write2(unsigned char MSB, unsigned char LSB)
{
    cs = 0;                         // Set CS Low
    spi.write(MSB);                 // Send two bytes
    spi.write(LSB);
    cs = 1;                         // Set CS High
}

/// MAX7219 initialisation
void Init_MAX7219(void)
{
    SPI_Write2(0x09, 0x00);         // Decoding off
    SPI_Write2(0x0A, 0x08);         // Brightness to intermediate
    SPI_Write2(0x0B, 0x07);         // Scan limit = 7
    SPI_Write2(0x0C, 0x01);         // Normal operation mode
    SPI_Write2(0x0F, 0x0F);         // Enable display test
    wait_ms(500);                   // 500 ms delay
    SPI_Write2(0x01, 0x00);         // Clear row 0.
    SPI_Write2(0x02, 0x00);         // Clear row 1.
    SPI_Write2(0x03, 0x00);         // Clear row 2.
    SPI_Write2(0x04, 0x00);         // Clear row 3.
    SPI_Write2(0x05, 0x00);         // Clear row 4.
    SPI_Write2(0x06, 0x00);         // Clear row 5.
    SPI_Write2(0x07, 0x00);         // Clear row 6.
    SPI_Write2(0x08, 0x00);         // Clear row 7.
    SPI_Write2(0x0F, 0x00);         // Disable display test
    wait_ms(500);                   // 500 ms delay
}

int main()
{
    cs = 1;                         // CS initially High
    spi.format(8,0);                // 8-bit format, mode 0,0
    spi.frequency(1000000);         // SCLK = 1 MHz
    Init_MAX7219();                 // Initialize the LED controller
    while (1) {
        for(int i=1; i<9; i++)      // Write first character (8 rows)
            SPI_Write2(i,num1[i-1]);
        wait(1);                    // 1 sec delay
        for(int i=1; i<9; i++)      // Write second character
            SPI_Write2(i,num2[i-1]);
        wait(1);
        for(int i=1; i<9; i++)      // Write second character
            SPI_Write2(i,num3[i-1]);
        wait(1);
        for(int i=1; i<9; i++)      // Write second character
            SPI_Write2(i,num4[i-1]);
        wait(1);
        for(int i=1; i<9; i++)      // Write second character
            SPI_Write2(i,num5[i-1]);
        wait(1);
        for(int i=1; i<9; i++)      // Write second character
            SPI_Write2(i,num6[i-1]);
        wait(1);
        for(int i=1; i<9; i++)      // Write second character
            SPI_Write2(i,num7[i-1]);
        wait(1);
        for(int i=1; i<9; i++)      // Write second character
            SPI_Write2(i,num8[i-1]);
        wait(1);
        for(int i=1; i<9; i++)      // Write second character
            SPI_Write2(i,num9[i-1]);
        wait(1);
        for(int i=1; i<9; i++)      // Write second character
            SPI_Write2(i,num0[i-1]);
        wait(1);                    // 1 sec delay
    }
}