Cronómetro 5 dígitos modificación hilo de manipulable con 74HC595

Bueno investigando un poco mas me acorde del post en el que empezamos hablar surbyte y era también un crono de 5 dígitos pero el problema era que no tenia botón de stop ni de reset he intentado modificar el código por si me pudiese valer y me faltaría poner los botones que no se como hacelo si me pudieras revisar el código y darme alguna pista con lo del botón te lo agradecería también recordar que seria para arduino uno gracias de antemano

Programa base tomado de http://playground.arduino.cc/Code/Stopwatch
*/



const int buttonPin = 12;

int value = LOW;                    // previous value of the LED
int buttonState;                    // variable to store button state
int lastButtonState;                // variable to store last button state
int blinking;                       // condition for blinking - timer is timing
long interval = 100;                // blink interval - change to suit
long previousMillis = 0;            // variable to store last time LED was updated
long startTime ;                    // start time for stop watch
long elapsedTime ;                  // elapsed time for stop watch
int fractional;                     // variable used to store fractional part of time


// Definiciones de los 74HC595

int pinLatch	= 4;	//Pin para el latch de los 74CH495
int pinDatos	= 2;	//Pin para Datos serie del 74CH495
int pinReloj	= 3;	//Pin para reloj del 74CH495

byte digitOne[10]= {
	// Codificaci�n hexadecimal de los d�gitos decimales en el display de 7 segmentos
	//0xEE, 0x82, 0xDC, 0xD6, 0xB2, 0x76, 0x7E, 0xC2, 0xFE, 0xF6};
	// Codificacion del autor del Hilo
	
	0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xb6, 0x3E, 0xE0, 0xFE, 0xF6};
	// con esta codificaci�n los leds encienden correctamente
 
 
int  centenas	= 0;	//N�mero de las centenas
int decenas	= 0;    //N�mero de las decenas		= 0;	//Numero de las decimas
int decimas 	= 0;    //Numero de las decimas
int centesimas	= 0;    //numero de las centesimas
void setup(){

	Serial.begin(19200);
	pinMode(pinLatch, OUTPUT);
	pinMode(pinDatos, OUTPUT);
	pinMode(pinReloj, OUTPUT);
	//pinMode(buttonPin, INPUT);
	Serial.println("Cronometro Ok");

	pinMode(ledPin, OUTPUT);         // seteo el pin digital LED como salida

	pinMode(buttonPin, INPUT);       // buttonPin como entrada 
	digitalWrite(buttonPin, HIGH);   // activo el resistor pullup. Cablear el boton de modo que cuando se presione vaya a masa

	}

void loop()
{
	// check for button press
	buttonState = digitalRead(buttonPin);                   // leo el estado del bot�n y lo guardo

	if (buttonState == LOW && lastButtonState == HIGH  &&  blinking == false){     // check for a high to low transition
		// if true then found a new button press while clock is not running - start the clock

		startTime = millis();                                // almacena el tiempo de arranque del cron�metro
		blinking = true;                                     // activar el led durante el cronometrado
		delay(5);                                            // peque�o retardo para evitar rebotes
		lastButtonState = buttonState;                       // guardo buttonState en lastButtonState para luego comparar

	}

	else if (buttonState == LOW && lastButtonState == HIGH && blinking == true){     
			// chequear una transici�n de alto a bajo 
			// si es verdadero luego encontrar una nueva presion del boton mientras el reloj corre - parar el reloj y presentar

			elapsedTime =   millis() - startTime;              // guardo el tiempo transcurrido
			blinking = false;                                  // apago parpadeo
			lastButtonState = buttonState;                     // guardo buttonState en lastButtonState para luego compararlo
			display(elapsedTime );
			// presento el tiempo transcurrido
			Serial.print( (int)(elapsedTime / 1000L));         // divido por 1000 para convertir a segundos luego tomo el entero
		
			Serial.print(".");									// imprimo el punto decimal

			// calculo la parte fraccional
			fractional = (int)(elapsedTime % 1000L);

			// pad in leading zeros - wouldn't it be nice if
			// Arduino language had a flag for this? :)
			if (fractional == 0)
				Serial.print("000");      // add three zero's
			else if (fractional < 10)    // if fractional < 10 the 0 is ignored giving a wrong time, so add the zeros
				Serial.print("00");       // add two zeros
			else if (fractional < 100)
				Serial.print("0");        // add one zero

			Serial.println(fractional);  // print fractional part of time

		}
		else{
			lastButtonState = buttonState;                         // store buttonState in lastButtonState, to compare next time
		}
	if (blinking){ 
		display(millis() - startTime); 
	}

	// Rutina para hacer parpadear un led pin 13 indicando que esta contando.

	if ( (millis() - previousMillis > interval) ) {

		if (blinking == true){
			previousMillis = millis();                         // Recuerndo el momento en que parpadea el led

			// cambio el estado del led
			if (value == LOW)
			value = HIGH;
			else
			value = LOW;
			digitalWrite(ledPin, value);
		}
		else{
			digitalWrite(ledPin, LOW);                         // apago el led cuando no parpadea
		}
	}

}



void display(unsigned long numero) {

        int centenas = numero / 10000;
	numero %= 10000;	
        int decenas = numero / 1000;
	numero %= 1000;
	int unidades = numero / 100;
	numero %= 100;
	int decimas = numero / 10;
	numero %= 10;
	int centesimas = numero;

	digitalWrite(LATCH, LOW);
	shiftOut(data, clock, MSBFIRST, digito[centenas]); 
	shiftOut(data, clock, MSBFIRST, digito[decenas]);
	shiftOut(data, clock, MSBFIRST, digito[unidades]);
	shiftOut(data, clock, MSBFIRST, digito[decimas]);
	shiftOut(data, clock, MSBFIRST, digito[centesimas]);  
	digitalWrite(LATCH, HIGH);
}