Du hast nicht verstanden, wie man Schleifen mit do und while 
programmiert.
Die einzige Schleife in deinem Programm ist dies:
1  | do  
  | 
2  | {
 | 
3  |     PORTC = 0;
  | 
4  | }
  | 
5  | while(!(PINB & (0x01)));
  | 
Hier wird der ganze Port C auf Low geschaltet. Und wenn danach PB1=Low 
ist, dann wird das solange wiederholt, bis PB1 nicht mehr Low ist.
Danach (also wenn PB1 nicht mehr Low ist) wir der nächste Block 
ausgeführt:
1  | {
 | 
2  |     PORTC = 0x01;
  | 
3  |     _delay_ms(500);      
  | 
4  |     PORTC = 0x02;
  | 
5  |     _delay_ms(500);  
  | 
6  |     PORTC = 0x04;
  | 
7  |     _delay_ms(500);  
  | 
8  | }
  | 
9  | return 0;
  | 
Das ist der Teil, wo die Klammern nichts Sinnvolles bewirken. Also 
nachdem der Taster losgelassen wird, gehen deine drei LED's nacheinander 
an. Zum Schluss bleibt PC2 an und das Programm ende mit return 0.
Prinzipiell dürfen Mikrocontroller Programme niemals enden, denn dies 
würde Frage aufwerfen, was er denn danach machen soll. Beim AVR fügt der 
Compiler automatisch eine leere Endlosschleife am Ende des Programmes 
sein, damit es bei solchen Fehlern wenigstens nicht abstürzt.
In deinem Fall scheint es sinnvoll, dass das Programm sich nach dem LED 
geblinke wiederholt, so dass es auf den nächsten Tastendruck wartet. 
Also brauchst du zwei verschachtelte Schleifen. VIA hat es schon korrekt 
geschrieben:
1  | int main()
  | 
2  | {
 | 
3  |    initialisierung;
  | 
4  | 
  | 
5  |    while (1)  // Wiederhole endlos oft
  | 
6  |    {
 | 
7  | 
  | 
8  |       while (taste nicht gedrückt)
  | 
9  |       {
 | 
10  |          ; // tu nichts, leere Warteschleife
  | 
11  |       }
  | 
12  | 
  | 
13  |       lasse die LED's blinken
  | 
14  | 
  | 
15  |    }
  | 
16  | }
  | 
Gewöhne Dir ganz schnell an, den Code richtig einzurücken und Leerzeilen 
sinngemäß zu setzen. Dann ist der fehler nämlich offensichtich.
Hier nochmal dein ganzes fehlerhaftes Programm, jedoch mit korrekter 
Formatierung:
1  | #define F_CPU 3686400
  | 
2  | #include <avr/io.h>
  | 
3  | #include <util/delay.h>
  | 
4  | 
  | 
5  | int main()
  | 
6  | {
 | 
7  | 
  | 
8  |     DDRB=0x00;      //PortB Eingänge
  | 
9  |     DDRC=0xFF;      //PortC Ausgänge
  | 
10  |     PORTB=0xFF;     //Pullup 
  | 
11  | 
  | 
12  |     do  
  | 
13  |     {
 | 
14  |         PORTC = 0;
  | 
15  |     }
  | 
16  |     while(!(PINB & (0x01)));    // Wiederhole, solange TasterEin gedrückt
  | 
17  | 
  | 
18  |     // Wenn Taster nicht mehr gedrückt:
  | 
19  |     {
 | 
20  |         PORTC = 0x01;
  | 
21  |         _delay_ms(500);      
  | 
22  |         PORTC = 0x02;
  | 
23  |         _delay_ms(500);  
  | 
24  |         PORTC = 0x04;
  | 
25  |         _delay_ms(500);  
  | 
26  |     }
  | 
27  | 
  | 
28  |     return 0;
  | 
29  | }
  | 
Ist der Fehler jetzt klar?