0 Usuarios y 1 Visitante están viendo este tema.
char string[6];for(x=0;x<5;x++) string[x]=Dato[x];string[5]=0;printlcd(string);
string[x]=Dato[x]+48;
// Debe recordarse que las líneas RA0-RA2 actúan ahora como salida de señales de control// hacia el LCD. Al estar conectadas con sendos interruptores en la MicroPIC Trainer,// estos deben estar a nivel lógico "1" permanentemente, es decir en la posicion//marcada como 0 en la placa//Datos del LCD conectado al puerto B// Teclado conectado al puerto B: Columna 0,1,2 a B5,B6 y B7. Fila 0,1,2 y 3 a B1, B2,B3 y B4//RA3 conecto la salida para el motor. En un principi funciona como salida de enable. Se puede//estudiar posibilidad de implementar un control PWM para la velocidad.//RA4 entrada para el Timer0#include <16f628a.h>#include <stdlib.h>#FUSES NOWDT //No Watch Dog Timer#FUSES XT#FUSES NOPUT //No Power Up Timer#FUSES NOPROTECT#use delay(clock=4000000)#define use_portb_kbd TRUE //#use fast_io(A)#use fast_io(B)#bit puertoA3 = 5.3 //Usado para control on/off motorvoid menu1(void);void menu2 (void);int16 contar(void);int16 introducir_valor(void);char cadena1[]={"\f1-Contar Vuelt\n2-Introd. Vuelt"};int desbordamiento=0;int amp=0;void main(){ char caracter; port_b_pullups(TRUE); lcd_init(); kbd_init(); set_tris_a(0x10); //A4 como entrada puertoA3=0; //inicializo motor con 0 //lcd_enviar(LCD_COMANDO,LCD_CURSOR_BLINK); No activo cursor ni blinker setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1); printf (lcd_putc,"Contador de Pulsos\n By Rober ",); do caracter=kbd_getc(); while (caracter=='\0'); printf(lcd_putc,"%s",cadena1); while (1) { caracter=kbd_getc(); switch (caracter) { case '1': desbordamiento=0; set_timer0(0); menu1(); printf(lcd_putc,"%s",cadena1); break; case '2': desbordamiento=0; set_timer0(0); menu2(); printf(lcd_putc,"%s",cadena1); break; case '*': printf(lcd_putc,"\f BY BY"); sleep(); } };}int16 contar(){ int cuenta=0; int16 n; cuenta=get_timer0(); if (cuenta==255) { set_timer0(0); desbordamiento++; } n=256*desbordamiento+cuenta; lcd_gotoxy(10,2); printf(LCD_PUTC,"%Lu",n); // delay_us(1000); return(n);}void menu1(){ char caracter; int contador_parcial=0; int motor_off=1; int tecla_enter=0; //control de la tecla asterisco pulsada primera vez=1, pulsada otra vez =0 printf(lcd_putc,"\f* Motor On/off\n# salir"); do { caracter=kbd_getc(); switch (caracter) { case '*': if (tecla_enter==0) { printf(lcd_putc,"\fMotor ON\n cuenta:"); set_timer0(contador_parcial); tecla_enter=1; motor_off=0; set_tris_a(0x10); puertoA3=1; //activo motor } else { lcd_gotoxy(1,1); contador_parcial=get_timer0(); printf(lcd_putc,"Motor OFF"); motor_off=1; tecla_enter=0; set_tris_a(0x10); puertoA3=0; // motor apagado } break; case '#': tecla_enter=0; motor_off=1; set_tris_a(0x10); puertoA3=0; break; } if (tecla_enter) contar(); }while (caracter!='#');}int16 introducir_valor(){ char caracter; char numeros[6]; int contador_caracter=0; int16 vueltas; printf(lcd_putc,"\fN. Vueltas (4cifras)\n "); lcd_enviar(LCD_COMANDO,LCD_CURSOR_ON); // activo cursor y blinker do { caracter=kbd_getc(); if (caracter!='\0') { printf(lcd_putc,"%c",caracter); // aqui faltaba la coma antes de la palabra caracter numeros[contador_caracter]=caracter; contador_caracter++; } }//while (caracter!='#'&,&contador_caracter<=4); //Cambiar los punto y coma por coma como en la siguiente linea while (caracter!='#'&,&,contador_caracter<=4); numeros[contador_caracter]='\0'; vueltas=atol(numeros); lcd_enviar(LCD_COMANDO,LCD_CLEAR); lcd_enviar(LCD_COMANDO,LCD_HOME); printf(lcd_putc,"\f* Motor On/off\n# salir"); return (vueltas);}void menu2(){ char caracter; int16 vueltas; int motor_off=1; int tecla_enter=0; //*es la tecla enter y asi controlo si la he pulsado 1 o ninguna vez int16 n; vueltas=introducir_valor(); do { caracter=kbd_getc(); switch (caracter) { case '*': if (tecla_enter==0) { tecla_enter=1; motor_off=0; printf(lcd_putc,"\fON Fin: %Lu\ncuenta:",vueltas); set_tris_a(0x10); puertoA3=1; //Activo motor } else { lcd_gotoxy(1,1); printf(lcd_putc,"Off Fin: %Lu\n cuenta:",vueltas); motor_off=1; tecla_enter=0; set_tris_a(0x10); puertoA3=0; //motor apagado } break; case '#': tecla_enter=0; motor_off=1; set_tris_a(0x10); puertoA3=0; //motor apagado break; } if (tecla_enter) { n=contar(); if (vueltas==n) /*debo parar motor*/ { motor_off=2; /*Usado para salir de la función*/ set_tris_a(0x10); puertoA3=0; //apago motor } }} while (caracter!='#'&,&,motor_off!=2); if (motor_off==2) { printf(lcd_putc,"\fSe han Bobinado: \n %Lu Vueltas",n); do caracter=kbd_getc(); while (caracter=='\0'); }}
#include <16F877.h>#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT,NOCPD,NOWRT#use delay (clock=4000000)#include <stdlib.h>#include <lcd.c>#byte port_b = 0x06#use fast_io(a)#use fast_io(b)void delay(){// retardo, antirrebotes delay_ms(50);}char kbd_getc(){// función que explora todo el teclado matricial //verifica columna 1 port_b=0b11111110; if(bit_test(port_b,1)==0){//bit_test verifica que el bit n la posicion 5 sea 1 o 0 delay();// antirrebotes return ('1');// si se presiono el uno devuelve codigo ASCII de 1 } if(bit_test(port_b,3)==0){ delay(); return ('4');// si se presiono el cuatro devuelve codigo ASCII de 4 } if(bit_test(port_b,5)==0){ delay(); return ('7');// si se presiono el siete devuelve codigo ASCII de 7 } if(bit_test(port_b,7)==0){ delay(); return ('*');// si se presiono el * devuelve codigo ASCII de * } //verifica columna 2 port_b=0b11111011; if(bit_test(port_b,1)==0){ delay(); return ('2');}// si se presiono el dos devuelve codigo ASCII de 2 if(bit_test(port_b,3)==0){ delay(); return ('5');// si se presiono el cinco devuelve codigo ASCII de 5 } if(bit_test(port_b,5)==0){ delay(); return ('8');// si se presiono el ocho devuelve codigo ASCII de 8 } if(bit_test(port_b,7)==0){ delay(); return ('0');// si se presiono el cero devuelve codigo ASCII de 0 } // verifica columna 3 port_b=0b11101111; if(bit_test(port_b,1)==0){ delay(); return ('3');// si se presiono el tres devuelve codigo ASCII de 3 } if(bit_test(port_b,3)==0){ delay(); return ('6');// si se presiono el seis devuelve codigo ASCII de 6 } if(bit_test(port_b,5)==0){ delay(); return ('9');// si se presiono el nueve devuelve codigo ASCII de 9 } if(bit_test(port_b,7)==0){ delay(); return('#'); // si se presiono el # devuelve codigo ASCII de # } // verifica columna 4 port_b=0b10111111; if(bit_test(port_b,1)==0){ delay(); return ('A');// si se presiono la C devuelve codigo ASCII de A } if(bit_test(port_b,3)==0){ delay(); return ('B');// si se presiono la D devuelve codigo ASCII de B } if(bit_test(port_b,5)==0){ delay(); return ('C');// si se presiono la E devuelve codigo ASCII de C } if(bit_test(port_b,7)==0){ delay(); return ('D');// si se presiono la F devuelve codigo ASCII de D } return(0);// retorna 0 si no retornó nada antes}#bit puertoA3 = 5.3 //Usado para control on/off motorvoid menu1(void);void menu2 (void);int16 contar(void);int16 introducir_valor(void);char cadena1[]={"\f1-Contar Vuelt\n2-Introd. Vuelt"};int desbordamiento=0;int amp=0;void main(void){char caracter;lcd_init(); port_b_pullups(true);//activa pull up del puerto b, no hará falta conectar resistencias, para teclado set_tris_b(0xAA);//10101010// seteo de salidas entradas para el teclado setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1); printf (lcd_putc,"Ingrese\n tecla",);do caracter=kbd_getc(); while (caracter=='\0'); printf(lcd_putc,"%s",cadena1); while (TRUE) { caracter=kbd_getc(); switch (caracter) { case '1': desbordamiento=0; set_timer0(0); menu1(); printf(lcd_putc,"%s",cadena1); break; case '2': desbordamiento=0; set_timer0(0); menu2(); printf(lcd_putc,"%s",cadena1); break; case '*': printf(lcd_putc,"\fFIN DE BOBINADO"); sleep(); } };}int16 contar(){ int cuenta=0; int16 n; cuenta=get_timer0(); if (cuenta==255) { set_timer0(0); desbordamiento++; } n=256*desbordamiento+cuenta; lcd_gotoxy(10,2); printf(LCD_PUTC,"%Lu",n); delay_us(1000); return(n);}void menu1(){ char caracter; int contador_parcial=0; int motor_off=1; int tecla_enter=0; //control de la tecla asterisco pulsada primera vez=1, pulsada otra vez =0 printf(lcd_putc,"\f* Motor On/off\n# salir"); do { caracter=kbd_getc(); switch (caracter) { case '*': if (tecla_enter==0) { printf(lcd_putc,"\fMotor ON\n cuenta:"); set_timer0(contador_parcial); tecla_enter=1; motor_off=0; set_tris_a(0x10); puertoA3=1; //activo motor } else { lcd_gotoxy(1,1); contador_parcial=get_timer0(); printf(lcd_putc,"Motor OFF"); motor_off=1; tecla_enter=0; set_tris_a(0x10); puertoA3=0; // motor apagado } break; case '#': tecla_enter=0; motor_off=1; set_tris_a(0x10); puertoA3=0; break; } if (tecla_enter) contar(); }while (caracter!='#');}int16 introducir_valor(){ char caracter; char numeros[6]; int contador_caracter=0; int16 vueltas; printf(lcd_putc,"\fN. Vueltas (4cifras)\n "); //lcd_enviar(LCD_COMANDO,LCD_CURSOR_ON); // activo cursor y blinker do { caracter=kbd_getc(); if (caracter!='\0') { printf(lcd_putc,"%c",caracter); // aqui faltaba la coma antes de la palabra caracter numeros[contador_caracter]=caracter; contador_caracter++; } } while (caracter!='#'&,&,contador_caracter<=4); numeros[contador_caracter]='\0'; vueltas=atol(numeros); //lcd_enviar(LCD_COMANDO,LCD_CLEAR); //lcd_enviar(LCD_COMANDO,LCD_HOME); printf(lcd_putc,"\f* Motor On/off\n# salir"); return (vueltas);}void menu2(){ char caracter; int16 vueltas; int motor_off=1; int tecla_enter=0; //*es la tecla enter y asi controlo si la he pulsado 1 o ninguna vez int16 n; vueltas=introducir_valor(); do { caracter=kbd_getc(); switch (caracter) { case '*': if (tecla_enter==0) { tecla_enter=1; motor_off=0; printf(lcd_putc,"\fON Fin: %Lu\ncuenta:",vueltas); set_tris_a(0x10); puertoA3=1; //Activo motor } else { lcd_gotoxy(1,1); printf(lcd_putc,"Off Fin: %Lu\n cuenta:",vueltas); motor_off=1; tecla_enter=0; set_tris_a(0x10); puertoA3=0; //motor apagado } break; case '#': tecla_enter=0; motor_off=1; set_tris_a(0x10); puertoA3=0; //motor apagado break; } if (tecla_enter) { n=contar(); if (vueltas==n) /*debo parar motor*/ { motor_off=2; /*Usado para salir de la función*/ set_tris_a(0x10); puertoA3=0; //apago motor } }} while (caracter!='#'&,&,motor_off!=2); if (motor_off==2) { printf(lcd_putc,"\fSe han Bobinado: \n %Lu Vueltas",n); do caracter=kbd_getc(); while (caracter=='\0'); }}