Arduino hangs?

The code is too simple for memory writing I believe. Please have a look below. I'm going to add a second 100uF capacitator today.

Thanks for any ideas!

#include <LedControl.h>
#include <Wire.h>
#include <DS1307.h>
int buttonMinUpdate = 0, buttonHourUpdate = 0;   
char dateTime[22];
int minuteNow, minuteOld = 0;
int RTCValues[7], i = 0, year, month, dayOfMonth, dayOfWeek, hour, minute, second, intStatus = 1, oldStatus = 1;
const int buttonPinMinute = 3, buttonPinHour = 4, buttonShutdown = 5; 

// inputs: DIN pin, CLK pin, LOAD pin. number of chips
LedControl mydisplay = LedControl(9, 10, 11, 2);


void setup() 
{
 //setTime();
  DS1307.begin();
  pinMode(buttonPinMinute, INPUT);
  pinMode(buttonPinHour, INPUT); 
  pinMode(buttonShutdown, INPUT);   
  intStatus = digitalRead(buttonShutdown);
  if(intStatus == 0)
  {
     mydisplay.shutdown(0, false);  // turns on display
     mydisplay.shutdown(1, false);  // turns on display
  }
  else
  {
    mydisplay.shutdown(0, true);  // turns on display
    mydisplay.shutdown(1, true);  // turns on display
  }
  oldStatus = intStatus;
  mydisplay.setIntensity(0, 15); // 15 = brightest
  mydisplay.setIntensity(1, 15); // 15 = brightest
}

void loop() 
{
  DS1307.getDate(RTCValues);
  buttonMinUpdate = digitalRead(buttonPinMinute);
  buttonHourUpdate = digitalRead(buttonPinHour);
  sprintf(dateTime, "20%02d-%02d-%02d %02d:%02d:%02d", RTCValues[0], RTCValues[1], RTCValues[2], RTCValues[4], RTCValues[5], RTCValues[6]);        
  minuteNow = RTCValues[5];
  intStatus = digitalRead(buttonShutdown);
  if(oldStatus != intStatus)
   {
       oldStatus = intStatus;
      if(intStatus == 0)
      {
         mydisplay.shutdown(0, false);  // turns on display
         mydisplay.shutdown(1, false);  // turns on display
      }
      else
      {
        mydisplay.shutdown(0, true);  // turns on display
        mydisplay.shutdown(1, true);  // turns on display
      }
   }

  if(buttonMinUpdate == 0)
  {
    updateTimeMin();
  }
  if(buttonHourUpdate == 0)
  {
    updateTimeHour();
  }   
  if(minuteNow != minuteOld)
  {
      minuteOld = minuteNow;
      VisualizeTime();
  }

  delay(750);
}

void VisualizeTime()
{
    mydisplay.clearDisplay(0);
    mydisplay.clearDisplay(1);
    enableHetIs();
    int intMinutes = RTCValues[5];
    int intExtraMin = intMinutes % 5;
    enableMinutes(intExtraMin);
    int intFunction = RTCValues[5] / 5;
    int intHour = RTCValues[4];
    if(intFunction >= 4)
    {
      intHour++;
    }
     enableFunction(intFunction);
   
    enableHour(intHour);
}

void enableHour(int intHour)
{
  while(intHour >= 12)
  {
     if(intHour >= 12)
     {
      intHour -= 12;
     }
  }
   switch (intHour) 
   {
    case 0:    
      mydisplay.setLed(0, 0, 6, true);
      mydisplay.setLed(0, 1, 6, true);
      mydisplay.setLed(0, 2, 6, true);
      mydisplay.setLed(0, 3, 6, true);
      mydisplay.setLed(0, 4, 6, true);
      mydisplay.setLed(0, 5, 6, true);
      break;
    case 1:    
      mydisplay.setLed(1, 4, 5, true);
      mydisplay.setLed(1, 5, 5, true);
      mydisplay.setLed(1, 6, 5, true);
      break;
   }
}

void enableHetIs()
{
   mydisplay.setLed(1, 4, 0, true);
   mydisplay.setLed(1, 5, 0, true);   
   mydisplay.setLed(1, 6, 0, true);
   
   mydisplay.setLed(0, 6, 0, true);
   mydisplay.setLed(0, 5, 0, true);   
}

void enableMinutes(int intExtraMin)
{
  //there is no break in thise case intentionally
  switch (intExtraMin) 
   {
    case 4:    
      mydisplay.setLed(1, 2, 4, true);
    case 3:    
      mydisplay.setLed(1, 2, 3, true);
    case 2:    
      mydisplay.setLed(1, 3, 4, true);
    case 1:    
      mydisplay.setLed(1, 3, 3, true);
      break;
   }
}

void enableFunction(int intFunction)
{
  switch (intFunction) 
   {
    case 0:    
      enableUur();
      break;
    case 1:    
      enableVijf();
      enableOver();
      break;
   }
}

void enableUur()
{
  mydisplay.setLed(1, 1, 5, true);
  mydisplay.setLed(1, 1, 6, true);
  mydisplay.setLed(1, 1, 7, true);
}

void enableVijf()
{
  mydisplay.setLed(0, 0, 0, true);
  mydisplay.setLed(0, 1, 0, true);
  mydisplay.setLed(0, 2, 0, true);
  mydisplay.setLed(0, 3, 0, true);
}

void enableOver()
{
  mydisplay.setLed(0, 0, 0, true);
  mydisplay.setLed(0, 1, 0, true);
  mydisplay.setLed(0, 2, 0, true);
  mydisplay.setLed(0, 3, 0, true);
}

void updateTimeMin()
{
   minute = RTCValues[5] + 1;
  if(minute == 60)
  {
    minute = 0;
  }
  hour = RTCValues[4];
  completeUpdate();
}

void updateTimeHour()
{
   minute = RTCValues[5];
   hour = RTCValues[4] + 1;
   if(hour == 24)
   {
    hour = 0;
   }
   completeUpdate();
}

void completeUpdate()
{
  second = 0;
  dayOfMonth = RTCValues[2] ;
  dayOfWeek = RTCValues[3] ;
  year = RTCValues[0];
  month = RTCValues[1];
  DS1307.setDate(year, month, dayOfMonth, dayOfWeek, hour, minute, second);
  DS1307.getDate(RTCValues);
  VisualizeTime();
}