PaulRB:
Its a myth that you are limited to one led (at any instant in time) with charlieplexing. You can light whole rows or columns at the same instant. Of course you then have the max current per pin issue just like you do with vanilla multiplexing, but you overcome that in similar way(s).
Excellent!
Perhaps I had better be careful of the combination of spending the afternoon lawn mowing, anticipating spending the next day (Saturday - ugh!) attending an all-day seminar on Pain Management as a CPD requirement, and preparing to drive 450-odd km on Sunday to be hospitalised the following Monday. :~
The use of emitter followers could be slightly troublesome driving white LEDs at 5V (clearly not practical at 3.3V) but they certainly should not require base resistors and have another substantial advantage - the collectors can be powered by a higher, unregulated supply voltage and their gain so considerably reduces the drive-high current (and consequently, the supply current requirement of the MCU in general) that the Voh loss becomes quite negligible, partially compensating for the Vbe of the transistor.