compilación del void loop para reloj alarma

Hola
Este código es de un reloj alarma en el momento de que corre el void loop me muestra la hora y la fecha solo por un corto periodo de tiempo y se pasa a la alarma. como hago para que se mantenga la hora fija ahí.
y en el caso de agregar mas alarma ¿debería solo duplicar el código?
Gracias de antemano

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"


LiquidCrystal_I2C lcd(0X3F,16,2); // inicializa la interfaz I2C del LCD 16x2
RTC_DS1307 RTC;                       // inicializa el modulo 
int r_diaSemana;                     // almacena el resultado del dia de la semana calculado
const int timbre = 7;             // Pin 7 encargado de activar el timbre, se conecta al Rele

int Pmodo=2;
int Pup=3;
int Pdown=4;
int Pedit=5;

int activate=0;


char texto[10];

int Pulsador_modo=0;
int Pulsador_up=0;
int Pulsador_down=0;
int Pulsador_edit=0;

int segundo;
int minuto;
int hora;

int tiempo_timbre=7000; // Tiempo continuo que dura el timbre sonando, en milisegundos 7000 = 7 segundos
int horas_alarma;
int minutos_alarma;
////////////////////////////////// Void Setup() ///////////
void setup() {
  // put your setup code here, to run once:
pinMode(timbre, OUTPUT);                    // Configura como salida el pin 7
Wire.begin(); 
RTC.begin();
RTC.adjust(DateTime(__DATE__, __TIME__)); // Lee la fecha y hora del PC (Solo en la primera carga)

Serial.begin(9600);                 // Establece la velocidad de datos del puerto serie a 9600
lcd.init();
lcd.backlight();                    // Coloca luz de fondo al LCD
lcd.clear();                        // Borra el  LCD

pinMode(Pulsador_modo, INPUT); 
pinMode(Pulsador_up, INPUT); 
pinMode(Pulsador_down, INPUT);
pinMode(Pulsador_edit, INPUT);
}
////////////////////////////////// Void loop() ///////////
void loop (){
  if (activate ==0){
 DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
  
 Serial.print(now.year(), DEC);  // A¤o
 Serial.print('/');
 Serial.print(now.month(), DEC); // Mes
 Serial.print('/');
 Serial.print(now.day(), DEC);   // Dia
 Serial.print(' ');
 Serial.print(now.hour(), DEC);  // Horas
 Serial.print(':');
 Serial.print(now.minute(), DEC); // Minutos
 Serial.print(':');
 Serial.print(now.second(), DEC); // Segundos
 Serial.println();
 lcd.setCursor(0,0);
 lcd.print("D:");
 lcd.print(now.year(), DEC);
 lcd.print("/");
 lcd.print(now.month(), DEC);
 lcd.print("/");
 lcd.print(now.day(), DEC);
 lcd.print(" ");
 lcd.setCursor(0,1);
 lcd.print("T: ");
 lcd.print(now.hour(), DEC);
 lcd.print(":");
 lcd.print(now.minute(), DEC);
 lcd.print(":");
 lcd.print(now.second(), DEC);
 segundo=now.second();
 minuto=now.minute();
 hora=now.hour();

  delay(1000);
 lcd.setCursor(0,0);
 lcd.print("              ");
 lcd.setCursor(0,1);
 lcd.print("              ");
 int r_diaSemana=dia_de_semana();   // llama a la funcion que calcula el dia de la semana y lo almacena en r_diaSemana
 Pulsador_modo = digitalRead(Pmodo);
  }
  if (Pulsador_modo ==HIGH){
    activate=1;
    lcd.clear();}
    while(activate==1){
      lcd.setCursor(0,0);
      lcd.print("Alarma 1");
      lcd.setCursor(0,1);
      sprintf(texto, "%02d:%02d", horas_alarma, minutos_alarma); //las horas tendran 2 digitos 
      lcd.print(texto);
      Pulsador_up = digitalRead(Pup); // cambiar las horas 
      if(Pulsador_up == HIGH){
        horas_alarma++;
        lcd.setCursor(1,1);
        lcd.print(horas_alarma);
        if(horas_alarma>23){
          horas_alarma=0;
          lcd.clear();
        }
        delay(100);
      }
        Pulsador_down= digitalRead(Pdown); // cambiar los minutos 
        if(Pulsador_down == HIGH){
        minutos_alarma++;
        lcd.setCursor(1,1);
        lcd.print(minutos_alarma);
        if(minutos_alarma>59){
          minutos_alarma=0;
          lcd.clear();
        }
        delay(100);
      }

       Pulsador_edit = digitalRead(Pedit); //salir de alarmas 
       if(Pulsador_edit == HIGH){
        activate =0;
        lcd.clear();
       }
      
  }

  if (hora==horas_alarma && minuto ==minutos_alarma && segundo==0){
    digitalWrite(timbre, HIGH); 
    delay(tiempo_timbre); 
  }


}

