2011-03-04 44 views
1

我有一個功能,我不太明白將緩衝區移到左側,在LED面板上滾動字符串?

有從0 109個地址110

這段代碼是如何轉移文本左?

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

如果b從0開始,那麼b + 1應該滾動文本到RIGHT而不是?或者我得到這個錯誤?因爲在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],這是否意味着它會產生與你們回答相同的效果,但反過來呢?

+1

做同樣的事情你只是將元素從'b + 1'複製到'b',即將所有元素向下*移動一個元素。 –

+0

您正在向後閱讀作業。 –

回答

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

謝謝你們!如果我用[b-1]替換Display_Buffer [b + 1] ...會怎樣反轉這個過程?怎麼樣 ? – NLed

+0

完美,你可以得到回答我的第二個問題的答案:D THanks – NLed

2

它設置在b位字節是在位置b+1

所以等於字節字節慢慢向左移動,一個在

5

每個位置的位置值分配給合適的時間它的效果是向左滾動。

考慮這真棒ASCII藝術:

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

槽在位置0設置爲時隙1的值,因此「H」變爲「E」,依此類推。

+1

+1真棒ASCII藝術 –

+0

謝謝你們!如果我用[b-1]替換Display_Buffer [b + 1] ...會怎樣反轉這個過程?怎麼樣 ? – NLed

1

可以說Display_Buffer最初是"abcd"。所以Display_Buffer[0] = 'a', Display_Buffer[1] = 'b'等。現在你在做什麼是DisplayBuffer[0] = DisplayBuffer[1],即用'b'代替'a',用'c'代替'b',用'd'代替'c'。這產生文本向左移動的效果。

+0

謝謝你們!如果我用[b-1]替換Display_Buffer [b + 1] ...會怎樣反轉這個過程?怎麼樣 ? – NLed