Recomiendo abstraer las cosas primero:
- Tienes tres estados (dos bits son suficientes para representar eso). La salida es de tres LEDs. Puede inferir directamente qué LED deberían estar encendidos desde el estado.
- Sabes sobre puertas lógicas (AND, OR, NAND y así sucesivamente). Por lo tanto, sabe cómo tener dos entradas (los dos bits del estado) y tres salidas (LED). Si eso no está claro, dibuje una tabla de verdad y encuentre los términos mínimos necesarios para encender los LED correctos.
- El siguiente estado solo depende del estado actual + un bit (es decir, cuál de los dos botones se presionó).
Entonces, lo que necesitas es un
- dos flipflops para almacenar el estado
- Puertas lógicas para iluminar los LED correspondientes a los dos bits de estado
- Puertas lógicas para determinar el siguiente estado según el estado actual + el botón que se presionó
- una entrada de "reloj" que dice "ok, ahora evalúa la lógica de transición de estado y pasa al siguiente estado".
Vamos a enrollarlo desde la parte inferior:
El reloj es el más fácil. Simplemente use una compuerta OR en ambos botones. Cuando se haya presionado uno de los botones, la siguiente transición de estado debe cargarse en los fliflops:
+ button \
OR ---> Latch of flipflops
- button /
La lógica del LED también es fácil: por ejemplo, suponga que la estadística interna 00
es su estado inicial. Así que solo construye una compuerta NOR en el estado inicial que ilumina el LED central. Lo haces para todos los LEDs.
La lógica del "siguiente estado" también es fácil: solo tiene la misma lógica que para los LED, pero con el botón derecho para obtener el siguiente estado interno.