No soy para nada experto pero tratare de ayudarte.
estube leyendo tu problema y puedes poner el codigo para leer los botones ai mismo junto al codigo del lcd. solo reduse el delay ponlo para ke sea de 50 milisegundos asi lo tengo yo y funsiono bien. te voy a ayudar::
para cambiar la hora, puedes aser ke cuando el usuario espiche el boton, se incremente la variable horas en 1. lo mismo para la fecha. luego se guardan esos valores en el chip DS1307, los guardas con ds1307_set_date_time asi:
el problema es ke si el usuario deja el boton espichado, la variable se incrementa muy rapido sin control porke el pic va a 4 megas, para solusionar esto se me ocurrio un truco muy ingenioso:
if(BOTON == 1) //si el usuario undio el boton
{
tiempo_espichado++; //aumentamos en 1 la variable del tiempo espichado
if(tiempo_espichado > 10) //si a durado mas de 400 milisegundos espichado el boton (400 porke si uno multiplica en la calculadora 50 milisegundos por 10 da 400
{
hora++; //incrementamos la hora en uno
tiempo_espichado = 0;
if(hora > 24){hora = 0;}
}
}
ds1307_set_date_time(dia,mes,anio,dow,hora,min,sec);
delay_ms(50); //esperamos 50 milisegundos para reducir la velocidad del pic
asi lo ise y me funciono, lo mismo puedes aser para la fecha, la incrementas en uno y ya.
saludos