If you have Port pins available, Charlieplexing is making things needlessly complicated, both in terms of lay out and code. There are numerous places for errors to creep in.
If this was my project and I was worried about port pins, I would use an I2C port expander chip like the MCP23017, 16 bits and nothing to worry about except when you need to change which LEDs are illuminated. But I'll be the first to admit, I'm a lazy programmer - I would much rather farm off multiplexing to a dedicated chip so I don't have to keep those plates spinning while my code is trying to do other stuff. If I was trying to squeeze every penny out of the BOM because I was making hundreds of them I would take on the added complexity to save a buck.
An alternative to the MCP23917 is the **broken link removed**. This chip is a 16 channel constant current LED driver with a serial shift-register type interface. It's in an easy-to-use DIP24 package and since a it's constant current, no LED resistors are required. A possible down side is that all the LEDs will be driven by the same current, which could be an issue with keeping constant brightness levels with different color LEDs.