problema con arduino uno y lcd shield

soy nuevo en esto del arduino y no puedo hacer que los botones del shield ejecuten las operaciones, estoy tratando de hacer un reloj, pero cuando oprimo el boton select aparece el cursor en minutos no en horas despues de varias pulsaciones se pone en horas, pero no puedo incrementar ni decrementar ni las horas ni los minutos, alguien que me pueda ayudar? el codigo es el siguiente, es sobre un arduino uno y el shield un itead

#include <TimerOne.h>
#include <LiquidCrystal.h>


LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int horas=0;
int minutos=0;
volatile int segundos=0;
int modo=0;
int truco=0;
int lcd_key = 0;         //toma el valor del boton que se trate
int adc_key_in = 0;
int ajuste = 0;           //variable auxiliar para la lectura de los botones 
#define btnRight     0  //boton minutos
#define btnLeft      1  //boton horas
#define btnUP        2  //boton dia
#define btnDown      3  //diasemana
#define btnSelect    4  //boton seleccion
#define btnNONE      5


const int            N=3;           // las posibles combinaciones para cambiar entre horas y minutos 
char                texto[10];
volatile boolean    actualizar = true;


int read_LCD_buttons()
{
             adc_key_in=analogRead(0);                  //LEEMOS A0
             if (adc_key_in < 50)   return btnRight;
             if (adc_key_in < 250)  return btnUP;
             if (adc_key_in < 450)  return btnDown;
             if (adc_key_in < 650)  return btnLeft;
            if (adc_key_in < 850)   return btnSelect;
             if (adc_key_in > 900)  return btnNONE;
             return btnNONE;
}
void setup(){
 lcd.begin(16,2);
 lcd.clear();
  Timer1.initialize(1000000);
 Timer1.attachInterrupt(manejoreloj);
}

void manejoreloj(){
 segundos++;
 actualizar=true;
}

void corrijehoras(){
 minutos+= segundos/60;
 segundos = segundos % 60;
 horas+= minutos/60;
 minutos = minutos % 60;
 horas = horas % 24;
}

void incrementarhoras(){
 horas++;
 horas = horas % 24;
 actualizar = true;
}

void decrementarhoras(){
 horas--;
 if (horas<0){
   horas = 23;
 
 actualizar = true;
 }
}

void incrementarminutos(){
 minutos++;
 minutos = minutos % 60;
 actualizar = true;
}

void decrementarminutos(){
 minutos--;
 if (minutos<0){
   minutos = 59;
   actualizar = true;
 }
}



void fijarCursorModo(){
 switch(modo){
   case 0:
   lcd.noBlink();
   break;
   
   case 1:
   lcd.setCursor(0, 0);
   lcd.blink();
   ajuste = 1;
  
   break;
 
   case 2:
   lcd.setCursor(3, 0);
   lcd.blink();
   ajuste = 2;
   
   break;
 }  
 
}



void loop(){
            
   lcd_key = read_LCD_buttons();

   
  switch(lcd_key)
  {                                          //para modificar las horas
     
  case btnSelect:
  {
   modo++;                                  //incrementa las pulsaciones
   modo = modo % N;                         //numero de pulsaciones en funcion de las variables a cambiar, horas, minutos y alarma 
   fijarCursorModo();
  }
  break;
  
     case btnUP:
     if (ajuste == 1)
     {
      incrementarhoras();
     while(modo == 1);
     break;
      
   if (ajuste == 2)
   {
     incrementarminutos();
     while(modo == 1);
    }
   break;
   }
   
   
     case btnDown:{ 
     if (ajuste == 1){
     decrementarhoras();
     while(ajuste == 1);
       
     } 
     break;
     
   if (ajuste == 2){
    decrementarminutos();
    while(ajuste == 2);
    break;  
  }  
 }
   }  
  
 
 if(actualizar==true){
 corrijehoras();
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.noBlink();
 sprintf(texto, "%02d:%02d:%02d", horas, minutos, segundos);           //para dar formato 
 lcd.print(texto);
 actualizar = false;
 fijarCursorModo();
 }
 }