Respecto a que tienes problemas al trabajar con periodos grandes, supongo que te referirás a meter números grandes en el delay_ms(variable).
Te comento una cosilla:
- Si en delay_ms metes dentro una constante, por ejemplo delay_ms(356), el rango máximo es hasta 65535, es decir 65,5s.
- Sin embargo si en delay_ms metes dentro una variable el rango máximo que puede tomar esta, es solo hasta 255.
Esta restricción me llevó de cabeza en su momento, hasta que miré el manual.
Prueba a hacer las temporizaciones usando algún TIMER, ya que si usas delay_ms vas a tener problemas con las temporizaciones pequeñas (por ejemplo 1ms) al desdoblarse las instrucciones C a ensamblador.
Por supuesto los pulsadores y representación en LCD por interrupción por cambio de estado.
Un saludo