Salve,
per l'interruttore, puoi confermare come è collegato?
Quando dici che non funziona, che verifichi per dire ciò?
Per il problema LCD, le funzioni LCD fanno uso di un Delay bloccante che può creare problemi con le interruzioni.
In particolare dovrebbe funzionare se nel file LTlib_delay.h togli il commento alla linea:
//#define DELAY_INTERRUPT_BLOCKING
o semplicemente definisci
#define DELAY_INTERRUPT_BLOCKING
nel file main prima della tua inclusione
#include "LTlib_delay.h"
Se spulci poi il file LTlib_delay.c puoi vedere cosa cambia.
Proteggo la variabile clock_counter_reference, da chiamate multiple della funzioni delay prima che sia terminato un ritardo.
sebbene dovresti risolvere il problema cerca di togliere le funzioni LCD dall'interrupt service routine. Queste devono rimanere snelle e veloci.
...o potresti ritardare l'esecuzione di altri interrupt.
Saluti,
Mauro