# ¿Cómo Crear un menú en un micro?



## Diederick (Mar 21, 2008)

Hola gente qué tal, sucede que estoy montando un programa sobre un PIC16F877 en el que necesito ofrecer diferentes alternativas para la visualización sobre unos displays 7 segmentos, por ejemplo: si oprimo la tecla A; que me muestre sobre los displays la hora....o si oprimo la tecla B; que me muestre la puntuación de un deporte....He estado probando con switch, con condiciones, con funciones, y ninguna me funciona porque cuando oprimo la opción sobre el teclado, el programa deja de ejecutarse, saben ustedes ¿Cómo Crear un menú en un micro?.

Agradezco su respuesta..

Un saludo


----------



## enigma_myvs (Mar 21, 2008)

Bueno, lo que tendrás que hacer es una rutina de condiciones; es decir, coloca pulsadores un teclado en uno de los puertos, y pon al programa a que chequee ese puerto constantemente; cada bit del puerto (depende de cuantos vayas a utilizar), representará una acciión; por ejemplo, Si el bit 0 del puerto B es 1, (eso quiere decir que apretaste A, por ejemplo) y entonces pues que muestre la hora; si el bit 1 es 1 (significa que apretaste la B) pues que muestre otra cosa, y así sucesivamente!

O simplemente con el teclado, y a cada momento lo estás encuestando para ver si presionaron algín número y de acuerdo a eso lo mandas a ejecutar la acción que quieras, como por ejemplo la visualización de la hora en los displays! espero haya servido!  

Atte: Enigma... La llanerita de Guayana


----------



## Diederick (Mar 21, 2008)

Gracias por la respuesta; lo que no tengo muy claro es si la solución que me ofreces es con pulsadores o con un teclado, porque recuerda que con un teclado ya no estaríamos hablando de un bit sino del juego de interrupciones que se dá de acuerdo al caracter que oprimo...

Un saludo....


----------



## macraig (Mar 21, 2008)

Si lo que quieres es ejecutar mas de una tarea a la vez sobre el microcontrolador, lo mas facil es usar interrupciones. En tu caso, al presionar una tecla, dispararias una interrupcion externa, que transfiera el flujo del programa a la rutina correspondiente, dependiendo de la tecla pulsada.

Es solo una sugerencia general, si explicas exactamente q hace tu circuito, tal vez pueda ser un poco mas especifico.


----------



## Diederick (Mar 22, 2008)

HOla macraig y quienes estén interesados en el tema; sucede que el programa debe visualizar sobre una LCD dos opciones para que el usuario seleccione qué es lo que desea, por ejemplo:

1.  Visualización de deporte 1 (deporte 1 es una rutina que visualiza sobre un juego de siete segmentos los marcadores).

2. Visualización de deporte 2(deporte 2 es una rutina que visualiza sobre un juego de siete segmentos los marcadores de un deporte totalmente diferente):

Qué crees que debo utilizar: pulsadores, switch o el teclado? cómo podría hacer las instrucciones porque lo he intentando y no ha salido.....

Agradezco tu respuesta


----------



## macraig (Mar 22, 2008)

pues cualquiera de esas opciones funciona, marcadores switch o teclado... Si solo quieres cambiar entre deporte 1 y deporte 2, un switch seria tal vez mas comodo para el usuario, o un unico pulsador... Si quieres ingresar datos, o un menu mas complicado, un conjunto de pulsadores, una combinacion switch pulsador o un teclado serian posibles...


----------



## Diederick (Jun 10, 2008)

HOla gente qué tal, he tratado de implementar un menú de opciones en picc para Lcd a través de un pic16f877, pero no he conseguido que la lcd visualice lo que tiene que visualizar con la opción dada (he intentado con funciones, y con switch) pero *el programa muestra el menú y ahí se queda, pareciera como si el micro o la lcd no reconocieran el dato que llega del teclado matricial...*

Si alguno de ustedes ha implementado un menú de este tipo en C le agradecería la asesoría porque he intentado y no me funciona por ningún lado...

Un saludo...[/b]


----------



## Airoa Airon (Jun 10, 2008)

Yo hice este si te interesa alguna rutina de ahi dime.
Funciones:
Alarma, contraseña, juego del 777, tonos, piano, calculadora, resuelve sistemas de ecuaciones de 2x2, 3x3 y 4x4

YouTube - Proyecto Lcd 2.0 con teclado.

Esta es la de teclado, tienes que definir r1,r2,r3 y r4 antes de poder usarla, usa el puerto e y el puerto X donde definas r pero puede ser fácilmente modificada


