darck_khronos
PIC16F
 
Desconectado
Sexo: 
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: 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  )
|
|
|
|
|
En línea
|
|
|
|
|
|
|
jukinch
|
 |
« Respuesta #1 : Mayo 19, 2012, 11:45:47 » |
|
darck_khronos: encontré este ejemplo. Saludos. Jukinch #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
Sexo: 
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 if(c=='#' || c=='*'){ if(i==0){ i=-1; [b] continue;[/b] } if(i!=limit) var=1; [b] break; [/b] }
|
|
|
|
|
En línea
|
|
|
|
|
вoяяe
|
 |
« Respuesta #3 : Mayo 22, 2012, 07:32:28 » |
|
Ando corto de tiempo, espero te sirva de algo: Continue y Break Saludos!! 
|
|
|
|
|
En línea
|
La electrónica es simple, puedes aprenderla en 100 simples lecciones, una lección cada año.
|
|
|
darck_khronos
PIC16F
 
Desconectado
Sexo: 
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
|
 |
« Respuesta #5 : Mayo 28, 2012, 01:01:52 » |
|
¿Cual sería el proposito de anidar dos getc? 
|
|
|
|
|
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
Sexo: 
Mensajes: 670
Khronoscorp Systems
|
 |
« Respuesta #6 : Mayo 28, 2012, 01:03:32 » |
|
estoy realizando un menu, pero les muesto mi codigo #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
Sexo: 
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
Sexo: 
Mensajes: 1455
Alea Iacta Est...
|
 |
« Respuesta #8 : Mayo 28, 2012, 01:55:20 » |
|
Hola en que lenguaje estas programando? EDIT: Estoy un poco dormido...  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
|
 |
« 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
Sexo: 
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
Sexo: 
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. #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. case 'C' : goto inicio; break; Podrias mejorar el inicio del programa, en vez de llamar a la funcion tecla(). void tecla(void) { do{x=kbd_getc();}while(x==0); } Podrias hacer lo siguiente y solucionar dos inconvenientes en uno. 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.  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. #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
Sexo: 
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. #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 *** 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
Sexo: 
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  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. 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' :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.
|
|
|
|
|
|