Use 5 shift registers - 3 to make the 24 bits, and 2 to make the 16 bits.
What I did was out put the array in memory, and every 500uS read out the anode info, turn off the current cathode, write out the anodes, and turn the next cathode on.Then during the 500uS, read the serial port, buttons, do math, whatever to update the array as needed.
For a first matrix I really would recommend the MAX7219 chip for simplicity as it deals with all the scanning for you.[/url] and attached is the schematic I did for my first arduino project. I would use a 10uF/100nF per chip if your driving 6 of them.
Looks like a good start. Hard to tell which are anodes & which are cathodes.
Seems like you'd be taking on a lot of hassle to save 2 parts.
Premature optimization is the root of all evil. - Donald Knuth
QuotePremature optimization is the root of all evil. - Donald Knuth
why not try to push the MCU to it's limits
Beside the display, you may need your MCU to perform other operations, like reading buttons, getting time from RTC etc. If the MCU is busy most of the time with the display, it may look unresponsive to the user.