Объединить два полубайта в один байт

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

пытаюсь использовать LED-матрицу 5х7 в горизонтальном положении.

Есть такие массивы, представляющие собой цифры:

const byte dig2[5]  = {B01110000, B00010000, B01110000, B01000000, B01110000}; // цифра 2 размерностью 3х5
const byte dig4[5]  = {B01010000, B01010000, B01110000, B00010000, B00010000}; // цифра 4 размерностью 3х5

Как их склеить в один массив, представляющий собой двузначное число?

byte dig24[5] =  {B01110101, B00010101, B01110111, B01000001, B01110001}; // число 24
 
Arhat109-2
Offline
Зарегистрирован: 24.09.2015

C = (A<<4) + B; Так не получается?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, нижнюю сдвинуть вправо на 4 бита и сложить по OR с верхней. И так в цикле по всему массиву. Нет?

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016

Если это константа, то так и напишите, как dig24 описана - один раз ручками потрудитесь, цифр немного.
Или так:

for (int i=0; i<5; i++) {
   dig24[i]=dig2[i] or (dig4[i] shr 4);
};

Если несколько строк, то заверните в ещё один цикл по строкам. Может быть, знатоки макросов помогут сделать код, который компилятор выполняет, а не процессор.

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016

Arhat109-2 пишет:

C = (A<<4) + B; Так не получается?

Так не получится: движение не в ту сторону, использовать "+" вместо "or" при сдвиге влево нельзя, ибо знак переноса прицепится. Да и вообще, заменять or на + опасно, ибо флаг переноса, от предыдущей операции оставшийся, легко зацепится. :) 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

faeton пишет:

Если это константа, то так и напишите, как dig24 описана - один раз ручками потрудитесь, цифр немного.
Или так:

for (int i=0; i<5; i++) {
   dig24[i]=dig2[i] or (dig4[i] shr 4);
};

Если несколько строк, то заверните в ещё один цикл по строкам. Может быть, знатоки макросов помогут сделать код, который компилятор выполняет, а не процессор.

А or и shr Вы макросами определили? Вы ж их не любите! :)

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

faeton пишет:
Если это константа..

нет, надо динамически формировать массив, т.к. на индикатор физически влазит две циферки.