uControl
Mayo 25, 2013, 06:38:56 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1] 2   Ir Abajo
  Imprimir  
Autor Tema: Tomar tiempo entre tecla y tecla  (Leído 1416 veces)
0 Usuarios y 1 Visitante están viendo este tema.
darck_khronos
PIC16F
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 670

Khronoscorp Systems


« : Mayo 19, 2012, 11:38:15 »

Como ultimamente no he programado nada, me dia la tarea de regresar con CCs y programar un pequeño teclado, ya despues de un rato si es necesario repasar todo, ahora me di con el siguiente problema.

Estoy utilizando un teclado de 4x4 y me gustaria contar el tiempo que transcurre entre tecla y tecla o por lo menos si llegaran a pasar mas de 4 segundos que realize alguna otra operacion.

Ahorita estaba intentando con un simple contador como se muestra en el siguiente codigo:

Código:
   do {
       do{               
          c=kbd_getc();
          lcd_gotoxy(9,1);
          printf(lcd_putc,"%5d",b);
          b++;
          delay_ms(100);
          if(b==400)
           {
            c=0;
            b=0;
           }
         }while(c==0);
        lcd_gotoxy(1,2);
        printf(lcd_putc,"%c num %d",c,a);
        a++;
   } while (TRUE);
La otra que podria utilizar es el timer ya lo tengo incluso calculado, mas que no recuerdo como activarlo (que problema no jeje  Idiota)
En línea
jukinch
Amigo de uControl
PIC12F
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 108



« Respuesta #1 : Mayo 19, 2012, 11:45:47 »

darck_khronos:
                 encontré este ejemplo.
                  Saludos.
                    Jukinch

Código:
#include <16f876.h>
#fuses XT,NOWDT
#use delay(clock=4000000)
#use standard_io(b)

int1 cont=0;

#int_TIMER1         //Interrupción por Timer1
void temp1s(void)   //Función
{
  if (cont==1)  output_toggle(PIN_B1);   //Cada 2 interrupciones de 0.5s   
  set_timer1 (3036);                     //recarga del Timer
  cont++;
  }

main ()
{
 setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);
 set_timer1 (3036);                          //recarga del Timer1
 enable_interrupts(INT_TIMER1);             
 enable_interrupts(global);               
 
 while(1);
}

En línea
darck_khronos
PIC16F
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 670

Khronoscorp Systems


« Respuesta #2 : Mayo 22, 2012, 07:28:19 »

Dentro de lo mismo alguien podria explicarme como funciona este Continue y el Break dentro del if

Código:
if(c=='#' || c=='*'){
         if(i==0){         
            i=-1;
           [b] continue;[/b]
            }         
         if(i!=limit) 
            var=1;
        [b] break; [/b]       
         }

En línea
вoяяe
.::. µPraxis .::.
Amigo de uControl
PIC18F
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1239


Pяobando C30


WWW
« Respuesta #3 : Mayo 22, 2012, 07:32:28 »

Ando corto de tiempo, espero te sirva de algo:

Continue y Break

Saludos!!  bang
En línea

La electrónica es simple, puedes aprenderla en 100 simples lecciones, una lección cada año.
darck_khronos
PIC16F
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 670

Khronoscorp Systems


« Respuesta #4 : Mayo 28, 2012, 12:47:30 »

me salio una nueva duda, mediante el timer1 estoy realizando una interrupcion cada 500ms mi pregunta es la siguiente

tengo un getc anidado con otro getc, si me llega a ganar la interrupcion me manda al primer getc y no me deja esperando en el segundo ??
En línea
E_Blue
PIC24F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 2135


Electric Blue


« Respuesta #5 : Mayo 28, 2012, 01:01:52 »

¿Cual sería el proposito de anidar dos getc?  Huh?
En línea

Procesando...
Si escribes para la (censurado) solo ella va a leerte.

