Tiene un par de problemas con los que lidiar cuando alimenta un interruptor físico en un circuito como este.
El primero es cambiar de rebote. Cuando cierra (o abre) un interruptor, no puede depender de obtener una única transición limpia de baja a alta (o viceversa). Más bien, a medida que el interruptor se cierre, en realidad pasará de bajo a alto y de nuevo a bajo durante algún tiempo, en el orden de milisegundos aproximadamente. Entonces, lo que normalmente quiere hacer es tan pronto como ve un pulso desde el interruptor, establece un tiempo de espera e ignora todas las entradas de ese interruptor durante los próximos milisegundos aproximadamente (el tiempo exacto rara vez importa mucho).
En segundo lugar, tienes un problema de metastabilidad. Dado que el interruptor es asíncrono a su circuito, no necesariamente cumple con los tiempos de configuración y retención requeridos por sus flip flops. Para evitar que esto cause un problema, normalmente querrá ejecutarlo a través de un circuito sincronizador, que generalmente consiste en un par de flip flops:
simular este circuito : esquema creado usando CircuitLab
En teoría, incluso con esto, podría encontrarse con un problema de metastabilidad, pero las posibilidades se reducen a un nivel que suele ser bastante aceptable (nota: esta no es la única manera de lidiar con problemas de metastabilidad: si miras a tu alrededor, encontrarás otros).