Here's a test board I am building up that that has 100 LEDs.
Will have 20 shift registers eventually, 1 per 5 bits arranged in columns.
All individually addressable, shift out 20 bytes every 5mS using
digitalWrite(ssPin, LOW);
for (x=0; x<20; x=x+1){
SPI.transfer(displayArray[x]);
}
digitalWrite(ssPin, HIGH);
Advantage: maximum brightness.
Disadvantage: more hardware needed.
Can use PWM on the the shift registers to control brightness of the array.
The LEDs are not on here, the flash made them look like that.
The other way is to multiplex control them from a matrix, 24 x 24.
Write 24 anodes, sink 1 cathode.
Write next anode pattern, sink the next cathode.
Repeat 22 more times.
Advantage: less hardware needed, just 6 8-bit shift registers, part like TPIC6A595 (
www.avnet.com) for the cathodes can sink 350mA per output (higher if pulsed for short times, 100uS) so limit the anode current to 350ma/24 = 14mA. 74HC595 for the anodes, can't do 8x20mA anyway.
Disadvantage - less bright, with each column only on 1/24 of the time. High brightness LEDs are pretty darn bright tho, so that may be okay.
Example:
http://www.dipmicro.com/store/LED5W