Si quieres ayuda con tu proyecto recuerda agregar información del mismo, y no seas haragán y esperes tener todo servido, esto es un foro, no una bolsa de trabajo.
darck_khronos
PIC16F
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 670

Khronoscorp Systems


« Respuesta #6 : Mayo 28, 2012, 01:03:32 »

estoy realizando un menu, pero les muesto mi codigo

Código:
#include <16f88.h>
#use delay(clock=8M)
#fuses NOWDT,NOPUT,PROTECT,MCLR,INTRC_IO
#use standard_io (a)
#use standard_io (b)
#use rs232(baud=9600,FORCE_SW,parity=N,xmit=PIN_a3,bits=8)
#define LCD_E     PIN_A0
#define LCD_CK    PIN_A1   
#define LCD_DAT   PIN_A2
#define use_portb_kbd TRUE
#include  "lcd3.c"
#include  "kbd_lib.c"

char x;
int dmin=0,umin=0,dseg=0,useg=0,floc=0,fvis=0;
int dgl=0,ugl=0,dgv=0,ugv=0,per=0;
int in=0x1b,fin=0x0D,chion=0x01,chioff=0x00;
int glocal=0,gvisita=0,minutos=0,segundos=0,cmax=10;
int1 cont=0,clockon=0;

void tecla(void);
void clock(void);
void local(void);
void neglocal (void);

#int_TIMER1         //Interrupción por Timer1
void temp1s(void)   //Función
{
  if (cont==1)
   {
     if (clockon==1)
     {
       clock();
       printf("%c%c%c%c:%c%c%c",in,dmin+48,umin+48,chion,dseg+48,useg+48,fin);
       lcd_gotoxy(1,2);
       printf(lcd_putc,"%c%c:%c%c",dmin+48,umin+48,dseg+48,useg+48);
     }
   }
  set_timer1 (3036);                     //recarga del Timer
  cont++;
}
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);
set_timer1 (3036);                          //recarga del Timer1
enable_interrupts(INT_TIMER1);             
enable_interrupts(global);
lcd_init();
lcd_putc("   Khronos");
   for(;;)
   { 
   inicio:
      tecla();
         switch(x)
            {
              case '1' :
               lcd_gotoxy(1,1);
               printf(lcd_putc,"\f  Cuenta Maxima");
               lcd_gotoxy(1,2);
               printf(lcd_putc,"%d A+ B- C Enter",cmax);
               for(;;)
                   {
                     tecla();
                     switch(x)
                        {
                         case 'A' :
                         lcd_gotoxy(1,2);
                         printf(lcd_putc,"\f%d ",cmax++);
                           break;
                         case 'B' :
                         lcd_gotoxy(1,2);
                         printf(lcd_putc,"\f%d ",cmax--);
                           break;
                         case 'C' :
                          goto inicio;
                           break;
                        }
                        break;
                   }
              case '2' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
               clockon++;
                  break;
              case '3' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
               local();
               lcd_gotoxy(13,2);
               printf(lcd_putc,"%c%c",dgl+48,ugl+48);
                  break;
              case '4' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
               neglocal();
               lcd_gotoxy(13,2);
               printf(lcd_putc,"%c%c",dgl+48,ugl+48);
                  break;
              case '5' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
              case '6' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
              case '7' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
              case '8' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
              case '9' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
              case 'A' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
              case 'B' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
              case 'C' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
              case 'D' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
              case '0' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
              case '*' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
              case '#' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
            }
   }
}
void tecla(void)
 {
  do{x=kbd_getc();}while(x==0);
 }
void clock(void)
{
 segundos++;
  if (minutos==cmax)
   minutos=0;
  if (segundos==60)
   {
    segundos=0;
    minutos++;
   }
  dmin=minutos/10;
  umin=minutos%10;
  dseg=segundos/10;
  useg=segundos%10;
}

void local(void)
{
 if (glocal==99)
  glocal=0;
 else
  glocal++;
 dgl=glocal/10;
 ugl=glocal%10;
}

