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

Committer:
Diego_Mbed
Date:
Mon May 18 16:23:09 2020 +0000
Revision:
1:a354187e025d
Parent:
0:bd34a367f642
Controlador con driver max7219

Who changed what in which revision?

UserRevisionLine numberNew contents of line
icserny 0:bd34a367f642 1 /* 06_spi_max7219_led8x8
icserny 0:bd34a367f642 2 *
icserny 0:bd34a367f642 3 * Simple demo to drive a 8x8-as LED matrix by a MAX7219 LED driver IC
icserny 0:bd34a367f642 4 * After initialisation two characters (H and W) are displayed alternatively.
icserny 0:bd34a367f642 5 * The MAX7219 IC is driven by hardware SPI: SPI0 module at PTD1, PTD2, PTD3.
icserny 0:bd34a367f642 6 */
icserny 0:bd34a367f642 7
icserny 0:bd34a367f642 8 #include "mbed.h"
icserny 0:bd34a367f642 9
Diego_Mbed 1:a354187e025d 10 SPI spi(D11, NC, D13); // Arduino compatible MOSI, MISO, SCLK
Diego_Mbed 1:a354187e025d 11 DigitalOut cs(D10); // Chip select
icserny 0:bd34a367f642 12
Diego_Mbed 1:a354187e025d 13 const unsigned char num1[]= {
Diego_Mbed 1:a354187e025d 14 0x00,0x00,0x00,0x42,0x7F,0x40,0x00,0x00
Diego_Mbed 1:a354187e025d 15 }; //1
Diego_Mbed 1:a354187e025d 16 const unsigned char num2[]= {
Diego_Mbed 1:a354187e025d 17 0x00,0x46,0x61,0x51,0x49,0x46,0x00,0x00
Diego_Mbed 1:a354187e025d 18 }; //2
Diego_Mbed 1:a354187e025d 19 const unsigned char num3[]= {
Diego_Mbed 1:a354187e025d 20 0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x00
Diego_Mbed 1:a354187e025d 21 }; //3
Diego_Mbed 1:a354187e025d 22 const unsigned char num4[]= {
Diego_Mbed 1:a354187e025d 23 0x00,0x0C,0x0A,0x09,0x7F,0x08,0x00,0x00
Diego_Mbed 1:a354187e025d 24 }; //4
Diego_Mbed 1:a354187e025d 25 const unsigned char num5[]= {
Diego_Mbed 1:a354187e025d 26 0x00,0x00,0x4F,0x49,0x49,0x31,0x00,0x00
Diego_Mbed 1:a354187e025d 27 }; //5
Diego_Mbed 1:a354187e025d 28 const unsigned char num6[]= {
Diego_Mbed 1:a354187e025d 29 0x00,0x00,0x3C,0x4A,0x49,0x30,0x00,0x00
Diego_Mbed 1:a354187e025d 30 }; //6
Diego_Mbed 1:a354187e025d 31 const unsigned char num7[]= {
Diego_Mbed 1:a354187e025d 32 0x00,0x00,0x61,0x11,0x09,0x07,0x00,0x00
Diego_Mbed 1:a354187e025d 33 }; //7
Diego_Mbed 1:a354187e025d 34 const unsigned char num8[]= {
Diego_Mbed 1:a354187e025d 35 0x00,0x00,0x36,0x49,0x49,0x36,0x00,0x00
Diego_Mbed 1:a354187e025d 36 }; //8
Diego_Mbed 1:a354187e025d 37 const unsigned char num9[]= {
Diego_Mbed 1:a354187e025d 38 0x00,0x00,0x06,0x49,0x49,0x3E,0x00,0x00
Diego_Mbed 1:a354187e025d 39 }; //9
Diego_Mbed 1:a354187e025d 40 const unsigned char num0[]= {
Diego_Mbed 1:a354187e025d 41 0x00,0x00,0x3E,0x41,0x41,0x3E,0x00,0x00
Diego_Mbed 1:a354187e025d 42 }; //0
icserny 0:bd34a367f642 43
icserny 0:bd34a367f642 44 /// Send two bytes to SPI bus
icserny 0:bd34a367f642 45 void SPI_Write2(unsigned char MSB, unsigned char LSB)
icserny 0:bd34a367f642 46 {
icserny 0:bd34a367f642 47 cs = 0; // Set CS Low
icserny 0:bd34a367f642 48 spi.write(MSB); // Send two bytes
icserny 0:bd34a367f642 49 spi.write(LSB);
icserny 0:bd34a367f642 50 cs = 1; // Set CS High
icserny 0:bd34a367f642 51 }
icserny 0:bd34a367f642 52
icserny 0:bd34a367f642 53 /// MAX7219 initialisation
icserny 0:bd34a367f642 54 void Init_MAX7219(void)
icserny 0:bd34a367f642 55 {
icserny 0:bd34a367f642 56 SPI_Write2(0x09, 0x00); // Decoding off
icserny 0:bd34a367f642 57 SPI_Write2(0x0A, 0x08); // Brightness to intermediate
icserny 0:bd34a367f642 58 SPI_Write2(0x0B, 0x07); // Scan limit = 7
icserny 0:bd34a367f642 59 SPI_Write2(0x0C, 0x01); // Normal operation mode
icserny 0:bd34a367f642 60 SPI_Write2(0x0F, 0x0F); // Enable display test
icserny 0:bd34a367f642 61 wait_ms(500); // 500 ms delay
icserny 0:bd34a367f642 62 SPI_Write2(0x01, 0x00); // Clear row 0.
icserny 0:bd34a367f642 63 SPI_Write2(0x02, 0x00); // Clear row 1.
icserny 0:bd34a367f642 64 SPI_Write2(0x03, 0x00); // Clear row 2.
icserny 0:bd34a367f642 65 SPI_Write2(0x04, 0x00); // Clear row 3.
icserny 0:bd34a367f642 66 SPI_Write2(0x05, 0x00); // Clear row 4.
icserny 0:bd34a367f642 67 SPI_Write2(0x06, 0x00); // Clear row 5.
icserny 0:bd34a367f642 68 SPI_Write2(0x07, 0x00); // Clear row 6.
icserny 0:bd34a367f642 69 SPI_Write2(0x08, 0x00); // Clear row 7.
icserny 0:bd34a367f642 70 SPI_Write2(0x0F, 0x00); // Disable display test
icserny 0:bd34a367f642 71 wait_ms(500); // 500 ms delay
icserny 0:bd34a367f642 72 }
icserny 0:bd34a367f642 73
icserny 0:bd34a367f642 74 int main()
icserny 0:bd34a367f642 75 {
icserny 0:bd34a367f642 76 cs = 1; // CS initially High
icserny 0:bd34a367f642 77 spi.format(8,0); // 8-bit format, mode 0,0
icserny 0:bd34a367f642 78 spi.frequency(1000000); // SCLK = 1 MHz
icserny 0:bd34a367f642 79 Init_MAX7219(); // Initialize the LED controller
icserny 0:bd34a367f642 80 while (1) {
icserny 0:bd34a367f642 81 for(int i=1; i<9; i++) // Write first character (8 rows)
Diego_Mbed 1:a354187e025d 82 SPI_Write2(i,num1[i-1]);
icserny 0:bd34a367f642 83 wait(1); // 1 sec delay
icserny 0:bd34a367f642 84 for(int i=1; i<9; i++) // Write second character
Diego_Mbed 1:a354187e025d 85 SPI_Write2(i,num2[i-1]);
Diego_Mbed 1:a354187e025d 86 wait(1);
Diego_Mbed 1:a354187e025d 87 for(int i=1; i<9; i++) // Write second character
Diego_Mbed 1:a354187e025d 88 SPI_Write2(i,num3[i-1]);
Diego_Mbed 1:a354187e025d 89 wait(1);
Diego_Mbed 1:a354187e025d 90 for(int i=1; i<9; i++) // Write second character
Diego_Mbed 1:a354187e025d 91 SPI_Write2(i,num4[i-1]);
Diego_Mbed 1:a354187e025d 92 wait(1);
Diego_Mbed 1:a354187e025d 93 for(int i=1; i<9; i++) // Write second character
Diego_Mbed 1:a354187e025d 94 SPI_Write2(i,num5[i-1]);
Diego_Mbed 1:a354187e025d 95 wait(1);
Diego_Mbed 1:a354187e025d 96 for(int i=1; i<9; i++) // Write second character
Diego_Mbed 1:a354187e025d 97 SPI_Write2(i,num6[i-1]);
Diego_Mbed 1:a354187e025d 98 wait(1);
Diego_Mbed 1:a354187e025d 99 for(int i=1; i<9; i++) // Write second character
Diego_Mbed 1:a354187e025d 100 SPI_Write2(i,num7[i-1]);
Diego_Mbed 1:a354187e025d 101 wait(1);
Diego_Mbed 1:a354187e025d 102 for(int i=1; i<9; i++) // Write second character
Diego_Mbed 1:a354187e025d 103 SPI_Write2(i,num8[i-1]);
Diego_Mbed 1:a354187e025d 104 wait(1);
Diego_Mbed 1:a354187e025d 105 for(int i=1; i<9; i++) // Write second character
Diego_Mbed 1:a354187e025d 106 SPI_Write2(i,num9[i-1]);
Diego_Mbed 1:a354187e025d 107 wait(1);
Diego_Mbed 1:a354187e025d 108 for(int i=1; i<9; i++) // Write second character
Diego_Mbed 1:a354187e025d 109 SPI_Write2(i,num0[i-1]);
icserny 0:bd34a367f642 110 wait(1); // 1 sec delay
icserny 0:bd34a367f642 111 }
icserny 0:bd34a367f642 112 }
icserny 0:bd34a367f642 113
icserny 0:bd34a367f642 114
icserny 0:bd34a367f642 115
icserny 0:bd34a367f642 116
icserny 0:bd34a367f642 117
icserny 0:bd34a367f642 118