Операции с двоичным регистром сдвига в Arduino - PullRequest
0 голосов
/ 15 сентября 2011

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

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

BAD

     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

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

Ответы [ 2 ]

0 голосов
/ 15 сентября 2011

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

0 голосов
/ 15 сентября 2011

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

10001011111

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

01000101111
00100010111

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

...