void neglocal(void)
{
 if (glocal==0)
  glocal=99;
 else
  glocal--;
 dgl=glocal/10;
 ugl=glocal%10;
}
En línea
darck_khronos
PIC16F
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 670

Khronoscorp Systems


« Respuesta #7 : Mayo 28, 2012, 01:15:37 »

ya me di cuenta que sin importar la interrupcion esta si me deja en el segundo kbd_getc(); , lo que no logro es que me respete el for que esta dentro del switch alguna idea?
En línea
VelazquezBio
"...La Felicidad solo es completa, cuando es compartida..."
Amigo de uControl
PIC18F
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1455


Alea Iacta Est...


« Respuesta #8 : Mayo 28, 2012, 01:55:20 »

Hola en que lenguaje estas programando?

EDIT: Estoy un poco dormido...  Tongue el hilo esta en... uControl > Programación de Microcontroladores > CCS, SDCC, C18, C30 y otros "C".

Mi humilde opinión, me parece que el programa es un poco rigido. Quiero decir que lo veo poco claro.

Veo que el teclado que utilizas es de este tipo, sumando la columna A B C D.



Que funcionalidad le quieres dar?

Saludos!
« Última modificación: Mayo 28, 2012, 02:05:12 por VelazquezBio » En línea

No será fácil y no sera corto el camino, pero se que seré feliz mientras lo transite.
el_vpi
Moderador
PIC18F
*****
Desconectado Desconectado

Mensajes: 1122



« Respuesta #9 : Mayo 28, 2012, 09:10:29 »

Hola darck_khronos, lo mire muy por arriba, pero lo primero que trataria de hacer es achicar todo lo de la interrupcion del timer. Esos 2 printf's no me convencen.
Trataria de poner un flag y procesarlo dentro del main.
En línea
darck_khronos
PIC16F
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 670

Khronoscorp Systems


« Respuesta #10 : Mayo 28, 2012, 01:53:54 »

Estoy programando en CCs, lo que estoy utilizando es un teclado asi


Estoy utilizando el timer1 para realizar contenos de 1 segundo, cada vez que el contador llegue a 1 este mandara por rs232 las variables de minutos, segundos todas divididad en decenas y unidades.

Con el teclado lo que estoy haciendo es que cuando precione el caracter '1'  me muestra lo que hay en contmax que en este caso con 10, pero tambien me da la opcion de querer ya sea incrementar o decrementar o salir a la pantalla principal.

mi problema es que en el for dentro de el caso '1' no me lo respeta aqui preciono una tecla y despues de ello me manda directamente al princial.

La idea es generar un cronometro el cual cuando llegue a un tiempo ya predefinido el relog se quede frenado, aun que tambien necesito realizar un conteo rapido cuando este llegue a 10 segundos donde se muestren las centesimas de segundo pero creo que en este caso tendre que jugar con el timer1 nuevamente
En línea
VelazquezBio
"...La Felicidad solo es completa, cuando es compartida..."
Amigo de uControl
PIC18F
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1455


Alea Iacta Est...


« Respuesta #11 : Mayo 28, 2012, 02:23:37 »

Hola darck_khronos, lo mire muy por arriba, pero lo primero que trataria de hacer es achicar todo lo de la interrupcion del timer. Esos 2 printf's no me convencen.
Trataria de poner un flag y procesarlo dentro del main.

Estoy de acuerdo con lo que dice el_vpi. No es conveniente llamar a otra función dentro de la interrupción. Podrias definir una variable global como int8 o int1 flag=0.
y dejar asi la interrupción.

Código:
#int_TIMER1         //Interrupción por Timer1
void temp1s(void)   //Función
{
  if (cont==1)
   {
     if (clockon==1)
     {
       flag=1;
     }
   }
  set_timer1 (3036);                     //recarga del Timer
  cont++;
}

