Problem with Leds

Hello,
I’m very new with Arduino, and have a problem with leds.
I have 3 states, in the 3 I have 1 led blinking every 800 milis, and I need that when I release button2 blinking stops and have no to wait for delay. I have:

#define SLIDER1 A2 //Matches button 1
#define SLIDER2 A1
#define SLIDER3 A0 //Matches button 3
#define LIGHT A3
#define TEMP A4

#define BUZZER 3
#define DATA 4
#define LED1 5
#define LED2 6
#define LATCH 7
#define CLOCK 8
#define BUTTON1 10
#define BUTTON2 11
#define BUTTON3 12

boolean estadoAnterior; //Button 2
boolean estAnteriorButton1;
int estado;

void setup(){

Serial.begin (9600);

//Initialize inputs and outputs
pinMode(SLIDER1, INPUT);
pinMode(SLIDER2, INPUT);
pinMode(SLIDER3, INPUT);
pinMode(LIGHT, INPUT);
pinMode(TEMP, INPUT);

pinMode(BUTTON1, INPUT_PULLUP);
pinMode(BUTTON2, INPUT_PULLUP);
pinMode(BUTTON3, INPUT_PULLUP);

pinMode(BUZZER, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);

pinMode(LATCH, OUTPUT);
pinMode(CLOCK, OUTPUT);
pinMode(DATA, OUTPUT);

estadoAnterior=digitalRead(BUTTON2);
estAnteriorButton1=digitalRead(BUTTON1);
estado = 1; // Inicializo el estado en 1 (todo apagado)
}
/*Al arrancar todo apagado. Crear 3 estados, el 1 sería el inicial
todo apagado y que Arduino no haga nada. El 2 sería una cuenta atrás en
el display. El paso 3 sería automático cuando acabe la cuenta atrás que
parpadee un led
*/

void loop(){

boolean estadoActual=digitalRead(BUTTON2);
boolean estActualButton1=digitalRead(BUTTON1);

estAnteriorButton1 = estActualButton1;

//Al soltar el Botón 2 inicia la acción
if (estado==1 && estadoAnterior==LOW && estadoActual==HIGH) {
estado = 2;
}

if(estado==3 && estAnteriorButton1==LOW && estActualButton1==HIGH) {
estado = 1;
}

estadoAnterior = estadoActual;

//Acciones según estados
if (estado == 1){
//Todos los posibles dispositivos de salida apagados
digitalWrite (LED1, LOW);
digitalWrite (LED2, LOW);
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, MSBFIRST, ~(B00000000));
digitalWrite(LATCH, HIGH);
};

if (estado==2){
for (int x=4; x >=0; x–) // Display descendente desde el 3
{
digitalWrite(DATA, LOW);
digitalWrite(CLOCK, LOW);
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, MSBFIRST, ~(ledCharSet));
digitalWrite(LATCH, HIGH);
delay(400);
}
//Apago el display
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, MSBFIRST, ~(B00000000));
digitalWrite(LATCH, HIGH);
estado=3; //Paso automáticamente al estado 3.
}

//Parpadeo del LED1 hasta que presiono el botón 1, que se apaga todo (estado 1)
if(estado == 3) {
encenderLed1();
delay (800);
apagarLed1();
delay (800);
}

}

void encenderLed1(){
digitalWrite (LED1, HIGH);
}
void apagarLed1(){
digitalWrite (LED1, LOW);
}

Look at the Blink Without Delay example sketch to see how to manage time using millis(). Also the demo several things at a time may be useful.

...R