Ich hab noch nicht mit mehreren Schieberegistern gearbeitet, daher ist der folgende Code ohne Gewähr.
So hab ich das verstanden:
Code:
long data = 0; // alle Bits aus -> alle LEDs aus

void loop()
{
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, data >>16);
    shiftOut(dataPin, clockPin, MSBFIRST, data >>8);
    shiftOut(dataPin, clockPin, MSBFIRST, data);
    digitalWrite(latchPin, HIGH);

    data = (data<<1)+1;
    if (data > 1048576)  data = 0;   // 1048576 = 2^20

    delay(1000);
}