Creo que para acercarnos mas a la manera en que se escriben los programas en general, deberias minimizar el llamado a funciones. Usar While(1) o While(True), que es lo mismo, en vez de usar for( ; ; ).

Por otro lado, nunca utilice en mis programas la instruccion goto. En mi forma de ver, es como forzar al programa a hacer algo que no tiene logica. Me explico, una situacion seria por ejemplo anidar algunos While y algunos If, en ese caso el programa estaria constantemente comprobando condiciones, si alguna cambia, el programa reacciona al cambio, usar goto, es forzar el programa sin logica. No digo que yo tenga la razon, solo explico como lo veo.

Código:
case 'C' :
goto inicio;
break;

Podrias mejorar el inicio del programa, en vez de llamar a la funcion tecla().

Código:
void tecla(void)
 {
  do{x=kbd_getc();}while(x==0);
 }

Podrias hacer lo siguiente y solucionar dos inconvenientes en uno.

Código:
do{
      x=kbd_getc();
      }while(x==0 && flag==0);
      
      
       if(flag==1){
              clock();
              printf("%c%c%c%c:%c%c%c",in,dmin+48,umin+48,chion,dseg+48,useg+48,fin);
              lcd_gotoxy(1,2);
              printf(lcd_putc,"%c%c:%c%c",dmin+48,umin+48,dseg+48,useg+48);
              flag=0;
              x=0;
       }

Mientras no se pulse una tecla,o se active la interrupcion, esta esperando la pulsasion.
Si se activo la interrupcion de Timer1, sale del do While y se ejecuta la condicion de flag=1. La linea x=0; asegura que no entres al Switch.

Luego me podrias explicar que haces cuando presionas la tecla C.

Tampoco me gusta mucho el for( ; ; ) dentro del Switch. Tongue

Saludos!

EDIT: Soy un poco obsesivo, me gustan las funciones arriba, y las interrupciones abajo, o en todo caso, las funciones en un archivo .c. Modifique el programa, podes ver los While y las modificaciones que te indicaba.

Código:
#include <16f88.h>
#use delay(clock=8M)
#fuses NOWDT,NOPUT,PROTECT,MCLR,INTRC_IO
#use standard_io (a)
#use standard_io (b)
#use rs232(baud=9600,FORCE_SW,parity=N,xmit=PIN_a3,bits=8)
#define LCD_E     PIN_A0
#define LCD_CK    PIN_A1   
#define LCD_DAT   PIN_A2
#define use_portb_kbd TRUE
#include  "lcd3.c"
#include  "kbd_lib.c"

char x;
int dmin=0,umin=0,dseg=0,useg=0,floc=0,fvis=0;
int dgl=0,ugl=0,dgv=0,ugv=0,per=0;
int in=0x1b,fin=0x0D,chion=0x01,chioff=0x00;
int glocal=0,gvisita=0,minutos=0,segundos=0,cmax=10;
int1 cont=0,clockon=0;

void tecla(void);
void clock(void);
void local(void);
void neglocal (void);


void tecla(void)
 {
  do{x=kbd_getc();}while(x==0);
 }
 
void clock(void)
{
 segundos++;
  if (minutos==cmax)
   minutos=0;
  if (segundos==60)
   {
    segundos=0;
    minutos++;
   }
  dmin=minutos/10;
  umin=minutos%10;
  dseg=segundos/10;
  useg=segundos%10;
}

void local(void)
{
 if (glocal==99)
  glocal=0;
 else
  glocal++;
 dgl=glocal/10;
 ugl=glocal%10;
}

void neglocal(void)
{
 if (glocal==0)
  glocal=99;
 else
  glocal--;
 dgl=glocal/10;
 ugl=glocal%10;
}

