Yes, go look at some of the earlier code listings I had.
You need 5 arrays that are 24 bytes each. Each bit each byte represents 1 LED, the 24 bytes represent the 24 columns going across the table:
numbers represent "column_count"
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
r r r r r r r r r r r r r r r r r r r r r r r r // bit 7 of chip5 array (spacing vs the numbering above is hosed)
:
:
r r r r r r r r r r r r r r r r r r r r r r r r // bit 0 of chip5 array
r r r r r r r r r r r r r r r r r r r r r r r r // bit 7 of chip4 array
:
r r r r r r r r r r r r r r r r r r r r r r r r // bit 4 of chip4 array
b b b b b b b b b b b b b b b b b b b b b b b b // bit 3 of chip4 array
:
b b b b b b b b b b b b b b b b b b b b b b b b // bit 0 of chip4 array
b b b b b b b b b b b b b b b b b b b b b b b b // bit 7 of chip3 array
:
:
b b b b b b b b b b b b b b b b b b b b b b b b // bit 0 of chip3 array
g g g g g g g g g g g g g g g g g g g g g g g g // bit 7 of chip2 array
:
:
g g g g g g g g g g g g g g g g g g g g g g g g // bit 0 of chip2 array
g g g g g g g g g g g g g g g g g g g g g g g g // bit 7 of chip1 array
:
g g g g g g g g g g g g g g g g g g g g g g g g // bit 4 of chip1 array
x x x x x x x x x x x x x x x x x x x x x x x x // bit3 of chip1 array (3-2-1-0 not used)
:
x x x x x x x x x x x x x x x x x x x x x x x x // bit0 of chip1 array
So for every column_count, you will pull data from 1 column above and put it in the shift registers.
Your loop will cycle thru all 24 columns (0-23), after each pass thru loop, or after each column count increment, or however you decide, you will: accept serial data to update the array, read a button to update the array, do some time based thing to update the array (think tetris), whatever. Just make sure it happens quickly, within the on-time delay for each column even, so the display refresh rate stays high and does not flicker.