Controlling 20 leds and additional things ?

Short version :
How can I control 20 leds in a binary clock without them blinking or dimming with enough space to add buttons and speakers etc with Arduino Duemilanove ?

Long story:
So, I'm building a binary clock, built the first version using this schematic - Project Potpourri: Your Favorite Geek Desk Toy Sucks , except I have tens of seconds/minutes/hours too.

It works well, but as I am currently addressing the leds in X/Y coordinates, blinking them one at a time, the more leds there are, the shorter the blink and dimmer the led.
To reduce the dimming and blinking, controlling each led individually would be best, but as would like to add buttons to change the time, and maybe make it an alarm clock, I can't use all the I/O pins for the leds.

I thought I could separate the minutes, hours and seconds so change in seconds wouldn't dim the others, but that would still use way too many pins.

I guess I need some additional chips, but I have no idea what would work.

Charlieplexing would get you 20 LEDs with just 5 pins.
Dim LEDs could be tricky though.

Well, it wouldn't matter if they all would dim equally, but as it is always relative to the amount of leds 'currently lit' (blinking), the change once a second is irritating.

Charlieplexing would be nice if I dropped the seconds display, but then it would look too boring...

I'm building a binary clock,

I've got six LEDs for the seconds, six for the minutes and four (or five if you're 24 hour) for the hours - what are you using the other four LEDs for?

By having ten hours / ten minutes / ten seconds separate.

Oh, you mean a BCD clock! :sunglasses:

If you use a MCP23016 this will give you 16 outputs on the I2C line. You can use these along with other arduino outputs or use two of them to give you an extra 32 I/O pins.