Hay tres formas comunes de abordar este tipo de problema.
1. Registros de desplazamiento
Como se ha señalado en los comentarios, el uso de registros de desplazamiento puede proporcionarle una gran cantidad de salidas utilizando solo un puñado de pines IO para microcontroladores. Hay disponibles registros de cambios de conducción de LED específicos que están diseñados para este tipo de cosas, como el STP16CP05. Hay otros más complejos, como el TLC5940 o el TLC59116, ambos de los cuales proporcionan PWM, pero pueden impedir la multiplexación de los LED a menos que tenga mucho cuidado.
Acoplar algunos registros de cambios "normales" (74HC595) con algunos MOSFET de canal P o transistores PNP adecuados como interruptores de lado alto para conducir las filas (ánodos), junto con un banco de registros de cambios STP16CP05 a medida que la columna se hunde (cátodos) podría lograrse utilizando solo tres pines en el microcontrolador (reloj, datos y enganche).
Para muchos LED, aunque esto se vuelve rápidamente bastante difícil para que el microcontrolador se actualice lo suficientemente rápido. Entonces:
2. Piensa modular
Ya ha creado una matriz de 8x8 con 16 pines de un microcontrolador. Entonces, ¿por qué no hacer lo mismo otra vez, varias veces? Pídales a todos que se comuniquen en un bus (SPI, I2C, etc.) y envíen instrucciones a cada módulo que le indiquen qué mostrar. Cada módulo individual es responsable de realizar la multiplexación y actualización de la imagen en su parte de la pantalla.
También hay chips dedicados diseñados para este propósito, como el MAX7219 que puede conducir directamente una matriz de 8x8 a través de una interfaz SPI.
3. LEDs inteligentes
Los LED, como el WS2812 y similares, se conectan en una cadena mediante un simple protocolo en serie. Puede conectar muchos cientos de estos LED juntos y, a menudo, vienen como tiras prefabricadas vendidas por el medidor. Estas son una excelente opción si desea crear una pantalla a todo color.