Many of my projects involve some sort of LED display; RBG, bi-color, numeric, etc... The current project needed several go/no-go indicators, and bi-color LEDs seemed the most appropriate. As I was running short on I/O pins, I began looking for another solution that didn't require additional hardware. What I found was the Charlieplex method, which I had never heard of before. n I/O pins can control n(n-1) LEDs, so for my 8 LED array, the pin count is 4, but I could control 12 LEDs with those same for pins if needed.
Now, to be fair, there are some serious drawbacks to the method. First, you can't light more than 1 LED at a time, although cycling through them quickly can overcome that limitation fairly easily. The second (and perhaps more serious) limitation pertains to the failure mode of the array. The failure of a single LED (open or short) can result in the unintended lighting of other LEDs in the array, making diagnosing the failed component difficult at best.
I probably wouldn't use it on a commercial device, but for homebrewing, Charlieplexing might do the trick when you're running out of I/O pins to drive LEDs.
-DK
Charlie-plexing
There are a few app notes from Microchip that list numerous unconventional methods to stretch the capabilities of the hardware. While some are specific to Microchip's PICs, many are equally applicable to AVRs. Search using Microchip Tips Tricks. I think this is the biggest one... http://ww1.microchip.com/downloads/en/D ... 01146B.pdf