Voy a sugerirte que mires hacia los registros de desplazamiento en serie. Existe una gran variedad de dispositivos de este tipo: mencionaré dos números de pieza, pero hay un dispositivo de 16 canales diseñado específicamente para encender los LED, cuyo número de pieza no recuerdo.
La ventaja de usar registros de desplazamiento en serie es que puede generar una gran cantidad de salidas usando muy pocas líneas desde su controlador.
Las dos partes que uso muy a menudo son las 74hc595 & TPIC6595. La parte 74hc es un dispositivo CMOS estándar con salidas CMOS estándar. Es bueno para varios mA por salida y los uso para controlar los LED directamente (con una resistencia adecuada). El TPIC6595 es similar pero tiene salidas de hundimiento de drenaje abierto buenas para más de 100 mA a un máximo de 60 Vcc. Los uso para conducir relés.
Una de mis tarjetas tiene 4-74hc595 con todas las salidas que conducen los LEDs rojos T1 a través de resistencias 100R. La fuente de alimentación de LED es un conmutador simple que proporciona 4 Vcc, toda la lógica de la placa funciona a +5 Vcc. Otra placa tiene un par de registros de cambio TPIC6595 que controlan 16 relés.
Ambos dispositivos funcionan muy bien.
Un truco que debo mencionar es que puede tener varias cadenas de registros de desplazamiento para aumentar su ancho de banda. Cada cadena de registros de desplazamiento comparte el reloj y las líneas de retención, pero tiene líneas de datos separadas que controlan varias cadenas.
Este truco es útil cuando golpeas tus datos SPI. Por lo general, no es necesario si está utilizando un bloque de hardware SPI en su microcontrolador.