Сдвиг буфера влево, прокрутка строки на светодиодной панели? - PullRequest
1 голос
/ 04 марта 2011

У меня есть функция, которую я не совсем понимаю

Есть 109 адресов от 0 до 110.

Как этот код сдвигает текст влево?

b=0;
while(b<109)
{
  Display_Buffer[b] = Display_Buffer[b+1];
  b++;
}

если b начинается с 0, то вместо b + 1 текст следует прокручивать вправо ???Или я ошибаюсь?потому что в 0, b + 1 означает, что адрес равен 1, если его b-1, то адрес должен быть 110 (следовательно, прокрутка влево) ... Но это не тот случай, может кто-нибудь дать грубое объяснение?

display_buffer содержит строковую информацию, хранящуюся в его массивах.

-

EDIT

Спасибо, ребята !!Что, если я заменил Display_Buffer [b + 1] на [b-1] ... это изменит процесс?как?

Хорошо, я понял, что должен добавить b = 109 и while (b! = 0) .. или иначе, что не имеет смысла.

Но все же, если Display_Buffer [109] =Display_Buffer [108], означает ли это, что он произведет такой же эффект, как вы, ребята, ответили, но в обратном порядке?

Ответы [ 4 ]

5 голосов
/ 04 марта 2011

Каждой позиции присваивается значение позиции справа от нее, поэтому эффект представляет собой прокрутку влево.

Рассмотрим это удивительное искусство ASCII:

         0  1  2  3  4
Before: [h][e][l][l][o]
 After: [e][l][l][o][ ]

Слот в позиции 0 устанавливается на значение слота 1, поэтому «h» становится «e» и т. д.

2 голосов
/ 04 марта 2011
                           /*  [a|b|c|d|e|f|...]   */
Display[0] = Display[1]    /*  [b|b|c|d|e|f|...]   */
Display[1] = Display[2]    /*  [b|c|c|d|e|f|...]   */
Display[2] = Display[3]    /*  [b|c|d|d|e|f|...]   */
//     ...
                           /*  [b|c|d|e|f|g|...]   */

Когда вы делаете такие вещи, вы должны позаботиться о том, чтобы не переписать с неправильного направления ...

                           /*  [a|b|c|d|e|f|...]   */
Display[1] = Display[0]    /*  [a|a|c|d|e|f|...]   */
Display[2] = Display[1]    /*  [a|a|a|d|e|f|...]   */
//     ...
                           /*  [a|a|a|a|a|a|...]   */

Чтобы сделать то же самое с конца

Display[last] = Display[last-1]    /*  [a|b|c|d|e|f|...]   */
//     ...
Display[2] = Display[1]            /*  [a|b|b|c|d|e|...]   */
Display[1] = Display[0]            /*  [a|a|b|c|d|e|...]   */
Display[0] = ' '                   /*  [ |a|b|c|d|e|...]   */
2 голосов
/ 04 марта 2011

Байт в позиции b устанавливается равным байту в позиции b+1

, поэтому байты медленно перемещаются влево, по одному за раз

1 голос
/ 04 марта 2011

Допустим, изначально Display_Buffer было "abcd".Итак, Display_Buffer[0] = 'a', Display_Buffer[1] = 'b' и т. Д. Теперь то, что вы делаете, это DisplayBuffer[0] = DisplayBuffer[1], т. Е. Замена 'a' на 'b' и аналогично 'b' на 'c' и 'c' на 'd'.Это создает эффект смещения текста влево.

...