ayuda con el diseño de un reloj en PCW

estoy trabajando en el diseño de un reloj con un pic16f877a, empece mediante el pcw wizard que ya da una parte del código para no estar escribiendo los comando una y otra vez, el código que presento a continuación funciona bien en el proteus y ya lo arme y funciona bien, pero mi problema es que para aumentar o disminuir los segundos, minutos y horas tengo que esperar que termine el ciclo del contador "s" de un segundo, me gustaría que el reloj siga funcionando así como esta pero con la modificación de que pueda cambiarle los delay de los input para que en realidad funcionen con los 200ms que les tengo puesto y no con los 1000ms del contador "s" asta el momento tengo este código que es el que ya me funciona en realidad


Código:
#include "C:\Users\jesus\Desktop\mecatronica\microcontroladores\proyectos fuera de la materia\prueva lcd\prueva.h"
#include <lcd.c>
int8 s=0;
int8 h=0;
int8 m=0;
void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   SET_TRIS_A(0b111111);
   SET_TRIS_B(0);

lcd_init(); // se inicializa la lcd
   // TODO: USER CODE!!
   output_b(0);
lcd_gotoxy(1,1); // ubica puntero
printf(lcd_putc,"vienvenido Jesus" );
printf(lcd_putc,"\nsist. encendido" );
delay_ms(2000);
lcd_init(); // se inicializa la lcd
lcd_gotoxy(1,1); // ubica puntero
printf(lcd_putc,"INICIALIZANDO..." );
printf(lcd_putc,"\nespere porfavorr" );
delay_ms(1500);
lcd_init(); // se inicializa la lcd


do{
if(input(pin_a0)){
s=s+2;
delay_ms(50);
}else if(input(pin_a1)){
s=s-2;
delay_ms(50);
}else if(s>=59){
s=-1;
m++;
}else if(input(pin_a2)){
m++;
delay_ms(50);
}else if(input(pin_a3)){
m--;
delay_ms(50);
}else if(m>=60){
h++;
m=0;
}else if(input(pin_a4)){
h++;
delay_ms(50);
}else if(input(pin_a5)){
h--;;
delay_ms(50);
}else if(h>=24){
h=0;
}
s++;
delay_ms(1000);
lcd_gotoxy(1,1); // ubica puntero
printf(lcd_putc,"%2u"":""%2u"":""%2u""   ""h:m:s", h, m, s, );
}while(1);
}

espero que me puedan ayudar saludos
 
Última edición por un moderador:
No son nada eficientes los relojes hechos con PICs, para eso están los RTR REAL TIME CLOCK...

Relojes de tiempo real, uno que funciona muy bien y es muy fácil de usar es el DS1307!

De la manera que lo quieres hacer se te va a ir desfasando con el tiempo!

Saludos !
 
a ok gracias por el consejo, es que queria hacer ese prollecto de propeller clock y queria acerlo con un pic, pero vere como implementar ese dispositico para hacerlo mas real
 
Atrás
Arriba