将缓冲区移到左侧,在LED面板上滚动一个字符串?

时间:2011-03-04 13:10:42

标签: c arrays text scroll buffer

我有一个我不太懂的功能

从0到110有109个地址。

这段代码如何将文字移到左边?

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包含存储在其数组中的字符串信息。

-

修改

谢谢你们!如果我用[b-1]替换Display_Buffer [b + 1] ...会反转这个过程怎么办?怎么样?

好的,我意识到我必须添加b = 109和while(b!= 0)..否则就没有意义了。

但是,如果Display_Buffer [109] = Display_Buffer [108],那是否意味着它会产生与你们回答的相同的效果,但反过来呢?

4 个答案:

答案 0 :(得分:5)

每个位置都分配了右侧位置的值,因此效果是向左滚动。

考虑这个令人敬畏的ASCII艺术:

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

位置0的插槽设置为插槽1的值,因此'h'变为'e',依此类推。

答案 1 :(得分:2)

它将位置b的字节设置为等于b+1位置的字节

所以字节慢慢向左移动,一次一个

答案 2 :(得分:2)

                           /*  [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|...]   */

答案 3 :(得分:1)

让我们说Display_Buffer最初是"abcd"。所以Display_Buffer[0] = 'a', Display_Buffer[1] = 'b'等等。现在你正在做的是DisplayBuffer[0] = DisplayBuffer[1],即用'b'代替'a',用'c'代替'b',用'd'代替'c'。这会产生向左移动文本的效果。