Te explico.
La metodología que he seguido para hallar las funciones es la misma que se usa para diseñar máquinas de estados finitos con biestables,es decir con dispositivos físicos.
Partimos de la cantidad de estados que va a tener la máquina,en nuestro caso 3,por lo que podemos codificarlos con 2 bits:
MENU -> le damos la codificación 00 (q0,q1)
Submenu 1 -> 01 (q0,q1)
Submenu 2 -> 11 (q0,q1)
Bien,a partir de esto,tenemos las variables q0 y q1,que dependiendo del valor que tengan,estaremos en un estado u otro.
También tenemos las entradas,que son dos (me y av),correspondientes a cada uno de los pulsadores.
Pues ya tenemos las 4 variables que determinarán el funcionamiento de la máquina.La transición de un estado actual a un posible próximo estado no dependerá sólo de las variables de entrada,si no también de las variables q0 y q1,es decir,de cúal sea el estado actual.Esto se hace patente si imaginamos que la máquina se encuentra en el estado (q0=0,q1=0)->(MENU->00) y pulsamos la tecla "avanzar"(av=1).No ocurre nada(o mejor dicho,hace una transición al mismo estado).Pero si se da esa misma entrada en un momento en en el que la máquina se encuentra en el estado (q0=0,q1=1)->(Submenu 1->01),se producirá una transición al estado Submenu 2 (11).
Lo que hay que buscar son las funciones que modificarán los valores de las variables de estado (q0,q1,q2,q3,...qn),en función de ellas mismas y de las variables de entrada.
Lo primero sería hacer un diagrama de estados,con todos los estados,unidos entre sí por todas las posibles transiciones que se puedan dar(flechas) cada una de las cuales etiquetada con la entrada que provoca dicha transición.Después se pasa todo eso a una tabla:
Codigo:
MENU = 00
Submenu1 = 01
Submenu2 = 11
___________________________
|ESTADO | ENTRADAS(me,av) |
| q0,q1 | 00 | 01 | 11 | 10 |
|_______|____|____|____|____|
| | | | | |
MENU | 0 0 | -- | 01 | 00 | 00 |
|_______|____|____|____|____|
| | | | | |
Submenu1 | 0 1 | -- | 00 | 01 | 11 |
|_______|____|____|____|____|
| | | | | |
Submenu2 | 1 1 | -- | 00 | 11 | 01 |
|_______|____|____|____|____|
Las casillas de la izquierda representan el estado actual,y las demás representan el estado siguiente que se dará a partir de ese estado actual si se dan las entradas según la tabla.
A partir de aquí se construyen los mapas de karnaugh,uno para cada variable de estado,es decir,uno para q0 y otro para q1.Estos mapas se rellenan con el bit correspondiente a la función que estamos calculando,es decir,si estamos haciendo el mapa de q0,cogeremos de la tabla anterior los valores de q0:
Codigo:
me,av
00 01 11 10
q0,q1 \_________________
| | | | |
00 | X | 0 | 0 | 0 |
|___|___|___|___|
| | | | |
01 | X | 0 | 0 | 1 |
|___|___|___|___|
| | | | |
11 | X | 0 | 1 | 0 |
|___|___|___|___|
| | | | |
10 | X | X | X | X |
|___|___|___|___|
q0 = ((!q0) & q1 & (!av)) | q0 & me & av;
Y lo mismo para q1:
Codigo:
me,av
00 01 11 10
q0,q1 \_________________
| | | | |
00 | X | 1 | 0 | 0 |
|___|___|___|___|
| | | | |
01 | X | 0 | 1 | 1 |
|___|___|___|___|
| | | | |
11 | X | 0 | 1 | 1 |
|___|___|___|___|
| | | | |
10 | X | X | X | X |
|___|___|___|___|
q1 = ((!q1) | me | (!av)) & ((!me) | q1);