void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);
set_timer1 (3036);                          //recarga del Timer1
enable_interrupts(INT_TIMER1);             
enable_interrupts(global);
lcd_init();
lcd_putc("   Khronos");
   
   
while(True){


      do{
      x=kbd_getc();
      }while(x==0 && flag==0);
     
     
       if(flag==1){
       clock();
       printf("%c%c%c%c:%c%c%c",in,dmin+48,umin+48,chion,dseg+48,useg+48,fin);
       lcd_gotoxy(1,2);
       printf(lcd_putc,"%c%c:%c%c",dmin+48,umin+48,dseg+48,useg+48);
       flag=0;
       x=0;
       }
       
         switch(x)
            {
              case '1' :
               lcd_gotoxy(1,1);
               printf(lcd_putc,"\f  Cuenta Maxima");
               lcd_gotoxy(1,2);
               printf(lcd_putc,"%d A+ B- C Enter",cmax);
               for(;;)
                   {
                     tecla();
                     switch(x)
                        {
                         case 'A' :
                         lcd_gotoxy(1,2);
                         printf(lcd_putc,"\f%d ",cmax++);
                           break;
                         case 'B' :
                         lcd_gotoxy(1,2);
                         printf(lcd_putc,"\f%d ",cmax--);
                           break;
                         case 'C' :
                          goto inicio;
                          break;
                        }
                        break;
                   }
                   
              case '2' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
               clockon++;
                  break;
                 
              case '3' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
               local();
               lcd_gotoxy(13,2);
               printf(lcd_putc,"%c%c",dgl+48,ugl+48);
                  break;
             
              case '4' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
               neglocal();
               lcd_gotoxy(13,2);
               printf(lcd_putc,"%c%c",dgl+48,ugl+48);
                  break;
             
             case '5' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
             
             case '6' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
             
             case '7' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
             
             case '8' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
             
             case '9' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
           
             case 'A' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
           
             case 'B' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
             
             case 'C' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
             
             case 'D' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
             
             case '0' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
             
             case '*' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
             
             case '#' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
               break;
            }
   }
}

#int_TIMER1         //Interrupción por Timer1
void temp1s(void)   //Función
{
  if (cont==1)
   {
     if (clockon==1)
     {
       flag=1;
     }
   }
  set_timer1 (3036);                     //recarga del Timer
  cont++;
}


« Última modificación: Mayo 28, 2012, 02:27:01 por VelazquezBio » En línea

No será fácil y no sera corto el camino, pero se que seré feliz mientras lo transite.
darck_khronos
PIC16F
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 670

Khronoscorp Systems


« Respuesta #12 : Mayo 28, 2012, 02:27:05 »

gracias por la sugerencia, pero la verdad nunca realize ningun tipo de menu, ese esparte del gran problema que tengo por lo mismo no me doy una idea de como generarlo y mostrarlo en la lcd, por esa razon ven que dentro de un switch tengo un for y mas detalles que ya obcervaron  cabezaso a la pared Idiota
En línea
darck_khronos
PIC16F
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 670

Khronoscorp Systems


« Respuesta #13 : Mayo 28, 2012, 02:39:49 »


EDIT: Soy un poco obsesivo, me gustan las funciones arriba, y las interrupciones abajo, o en todo caso, las funciones en un archivo .c. Modifique el programa, podes ver los While y las modificaciones que te indicaba.

Código:
#include <16f88.h>
#use delay(clock=8M)
#fuses NOWDT,NOPUT,PROTECT,MCLR,INTRC_IO
#use standard_io (a)
#use standard_io (b)
#use rs232(baud=9600,FORCE_SW,parity=N,xmit=PIN_a3,bits=8)
#define LCD_E     PIN_A0
#define LCD_CK    PIN_A1   
#define LCD_DAT   PIN_A2
#define use_portb_kbd TRUE
#include  "lcd3.c"
#include  "kbd_lib.c"

char x;
int dmin=0,umin=0,dseg=0,useg=0,floc=0,fvis=0;
int dgl=0,ugl=0,dgv=0,ugv=0,per=0;
int in=0x1b,fin=0x0D,chion=0x01,chioff=0x00;
int glocal=0,gvisita=0,minutos=0,segundos=0,cmax=10;
int1 cont=0,clockon=0;

