Вывод текста в светодиодной матрице
- Войдите на сайт для отправки комментариев
Народ, сразу признаюсь я далеко не асс во всяких С++. Писал когда-то на Delphi, сейчас PowerShell, VBScript, чуть чуть java.
Таки пытаюсь разобраться с выводом текста на матрицу 16х16. Как создать шрифт понял, а вот в задании светящихся точек на матрице не въезжаю. А конкретно не понимаю вот это выражение:
pixel = ((vertPixels >> k) & 0x01);
const uint8_t font7num[][3] PROGMEM = { {0x1F,0x11,0x1F}, //0 {0x0,0x8,0x1F}, //1 {0x13,0x15,0x19}, //2 {0x11,0x15,0x1F}, //3 {0x6,0xA,0x1F}, //4 {0x1D,0x15,0x17}, //5 {0x1F,0x15,0x17}, //6 {0x10,0x17,0x18}, //7 {0x1F,0x15,0x1F}, //8 {0x1D,0x15,0x1F}, //9 {0x0}, // {0x1}, //. {0x9}, //: };
Вот мой маленький шрифтик, состоящий из цифр, пробела, точки и двоеточия.
Вот считываем 2. vertPixels это двоичное представление разряда. Т.е. 19, 21 и 25.
vertPixels >> k - k -это последовательность от 4 до 0. Т.е. сдвигаем скажем 19 на 4, потом на , на 2, на 1 и на 0.
11001 >> 4 = 00001 11001 >> 3 = 00011 11001 >> 2 = 00110 11001 >> 1 = 01100 11001 >> 0 = 11001
А вот следующее действие хоть убей не понимаю. & 0x01. Читал. Весь день читал. Как-то обработать по маске. И результаты есть:
11001 >> 4 = 00001 & 0x01=1 11001 >> 3 = 00011 & 0x01=0 11001 >> 2 = 00110 & 0x01=0 11001 >> 1 = 01100 & 0x01=1 11001 >> 0 = 11001 & 0x01=1
Но как не понимаю! Объясните плиз!
А вот следующее действие хоть убей не понимаю. & 0x01. Читал. Весь день читал. Как-то обработать по маске. И результаты есть:
Но как не понимаю! Объясните плиз!
неправильные у вас результаты, потому и не понимаете. Выражение (x & 0x01) установит бит 1 в младшем разряде, если в х на этом месте тоже единица:
неправильные у вас результаты, потому и не понимаете. Выражение (x & 0x01) установит бит 1 в младшем разряде, если в х на этом месте тоже единица:
Самое главное, что у меня тоже так получается. Но тогда будут светится не те сегменты. На практике получается именно как я написал. Вот у той же двойки. первый столбик 19, второй 21, третий 25.
Берем средний столбик. Все цифры у меня 3х5 диодов. Т.е. средний должен гореть как 10101.
А если считть по правильному, то получаем:
Т.е. в среднем столбце у 2 будет гореть только верхний сегмент Ни средний ни нижний не загорятся!
Берем средний столбик. Все цифры у меня 3х5 диодов. Т.е. средний должен гореть как 10101.
ну правильно - вот и надо брать 0х15 = 10101. А вы что берете? почему 100001 ? - мало того, что на один разряд длиннее, так еще и единицу в центре потеряли
А если считть по правильному, то получаем:
ну правильно - вот и надо брать 0х15 = 10101. А вы что берете? почему 100001 ? - мало того, что на один разряд длиннее, так еще и единицу в центре потеряли
Совсем запутался. 2 это {0x13,0x15,0x19}
Но это в шестнадцатиричных значениях. Или нет? Просто
И значения он в порт выдает 19, 21 и 25. Я и переводил их на бумаге в двоичный код, а потом все проделывал с ними. А надо получается ...... брррр! Кажется понял. Я эти числа в калькуляторе вводил как шестнадцатиричные! А надо было десятичные выбрать! Блин весь день голову ломал! Спасибо!
не за что, обращайтесь :)