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

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
 
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
 
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....
 
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.
 
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
 
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...
 
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]
 
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

Código:
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;
        }
 
Si uso una matriz de botones de 3x4. Cuando quiero obtener algun valor solo le pongo

Código:
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.
 
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 ;)
 
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?
 
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.
 

Adjuntos

  • and_lcd_117.pdf
    318.9 KB · Visitas: 410
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
 
Atrás
Arriba