```
int keypad(int time)
{
   
  output_e(0x01); 
  
     if (input (r1))
        {        
        delay_ms(time);
        return 1;}
        
     if (input (r2))
        {        
        delay_ms(time);
        return 4;}

     if (input (r3))
        {
        delay_ms(time);
        return 7;}

     if (input (r4))
        {    
        delay_ms(time);
        return 10;}
  output_e(0x02);       
 
     if (input (r1))
        {              
        delay_ms(time);
        return 2;}
     if (input (r2))
        {            
       delay_ms(time);
        return 5;}
     if (input (r3))
        { 
         delay_ms(time);
        return 8;}
     if (input (r4))
        {
      delay_ms(time);
        return 11;}
  output_e(0x04);
  
     if (input (r1))
        {  
        delay_ms(time);
        return 3;}
     if (input (r2))
        {
        delay_ms(time);
        return 6;}
     if (input (r3))
        {      
        delay_ms(time);
        return 9;}
     if (input (r4))
     {
        delay_ms(time);
        return 12;}
        
        return 0;
        }
```


----------



## Diederick (Jun 10, 2008)

OYe gracias por la respuesta, hay algo que no tengo muy claro...tu utilizas pulsadores como entradas?


----------



## Airoa Airon (Jun 11, 2008)

Si uso una matriz de botones de 3x4. Cuando quiero obtener algun valor solo le pongo


```
switch(keypad())
{
case 1:
lcd_putc("\fxxxxxx");
lcd_putc("\nxxxxxx");
case 2:
etc..
}
```

si te interesa te puedo pasar la funcion de la barrita de progreso  puedes elegir el tiempo de duracion y el renglon donde aparece.


----------



## Airoa Airon (Jun 16, 2008)

Aqui les dejo el codigo


----------



## Fierros (Jun 16, 2008)

La verdad Demasiado ingenioso eso.. 10 puntos... te mereces hacer alguna maquina como para ofrecer para vender o no? masomenos a los chicos.. por ejemplo lo del piano como para que lo guarden tambien lo de los juegos puedes agregar mas.. si es que puedes.. que mas podrias....... aver, lo que puedes hacer es poner un tetris pero con un lcd mas grande 
un monton de cosas podes hacer si lograstes hacer eso.. te felicito de nuevo por el programa y lo que haz logrado, un saludo enorme y gracias por el aporte


----------



## DARKEASC (Jun 16, 2008)

Buenas pues, yo ya lo había hecho era con un 18f4550 en assember... pero, según veo aquí están usando C, quisiera saber donde puedo encontrar un buen tutorial de C para micros, C lo he usado con el Motorola Gp32 pero quiero usar C en el 18f4550, podrían ayudarme?


----------



## mxgh (Jul 9, 2008)

hola, tengo algo de tiempo manejando el PIC, ya me pase a la seria 18Fx550, pero bueno si te es de utilidad de dire algo que hice en mis primeras pruebas en borland C, la comparacion en buena por que era en modo texto, algo muy usual en display, por cierto te recomiento usar un display LCD de caracteres 16X2 o alguno asi, solo usas 7 lineas en el mejor de los casos, con displays de 7 segmentos, tienes que contar 7 segmentos y un anodo por cada digito (eso si usas multiplexacion)..NO..mejor LCD grafico...el driver de Hitachi es el mas comun y son baratos...y con respecto a los menus pues tienes que usar la interrupcion externa del micro.....tu diseñas tu sistema de pantallas, te recomiendo que uses algun compilador en C, el sourceboost  BoostC esta genial......haces  tu funcion que imprima la pantalla 1, al 2, la 3, la 4 etc. cuando pulsas tu boton conectado al bit de interrupcion tu codigo te manda a una funcion que el el 'handler' de la interrupcion, limpia las banderas y eso y en ese momento mandas llamar la funcion que imprime tu pantalla de menu, puedes poner una variable globlal que se incremente y ponerle ese numero como argumento a tu funcion de la pantalla y estarias cambiando de pantalla. yo mismo hice eso que tu quieres hacer en un 16F628, por aquello de la memoria....era un reloj de tiempo real con alarma y cronometro...parecia un reloj de pulsera tamaño king kong, cualquier duda te puedo ayudar....solo  trabajo y estudio...jejeje.


----------



## Juvenal (Jun 30, 2009)

Hola, justo esto estaba buscando , estoy aprendiendo a programar con el pic 18f4550, pero ese proyecto de la alarma funcionaria para este 18f4550, o tengo que cambiarle algo?, de ser asi que es lo que tengo que cambiar.
muchas gracias por el post, y gracias por la respuesta de antemano


----------



## churin (Ago 26, 2012)

Airoa Airon dijo:


> Aqui les dejo el codigo


Gracias!!! pero tengo una duda tu creaste tus librerias para que funcione ese código???


----------

