Warum setzt du DDRD zwei mal?
Wie kommst du aus der while-Schleife nach _delay_ms()?
Brauchst du evtl pullups? (die Taster sind offenbar low-aktiv)
Ist es wirklich eine gute Idee, main() zu verlassen?