void tecla(void);
void clock(void);
void local(void);
void neglocal (void);


void tecla(void)
 {
  do{x=kbd_getc();}while(x==0);
 }
 
void clock(void)
{
 segundos++;
  if (minutos==cmax)
   minutos=0;
  if (segundos==60)
   {
    segundos=0;
    minutos++;
   }
  dmin=minutos/10;
  umin=minutos%10;
  dseg=segundos/10;
  useg=segundos%10;
}

void local(void)
{
 if (glocal==99)
  glocal=0;
 else
  glocal++;
 dgl=glocal/10;
 ugl=glocal%10;
}

void neglocal(void)
{
 if (glocal==0)
  glocal=99;
 else
  glocal--;
 dgl=glocal/10;
 ugl=glocal%10;
}

void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);
set_timer1 (3036);                          //recarga del Timer1
enable_interrupts(INT_TIMER1);             
enable_interrupts(global);
lcd_init();
lcd_putc("   Khronos");
   
   
while(True){


      do{
      x=kbd_getc();
      }while(x==0 && flag==0);
     
     
       if(flag==1){
       clock();
       printf("%c%c%c%c:%c%c%c",in,dmin+48,umin+48,chion,dseg+48,useg+48,fin);
       lcd_gotoxy(1,2);
       printf(lcd_putc,"%c%c:%c%c",dmin+48,umin+48,dseg+48,useg+48);
       flag=0;
       x=0;
       }
       
         switch(x)
            {
              case '1' :
               lcd_gotoxy(1,1);
               printf(lcd_putc,"\f  Cuenta Maxima");
               lcd_gotoxy(1,2);
               printf(lcd_putc,"%d A+ B- C Enter",cmax);
               for(;;)
                   {
                     tecla();
                     switch(x)
                        {
                         case 'A' :
                         lcd_gotoxy(1,2);
                         printf(lcd_putc,"\f%d ",cmax++);
                           break;
                         case 'B' :
                         lcd_gotoxy(1,2);
                         printf(lcd_putc,"\f%d ",cmax--);
                           break;
                         case 'C' :
                          goto inicio;
                          break;
                        }
                        break;
                   }
                   
              case '2' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
               clockon++;
                  break;
                 
              case '3' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
               local();
               lcd_gotoxy(13,2);
               printf(lcd_putc,"%c%c",dgl+48,ugl+48);
                  break;
             
              case '4' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
               neglocal();
               lcd_gotoxy(13,2);
               printf(lcd_putc,"%c%c",dgl+48,ugl+48);
                  break;
             
             case '5' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
             
             case '6' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
             
             case '7' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
             
             case '8' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
             
             case '9' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
           
             case 'A' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
           
             case 'B' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
             
             case 'C' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
             
             case 'D' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
             
             case '0' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
             
             case '*' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
                  break;
             
             case '#' :
               lcd_gotoxy(10,2);
               printf(lcd_putc,"%c",x);
               break;
            }
   }
}

#int_TIMER1         //Interrupción por Timer1
void temp1s(void)   //Función
{
  if (cont==1)
   {
     if (clockon==1)
     {
       flag=1;
     }
   }
  set_timer1 (3036);                     //recarga del Timer
  cont++;
}




