Supondré que desea controlar el ánodo común de la matriz, es decir, una línea de ánodo a la vez.
Ya mencionó los transistores para los ánodos, y eso es correcto, los necesitará porque tendrá que suministrar corriente para hasta 9 LED a la vez, y eso es demasiado para un IC lógico como un cambio de 74HC595 registro. Eso será 9 transistores PNP.
Pero también necesitarás transistores para los cátodos; desea controlar hasta 9 salidas bajas simultáneamente, y a 20 mA por LED (un valor típico) es demasiado para un 74HC595. Eso es 9 transistores NPN.
Tienes que controlar 18 líneas, por lo que puedes usar tres 74HC595 para eso, donde cambias en 18 bits para cada fila de exploración: 9 bits para seleccionar la línea del ánodo, que es 1 bit bajo, el resto alto y 9 bits para los cátodos, alto para encendido, bajo para apagado.
La buena noticia es que no necesita un registro de desplazamiento separado para los botones: conecte cada uno de ellos a una línea de ánodo, con los otros pines unidos a una entrada, y conecte una resistencia desplegable en esa entrada .
Ahora, cada vez que escanea una línea de ánodo puede ver en la entrada si se presiona el botón de esa línea; entrada alta = presionada, entrada baja = liberada.
Si espera que los usuarios presionen dos botones a la vez (¡siempre lo harán!) Tendrá que poner diodos en serie con los botones para evitar que se enciendan otras filas de LED que la seleccionada.
editar re tu comentario
En su boceto tiene las resistencias de los LED en las columnas, lo cual está bien si conduce. la pantalla muestra una fila a la vez. De lo contrario, la resistencia compartirá la corriente de todos los LED en una fila, y el brillo variará con
el número de LEDs que están encendidos. En mi esquema a continuación, los moví a las filas, de modo que cada LED tenga su propia resistencia.
Los círculos representan los LEDs. La entrada del microcontrolador será bajada por la resistencia. Si se presiona uno de los botones, la entrada será alta cuando se seleccione la columna asociada. Así que en cada escaneo de columna puede verificar el estado de un botón. Los diodos evitan la iluminación de los LED en otras columnas que no sean la activa si se presiona más de un botón simultáneamente.