El truco con matrices de teclado como esta es el hecho de que las salidas pueden (en la mayoría de los microcontroladores) estar en tres estados posibles: ALTA, BAJA y Alta impedancia (Hi-Z).
Cuando una salida está en modo Hi-Z, se desconecta de manera efectiva.
Entonces, al establecer tres de las salidas en Hi-Z y la cuarta salida en LOW, y al tener las cuatro entradas levantadas a través de las resistencias, al presionar un botón se conecta esa entrada a una señal LOW.
En efecto, la salida actualmente activada (LOW conducido) se convierte en la conexión a tierra para un botón desplegado estándar.
Al hacer un ciclo a través del cual la salida desempeña el papel del terreno, puede tener cualquier número de botones adjuntos a sus entradas.
Es más simple pensar en cada una de las salidas como un cambio a tierra. Trabaja con una sola entrada por ahora, y puedes tener una idea de cómo funciona:
simular este circuito : esquema creado usando CircuitLab
En ese ejemplo, las salidas 1, 3 y 4 son Hi-Z. La salida 2 es BAJA. Ahora puede ver que presionar los botones 1, 3 o 4 no hará nada ya que el interruptor (salida) que los conecta a tierra está abierto. Presionando el botón 2 tirará de la entrada BAJA, registrando un botón presionando.
Ahora simplemente multiplica ese circuito 4 veces, una para cada entrada, y ahí está tu matriz.
También puedes subir todo hacia arriba - usa una resistencia desplegable y controla cada entrada en ALTO en lugar de BAJA - de esa manera las entradas registrarán un ALTO para activo. No hace ninguna diferencia real en qué sentido se hace. Sin embargo, la manera más común de realizar pull-ups y salidas de conducción LOW es que las MCU suelen tener resistencias pullup integradas y la capacidad de seleccionar salidas de apertura drenada que cambian entre LOW y Hi-Z mucho más fácilmente.