Как зажигать определённые светодиоды на матрице 8x8 ?
- Войдите на сайт для отправки комментариев
Пнд, 06/11/2017 - 13:57
Здравствуйте, решил заняться програмирование светодиодной матрицы 8x8 на max7219.
Скетч нашёл но сталкнулся с такой проблемой. Не смог найти таблицы или чего-то подобного чтобы понять какие значения отвечают за светодиоды.Шестнадцатиричная система. Может у кого-то есть значения или знает и может суда скинуть? буду благодарин.
вот скетч -
define Din 2
#define Load 3
#define Clk 4
char data[][8]=
{ {0x00,0x00,0xFF,0x81,0x81,0xFF,0x00,0x00}, //0- 0
{0x00,0x00,0x00,0x20,0x40,0xFF,0x00,0x00}, //1-1
{0x00,0x00,0xCF,0x89,0x89,0xF9,0x00,0x00}, //2- 2
{0x00,0x00,0x91,0x91,0x91,0xFF,0x00,0x00}, //3- 3
{0x00,0x00,0xF8,0x08,0x08,0xFF,0x00,0x00}, //4- 4
{0x00,0x00,0xF1,0x91,0x91,0x9F,0x00,0x00}, //5- 5
{0x00,0x00,0xFF,0x91,0x91,0x9F,0x00,0x00}, //6- 6
{0x00,0x00,0x80,0x80,0x80,0xFF,0x00,0x00}, //7- 7
{0x00,0x00,0xFF,0x91,0x91,0xFF,0x00,0x00}, //8- 8
{0x00,0x00,0xF1,0x91,0x91,0xFF,0x00,0x00}, // 9-9
{0x20,0x40,0xFF,0x00,0xFF,0x81,0x81,0xFF}, // 10-10
{0x20,0x40,0xFF,0x00,0xFF,0x81,0x81,0xFF}, // 10-10
{0x3C,0x42,0x81,0x99,0x99,0x81,0x42,0x3C}, // 11 - ГЛАЗ центр.
{0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18}, //12 - закрыт
{0x3C,0x42,0xB1,0xB1,0x81,0x81,0x42,0x3C}, //13 - ВЕРХ левый угол.
{0x3C,0x42,0x81,0x8D,0x8D,0x81,0x42,0x3C}, //14 - ВНИЗ средне.
{0x3C,0x42,0x81,0x81,0x8D,0x8D,0x42,0x3C}, // 15 - ВНИЗ направо
{0x3C,0x42,0x81,0x81,0xB1,0xB1,0x42,0x3C}, // 16 - ВЕРХ направо угол
{0x3C,0x42,0x81,0xB1,0xB1,0x81,0x42,0x3C}, // 17 - ВЕРХ средне
{0x3C,0x42,0x81,0xE1,0xE1,0x81,0x42,0x3C}, // 18 - ВЕРХ высоко
{0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C}, //19 - НИЖНИЕ моргание.
{0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30}, // 20 - ВЕРХ МОРГАНИЕ.
{0xFF,0x81,0x81,0x81,0x81,0x81,0x81,0xFF}, // 21-КВАДРАТ
{0xFF,0x81,0x81,0x99,0x99,0x81,0x81,0xFF}, // 22-КВАДРАТНЫЙ ГЛАЗ
{0xAA,0x80,0x01,0x80,0x01,0x80,0x01,0x55}, // 23 БЕГУЩИЙ ОГОНЯ ПОЛОЖЕНИЕ-1
{0x55,0x01,0x80,0x01,0x80,0x01,0x80,0xAA}, // 24 БЕГУЩИЙ ОГОНЯ ПОЛОЖЕНИЕ-2
{0x18,0x3C,0x3C,0x24,0x24,0x24,0x24,0x18}, // 25 -УЗКИЙ ГЛАЗ ЛЕВО.
{0x18,0x24,0x24,0x3C,0x3C,0x24,0x24,0x18}, // 26 -УЗКИЙ ГЛАЗ.
{0x18,0x24,0x24,0x24,0x24,0x3C,0x3C,0x18}, // 27 -УЗКИЙ ГЛАЗПРАВО.
{0x18,0x3C,0x24,0x24,0x24,0x24,0x24,0x18}, // 28 -УЗКИЙ ГЛАЗ ЛЕВО ЛЕВЕЕ.
{0x18,0x24,0x24,0x24,0x24,0x24,0x3C,0x18}, // 29 -УЗКИЙ ГЛАЗПРАВО ПРАВЕЕ.
{0x0A,0x05,0x05,0x07,0x07,0x05,0x05,0x0A}, // 30 -УЗКИЙ ГЛАЗ В НИЗУ.
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00} // 31
};
void setup() {
pinMode(Din, OUTPUT);
pinMode(Load, OUTPUT);
pinMode(Clk, OUTPUT);
//Устанавливаем Decode Mode, Intensity, Scan Limit, Shutdown и Display Test, но сначала
digitalWrite (Clk, 0); //первый такт устанавливаем в 0, чтобы точно знать, что он в 0
// настраиваем
Data16sent(0x09,0x00); //Decode Mode - без декодирования.
Data16sent(0x0A,0x08); //Intensity - среднее свечение 17 из 32 см.таблицу
Data16sent(0x0B,0x07); //Scan Limit - Используем все 8 катодов.
Data16sent(0x0C,0x01); //используем режим Shutdown в Normal Mode.
Data16sent(0x0F,0x00); //Display Test - Normal Mode.
}
void loop(){
FlashNow(0);
delay(1000);
FlashNow(3);
delay(400);
FlashNow(0);
delay(900);
FlashNow(1);
delay(90);
FlashNow(0);
delay(800);
FlashNow(2);
delay(200);
FlashNow(0);
delay(1000);
FlashNow(1);
delay(120);
FlashNow(0);
delay(800);
FlashNow(4);
delay(200);
FlashNow(5);
delay(200);
FlashNow(0);
delay(350);
FlashNow(1);
delay(100);
FlashNow(0);
delay(150);
FlashNow(1);
delay(100);
FlashNow(0);
delay(1000);
}
void FlashNow(int sost){ //Функция. Зажигает номер комбинации - положения ГЛАЗА из двумерного массива data[][]
for(int i=0;i<8;i++){ //заполняет 8 столбцов матрицы
char temp='0x0'+(i+1); //готовим столбец-катод №1(меняется только последняя цифра,начинаем с 1, поэтому i+1)
Data16sent(temp,data[sost][i]); //зажигаем один i-ый солбец-катод в соответствии с данными массива data[][]
}
}
void Data16sent (char adress, char data ){ //Функция. Принимает 8 бит адреса и 8 бит данных,
//отправляет и защёлкивает 16 бит посылку в MAX7219
digitalWrite(Load, 0);
shiftOut(Din, Clk, MSBFIRST, adress); //первым уходит старший байт
shiftOut(Din, Clk, MSBFIRST, data); //вторым младший
digitalWrite(Load, 1);
}
Судя по Вашему коду (кстати не поленитесь, найдите как правильно вставлять код в сообщение - почитайте прикрепленный сверху пост), каждый столбик - байт: верхняя точка старший бит, нижняя точка младший бит.
в библиотеке LedControl есть команда
http://arduino.on.kg/rabotaem-s-bibliotekoy-LedControl---razbor-funkciy-i-primery-primeneniya
Вот подробно и доступно про работу этой библиотеки.