R.U.R.
Подключение светодиодной матрицы 8x8 (MAX7219) к Arduino
Рассмотрим светодиодный матричный модуль на базе чипа MAX7219 и способ подключения её к Arduino UNO R3.
Данный модуль удобен тем, что для управления используется всего 3 контакта, помимо питания. Можно объединять несколько таких модулей в большой дисплей, но с ростом количества бодулей бут падать скорость отрисовки.
Соединение
-
Arduino pin8 с выводом DIN модуля
-
Arduino pin9 с выводом CS модуля
-
Arduino pin10 с выводом CLK модуля
-
Питание 5В с выводом VCC модуля (если несколько матричных модулей, то питание от Arduino будет не хватать и прийдется модули запитывать от внешнего источника питания)
-
Земля питания с выводом GND модуля (земля модуля и земля Arduino должны быть соединены)
Скетч
Будет рисоваться символ сердца, затем все светодиоды последовательно зажгем и затем последовательно все погасим. И так по кругу бесконечно.
unsigned char i;
unsigned char j;
int Max7219_pinCLK = 10;
int Max7219_pinCS = 9;
int Max7219_pinDIN = 8;
unsigned char disp1[33][8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // рисунок сердца
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
0x00, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
0x40, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
0x60, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
0x60, 0x90, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
0x60, 0x90, 0x88, 0x40, 0x40, 0x00, 0x00, 0x00,
0x60, 0x90, 0x88, 0x44, 0x40, 0x00, 0x00, 0x00,
0x60, 0x90, 0x88, 0x44, 0x44, 0x00, 0x00, 0x00,
0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x00, 0x00,
0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x00,
0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x20,
0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x60,
0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x90, 0x60,
0x60, 0x90, 0x88, 0x44, 0x44, 0x88, 0x90, 0x60 // рисунок сердца
};
void Write_Max7219_byte(unsigned char DATA)
{
unsigned char i;
digitalWrite(Max7219_pinCS, LOW);
for (i = 8; i >= 1; i--)
{
digitalWrite(Max7219_pinCLK, LOW);
digitalWrite(Max7219_pinDIN, DATA & 0x80);
DATA = DATA << 1;
digitalWrite(Max7219_pinCLK, HIGH);
}
}
void Write_Max7219(unsigned char address, unsigned char dat)
{
digitalWrite(Max7219_pinCS, LOW);
Write_Max7219_byte(address);
Write_Max7219_byte(dat);
digitalWrite(Max7219_pinCS, HIGH);
}
void Init_MAX7219(void)
{
Write_Max7219(0x09, 0x00);
Write_Max7219(0x0a, 0x03);
Write_Max7219(0x0b, 0x07);
Write_Max7219(0x0c, 0x01);
Write_Max7219(0x0f, 0x00);
}
void setup()
{
pinMode(Max7219_pinCLK, OUTPUT);
pinMode(Max7219_pinCS, OUTPUT);
pinMode(Max7219_pinDIN, OUTPUT);
delay(50);
Init_MAX7219();
}
void loop()
{
//рисуем сердце
for (j = 0; j < 17; j++)
{
for (i = 1; i < 9; i++)
Write_Max7219(i, disp1[j][i - 1]);
delay(100);
}
//все закрашиваем
for (i = 1; i < 9; i++)
{
Write_Max7219(i, 0xFF);
delay(100);
}
//все стираем
for (i = 1; i < 9; i++)
{
Write_Max7219(i, 0x00);
delay(100);
}
//пауза
delay(800);
}