Problema con DELAY

Buenas. He estado buscando informacion y probando cosas, pero no llego a lo que quiero hacer y es desprenderme de los delays para siempre y no usarlos nunca porque solo hacen pararme el programa >:(

He probado la funcion millis, pero nada, con ella solo consigo hacer un parpadero con 2 led y ya esta.

Lo que quiero es hacer este juego de luces con otra funcion que no sea delay y que no me pare el programa:

digitalWrite(led22, HIGH);
  digitalWrite(led23, HIGH);
  digitalWrite(led24, HIGH);
  digitalWrite(led25, HIGH);
  digitalWrite(led26, HIGH);
  digitalWrite(led27, HIGH);
  digitalWrite(led28, HIGH);
  delay(150);
  digitalWrite(led24, HIGH);
  digitalWrite(led25, HIGH);
  digitalWrite(led28, HIGH);
  delay(50);
  digitalWrite(led24, LOW);
  digitalWrite(led25, LOW);  
  delay(50);
  digitalWrite(led23, HIGH);
  digitalWrite(led27, HIGH);
  delay(50);
  digitalWrite(led23, LOW);
  digitalWrite(led27, LOW);
  delay(50);
  digitalWrite(led22, HIGH);
  digitalWrite(led26, HIGH);
  delay(50);
  digitalWrite(led22, LOW);
  digitalWrite(led26, LOW);
  delay(50);
  digitalWrite(led24, HIGH);
  digitalWrite(led25, HIGH);
  delay(50);
  digitalWrite(led24, LOW);
  digitalWrite(led25, LOW);  
  delay(50);
  digitalWrite(led23, HIGH);
  digitalWrite(led27, HIGH);
  delay(50);
  digitalWrite(led23, LOW);
  digitalWrite(led27, LOW);
  delay(50);
  digitalWrite(led22, HIGH);
  digitalWrite(led26, HIGH);
  delay(50);
  digitalWrite(led22, LOW);
  digitalWrite(led26, LOW);
  delay(50);
  digitalWrite(led24, HIGH);
  digitalWrite(led25, HIGH);
  delay(50);
  digitalWrite(led24, LOW);
  digitalWrite(led25, LOW);  
  delay(50);
  digitalWrite(led23, HIGH);
  digitalWrite(led27, HIGH);
  delay(50);
  digitalWrite(led23, LOW);
  digitalWrite(led27, LOW);
  delay(50);
  digitalWrite(led22, HIGH);
  digitalWrite(led26, HIGH);
  delay(50);
  digitalWrite(led22, LOW);
  digitalWrite(led26, LOW);
  delay(50);
  digitalWrite(led24, HIGH);
  digitalWrite(led25, HIGH);
  delay(50);
  digitalWrite(led24, LOW);
  digitalWrite(led25, LOW);  
  delay(50);
  digitalWrite(led23, HIGH);
  digitalWrite(led27, HIGH);
  delay(50);
  digitalWrite(led23, LOW);
  digitalWrite(led27, LOW);
  delay(50);
  digitalWrite(led22, HIGH);
  digitalWrite(led26, HIGH);
  delay(50);
  digitalWrite(led22, LOW);
  digitalWrite(led26, LOW);
  delay(50);
  digitalWrite(led22, LOW);
  digitalWrite(led23, LOW);
  digitalWrite(led24, LOW);
  digitalWrite(led25, LOW);
  digitalWrite(led26, LOW);
  digitalWrite(led27, LOW);
  digitalWrite(led28, LOW);

Y tambien esta animacion en pantalla:

lcd.setCursor(0, 0); lcd.print("                             "); 
  lcd.setCursor(0, 1); lcd.print("                             ");
  


  lcd.setCursor(8, 1); lcd.print("[");   
  lcd.setCursor(9, 1); lcd.print("_"); 
  lcd.setCursor(10, 1); lcd.print("_"); 
  lcd.setCursor(11, 1); lcd.print("_"); 
  lcd.setCursor(12, 1); lcd.print("_"); 
  lcd.setCursor(13, 1); lcd.print("_");
  lcd.setCursor(14, 1); lcd.print("_");
  lcd.setCursor(15, 1); lcd.print("]");
  

  
  lcd.setCursor(2,0); lcd.print("S");
  lcd.setCursor(4,0); lcd.print("P"); 
  lcd.setCursor(6,0); lcd.print("E");


  lcd.setCursor(8,0); lcd.print("C");  
  lcd.setCursor(10,0); lcd.print("I"); 
  lcd.setCursor(12,0); lcd.print("A");
  lcd.setCursor(14,0); lcd.print("L");
  

  lcd.setCursor(2,1); lcd.print("M"); 
  lcd.setCursor(4,1); lcd.print("I");
  lcd.setCursor(6,1); lcd.print("S");
  


  lcd.setCursor(8,1); lcd.write(" ");   
  lcd.setCursor(8,1); lcd.print("S"); delay(100);
  lcd.setCursor(9,1); lcd.write(" "); delay(100);
  lcd.setCursor(10,1); lcd.write(" "); 
  lcd.setCursor(10,1); lcd.print("I"); delay(100);
  lcd.setCursor(11,1); lcd.write(" "); delay(100);
  lcd.setCursor(12,1); lcd.write(" "); 
  lcd.setCursor(12,1); lcd.write("O"); delay(100);
  lcd.setCursor(13,1); lcd.write(" "); delay(100);
  lcd.setCursor(14,1); lcd.write(" ");
  lcd.setCursor(14,1); lcd.write("N"); delay(100);
  lcd.setCursor(15,1); lcd.write(" "); delay(100);
  delay(500);

  lcd.setCursor(2,0); lcd.print("S P E C I A L");
  lcd.setCursor(2,1); lcd.print("M I S S I O N");
  delay(200);
  lcd.setCursor(2,0); lcd.print("                      ");
  lcd.setCursor(2,1); lcd.print("                      ");
  delay(200);
  lcd.setCursor(2,0); lcd.print("S P E C I A L");
  lcd.setCursor(2,1); lcd.print("M I S S I O N");
  delay(200);
  lcd.setCursor(2,0); lcd.print("                           ");
  lcd.setCursor(2,1); lcd.print("                           ");
  delay(200);
  lcd.setCursor(2,0); lcd.print("S P E C I A L");
  lcd.setCursor(2,1); lcd.print("M I S S I O N");
  delay(200);

O mantener un texto en pantalla durante unos segundos sin usar delay.

Agradezco muchisimo de antemano la ayuda de la gente de este foro. Este es el unico problema por el cual no puedo terminar mi proyecto.

UN SALUDO.

Ve a Documentación y lee uno de los primeros hilos titulado : Maquina de estados. Luego sobre el final hay un comentario mío donde cambio un código similar al tuyo usando millis().