Yo en C hago los menús con un "switch" dentro de un while, antes de este lee la variable de donde provenga (por ejemplo un teclado matricial) y así siempre hasta que pulse alguna tecla y salga como si fuese una "bandera", un ejemplo (el menú se mueve con el mando a distancia de la TV, 1 y 2 y el 0 para salir).
Codigo:
//***********************************************
//* RaDoN-Bot 877
//* Por Daniel G - by RaDoN (8/8/05)
//* *********************************************
#include <16f877.h>
#fuses NOLVP,XT,NOWDT,NOPROTECT,PUT
#use delay(clock=4000000)
#include "LCD.C"
//#include "24256.C"
#ORG 0x1F00,0x1FFF {} //for the 8k 16F876/7 bootloader
//#use fast_io(A)
//#use fast_io(B)
//#use fast_io(C)
//#use fast_io(D)
#byte port_a = 5
#byte port_b = 6
#byte port_c = 7
int x, menu=1;
void zumbador(int x)
{
output_bit(PIN_C5,1);
delay_ms(x);
output_bit(PIN_C5,0);
}
int rc5(void) {
int i, x = 0;
while(input(PIN_B6) == 1);
delay_us(444);
for(i=0;i<=7;++i) {
delay_us(1778);} // nos saltamos los bit de start, toggle y sistema (8bits)
for(i=0;i<=5;++i) {
x = x + input(PIN_B6);
if(i != 5) x = x * 2;
delay_us(1778);}
delay_ms(139); // tiempo para repeticiones entre tramas
return x; }
void main(void)
{
lcd_init();
printf(lcd_putc,"fDany-Bot 877
");
while(menu != 0)
{
menu = rc5();
switch(menu)
{
case 1: lcd_gotoxy(1,2);
printf(lcd_putc,"menu 1");
break;
case 2: lcd_gotoxy(1,2);
printf(lcd_putc,"menu 2");
break;
case 0: lcd_gotoxy(1,2);
printf(lcd_putc,"Saliendo...");
delay_ms(1000);
break;
}
}
zumbador(10);
}
Si alguien lo hace de otra forma en C me gustaria que lo comentaran para conocer nuevas formas :]