realize la compilacion asi como lo marcas pero esto es lo que me salio
Código:
*** Error 88 "Control.c" Line 399(12,22): Undefined label that was used in a GOTO  > inicio
*** Error 117 "Control.c" Line 402(3,4): Improper use of a function identifier
*** Error 43 "Control.c" Line 402(6,7): Expecting a declaration
*** Error 48 "Control.c" Line 402(7,11): Expecting a (
*** Error 43 "Control.c" Line 402(13,14): Expecting a declaration
*** Error 43 "Control.c" Line 402(14,15): Expecting a declaration
*** Error 43 "Control.c" Line 403(4,5): Expecting a declaration
*** Error 43 "Control.c" Line 404(6,8): Expecting a declaration
*** Error 43 "Control.c" Line 404(9,10): Expecting a declaration
*** Error 48 "Control.c" Line 404(10,17): Expecting a (
*** Error 43 "Control.c" Line 404(19,20): Expecting a declaration
*** Error 43 "Control.c" Line 404(20,21): Expecting a declaration
*** Error 43 "Control.c" Line 405(6,7): Expecting a declaration
*** Error 48 "Control.c" Line 406(8,12): Expecting a (
*** Error 43 "Control.c" Line 406(13,14): Expecting a declaration
*** Error 43 "Control.c" Line 406(14,15): Expecting a declaration
*** Error 43 "Control.c" Line 407(6,7): Expecting a declaration
*** Error 43 "Control.c" Line 408(4,5): Expecting a declaration
*** Error 28 "Control.c" Line 409(15,19): Expecting an identifier
*** Error 43 "Control.c" Line 409(20,21): Expecting a declaration
*** Error 48 "Control.c" Line 410(3,7): Expecting a (
*** Error 43 "Control.c" Line 410(9,10): Expecting a declaration
*** Error 43 "Control.c" Line 411(1,2): Expecting a declaration
      23 Errors,  0 Warnings.

Alguien tendra algun ejemplo de como hacer un menu ?
En línea
VelazquezBio
"...La Felicidad solo es completa, cuando es compartida..."
Amigo de uControl
PIC18F
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1455


Alea Iacta Est...


« Respuesta #14 : Mayo 28, 2012, 02:41:01 »

gracias por la sugerencia, pero la verdad nunca realize ningun tipo de menu, ese esparte del gran problema que tengo por lo mismo no me doy una idea de como generarlo y mostrarlo en la lcd, por esa razon ven que dentro de un switch tengo un for y mas detalles que ya obcervaron  cabezaso a la pared Idiota

En un 18f2550 he tenido algunos problemas anidando Switch, creo que no te respeta el for, por cuestiones de stack, habría que ver cuantos if while for etc, podes anidar.

Podrias hacer algo similar a  lo que te he mostrado, puedes hacer lo siguiente para el case '1':, debes definir otra variable, por ejemplo y.

Código:
case '1' :
               lcd_gotoxy(1,1);
               printf(lcd_putc,"\f  Cuenta Maxima");
               lcd_gotoxy(1,2);
               printf(lcd_putc,"%d A+ B- C Enter",cmax);
                  
                  do{
                  y=kbd_getc();
                  }while(y==0);
                    
                     switch(y)
                        {
                         case 'A' :
                         lcd_gotoxy(1,2);
                         printf(lcd_putc,"\f%d ",cmax++);
                           break;
                         case 'B' :
                         lcd_gotoxy(1,2);
                         printf(lcd_putc,"\f%d ",cmax--);
                           break;
                         case 'C' :
                         goto inicio;
                         break;
                        }
              break;

Dime que funcion debes hacer con la tecla C, y algo que se me habia pasado por alto, debes reiniciar las variables x e y a 0, x=0 y=0, podrias hacerlo al inicio del programa justo antes del do{, sino te ocurrira que cada vez que entres a esperar la pulsacion de las teclas, como el valor es distinto de cero, desde tu ultima pulsacion, se te ejecutara una y otra vez.

Edit: Quite la etiqueta inicio, deja vacio el case 'C' :

Código:
case 'C' :

break;
« Última modificación: Mayo 28, 2012, 02:42:35 por VelazquezBio » En línea

No será fácil y no sera corto el camino, pero se que seré feliz mientras lo transite.
Páginas: [1] 2   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.18 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.104 segundos con 29 consultas. (Pretty URLs adds 0.012s, 3q)
loggkey