/////////////////////////////// Calcula el dia de la Semana //////////////////////////////////
int dia_de_semana(){
 // Encuentar el dia de la semana de una fecha
 int n_dia;
 int r_dia;
 int n_mes;
 int t_mes;
 int n_anno;
 int d_anno;
 int t_siglo=6;

 DateTime now = RTC.now(); //fecha y hora del RTC
 lcd.setCursor(13,1);

 n_anno=(now.year()-2000);
 d_anno=n_anno/4;
 n_dia=now.day();
 n_mes=now.month();

 switch (n_mes) {
    case 1:
      t_mes=0;
      break;
    case 2:
      t_mes=3;
      break;
    case 3:
      t_mes=3;
      break;
    case 4:
      t_mes=6;
      break;
    case 5:
      t_mes=1;
      break;
    case 6:
      t_mes=4;
      break;
    case 7:
      t_mes=6;
      break;
    case 8:
      t_mes=2;
      break;
    case 9:
      t_mes=5;
      break;
    case 10:
      t_mes=0;
      break;
    case 11:
      t_mes=3;
      break;
    case 12:
      t_mes=5;
      break;
    default: 
      t_mes=t_mes;
    break;
 }

 r_dia=n_dia+t_mes+n_anno+d_anno+t_siglo;
 r_dia = r_dia % 7;

 switch (r_dia) {
    case 1:
       lcd.print("Lun");
        Serial.print(" Lun ");
      break;
      case 2:
       lcd.print("Mar");
       Serial.println(" Mar ");
      break;
      case 3:
       lcd.print("Mie");
       Serial.print(" Mie ");
      break;
      case 4:
       lcd.print("Jue");
       Serial.print(" Jue ");
      break;
      case 5:
       lcd.print("Vie");
       Serial.print(" Vie ");
      break;
      case 6:
       lcd.print("Sab");
       Serial.print(" Sab ");
      break;
      case 0:
       lcd.print("Dom");
       Serial.print(" Dom ");
      break;
      default: 
       lcd.print("---");
       Serial.print(" ---");
      break;
 } 
 return r_dia; 
}

Es cierto lo que dice ArduMyth, son notablemente parecidos, y particularmente todos con el mismo objetivo.
Misma tarea del profesor para todos los alumnos de una clase que se ponen de acuerdo para que le resolvamos sus problemas.

Este es el código de otro que dijo que era de la escuela de su mamá. Cödigo de 40k, algo fuera de lo común .

Miren esto

LiquidCrystal_I2C lcd(0X3F,16,2); // inicializa la interfaz I2C del LCD 16x2
RTC_DS1307 RTC;                       // inicializa el modulo RTC

int r_diaSemana;                     // almacena el resultado del dia de la semana calculado
const int timbre = 7;             // Pin 7 encargado de activar el timbre, se conecta al Rele
const int Pulsador_modo=2;
const int Pulsador_up=3;
const int Pulsador_down=4;
const int Pulsador_edit=5;

A ver que explicación dan?