La Web del Programador: Comunidad de Programadores
 
    Pregunta:  36146 - CREACION DE UN MENU
Autor:  Quique Castro
Para aplicacion sobre un microcontrolador, pero me vale cualquier estandar que haya para ello. Se trata de crear un modulo, que maneja menus navegables semejantes a los de un telefono movil sobre un display, que tiene que ser capaz de salir del modulo para realizar otras tareas cualesquiera y sea capaz de volver a la parte del modulo o bucle donde estaba sin perder la posicion de menu en la que estaba y que además, sea facil la inclusion o exclusion de nuevos menus (y submenus). Comprendo la dificultad de mi duda, pero hasta ahora no encuentro ninguna referencia a como abordar este problema.
Muy agradecido.

  Respuesta:  Juan Manuel Mar
Que tal:

Bueno yo hice un menú bastante genérico pero en c++ (borland), que no se si te sirve pero igual y te da una idea.
Lo que hice fue poner un ciclo, concretamente con el do...while, mientras no presionara enter, lo que hice fue mostrar las posibles opciones a elijir, ya sabes, 1.- opcion 1, 2.- opcion 2, etc y usando las funciones del bios para leer el estado del teclado determinas que tecla se presiono, si fue por ejemplo ARRIBA pues pones una bandera indicando el nuevo valor seleccionado y hacer es que se repita el ciclo pero marcas esa opcion, ABAJO lo mismo, repites el ciclo (borra la pantalla cada vez que repitas el ciclo para evitar que se empalme todo) y marcas la opcion bajo la actual, si son numeros pues lo mismo, marcas la opcion señalada y hay te la llevas, si no es nada (tecla válida) la ignoras, ahí vas a estar dando vueltas mientras no elijas nada, claro que sería conveniente que cada vez que marques algo lo pongas en una variable para recuperarlo posteriormente y hacer algo con esa opción.

  Respuesta:  Javier R
Hola!! La creación de un menú en ensamblador es bastante laboriosa, pero muy gratificante. Lo que tienes que hacer primero es manejar una tabla de estados y un registro de estado, todo ello bajo una máquina de estados. Cada estado en tu tabla tendrá un número (el cual será manejado en el registro de estado), y dependiendo de qué tecla se pulsó vas a ir a ese estado; cómo se hace la bifurcación depende del micro que estés usando, yo lo hice en un COP8SGR de National Semiconductor(manejé 4 teclas y 25estados). Por ejemplo, vamos a manejar 3 estados y 2 teclas, y obviamente lo vas a poder expandir:

Estado Acción Botón A Acción Botón B
0 Inicio Apagar
1 Configurar Entrar clave
2 Transmitir Recibir

al inicio de tu código debes hacer el registro de estado (RE)

RE = 0

para que apunte al primer estado,

luego creas dos tablas (o una para cada tecla)

Tabla A
0 Inicio
1 Configurar
2 Transmitir

Tabla B
0 Apagar
1 Entrar clave
2 Recibir

Después de decodificar el estado del teclado, si la tecla presionada fue
la A entonces te vas a la tabla A, y según RE te vas al estado al cual apunte, en este caso a Inicio. Dentro de Inicio haces RE=al siguiente estado que quieras que tome, p.ej RE=1, así la siguiente ves que entres a la tabla A irá al estado 1, y así sucesivamente, y lo mismo con la otra tabla, y con cuantas tablas quieras, NO ES TAN DIFICIL. Get fun