Операции с двоичным регистром сдвига в Arduino

Я работаю над программой для Arduino, которая отправляет данные в некоторые сдвиговые регистры для управления большим матричным дисплеем. Мне нужно, чтобы текст прокручивался, и здесь я сталкиваюсь с проблемами. Предположим, например, что на дисплее отображается «HI». Первый набор данных по всему экрану будет «10001 11111». Это будет представлять столбцы, которые освещены в первой фазе. Если я соберу это вместе и добавлю пробел, я получу «10001011111». Я понял, что число в двоичном формате можно сдвинуть на один столбец, разделив его на 2.

Так, например, «11111»/2 = 01111. Следующее деление — 00111, затем 00011, 00001 и т. д. Проблема в том, что я передаю данные в два отдельных сдвиговых регистра, по одному на каждую цифру. Итак, сначала я отправляю «11111», а затем перевожу «10001». Когда они прокручиваются, данные должны передаваться с одного дисплея на другой. Ниже приведена диаграмма, чтобы попытаться лучше понять это: Для работы «HI»

ПЛОХО

     H   |   I
   10001 0 11111
   01000 0 01111
   00100 0 00111
   00010 0 00011
   00001 0 00001
   00000 0 00000

Что мне нужно

         H   |   I
       10001 0 11111
       01000 1 01111
       00100 0 10111
       00010 0 01011
       00001 0 00101
       00000 1 00010
       00000 0 10001
       00000 0 01000
       00000 0 00100
       00000 0 00010
       00000 0 00001
       00000 0 00000

Я действительно пробовал все, что мог придумать. Каково решение?


person Tanner Ewing    schedule 15.09.2011    source источник


Ответы (2)


Если ваша строка помещается в пространство, которое у вас есть для хранения данных, не можете ли вы просто поместить туда всю строку и сдвинуть ее? Вместо того, чтобы использовать фиксированный центральный разделитель, закодируйте свое сообщение не как отдельные буквы, а просто как матрицу, которую вы пытаетесь отобразить.

10001011111

затем несколько раз разделить на 2.

01000101111
00100010111

Сделайте то же самое на всех других строках, я уверен, что 2-я будет 10001000100, а деление на 2 с правым сдвигом работает точно так же.

person Steven Lu    schedule 15.09.2011

Сдвиньте 10001011111 во второй столбец. Сдвиг 00000010001 в первый.

person AndrewStone    schedule 15.09.2011