el algoritmo para el funcionamiento del reloj es muy sencillo, sólo se debe comprobar cada segundo: si ya pasaron 60 segundos, segundos=0, minutos=minutos+1; si ya pasaron 60 minutos, minutos=0, horas=horas+1; si las horas llegaron a 24, horas=0. Lo que sale en la LCD se actualiza cada segundo, pues se ejecuta dentro de la interrupción. Cuidado, pues no hay que enviar el comando de mostrar los valores en la LCD cada vez que se produzca una interrupción, sino cada vez que el código dentro de la interrupción indique que ha pasado 1 segundo.
Aquí, por ejemplo, utilizo el timer2, que me permite tener una interrupción cada 40ms con cristal de 4MHz, y dentro de la interrupción, compruebo que han pasado 25 interrupciones (40ms * 25 = 1000ms) para ahora sí sumar 1 segundo, comprobar si hay que sumar un minuto o una hora y mostrar los valores en la LCD.