wie wärs mit
#define speed1zu1 3
#define speed1zu5 4

sieht so aus, als würde deine globale variable von etwas innerhalb der LCD bibliothek überschrieben. das kann aber auch nur so aussehen. solche fehler sind wirklich frickelig

du solltest solche globalen variablen am besten gänzlich vermeiden. leg die daten wenigstens innerhalb main an, und gib wenn nötig nen zeiger drauf an deine routinen weiter.

das mit dem debuggen ist nicht so einfach. erst mal kommts drauf an, mit welchem system (betriebssystem, compiler, debugger) du arbeitest.
dann muss man sich mit dem verwendeten debugger erst mal vertraut machen.
für einen fehler wie von dir beschrieben, wird man auch etwas wissen über die abläufe hinter den kulissen benötigen.

womöglich hats mit nem fehler in einer der verwendeten bibliotheken oder dem interrupt zu tun (wenn da irgend ein anderer teil der software, den du nicht genau kennst aus irgend einem grund etwas in ne falsche speicherzelle schreibt, und diese dann zufällig zu deiner globalen variablen gehört, dann kannst du lange suchen. vor allem, wenn das schreiben durch interupts nicht synchron zu deinem eigentlichen programmablauf ist. da hilft dann auch ein normaler debugger nicht viel weiter).

ich hab aber weder das equipment, noch die nötige erfahrung mit dem controller und den bibliotheken, um dir da noch weiter helfen zu können.