1. Du musst oben in der Deklaration "uint8_t led[8];" statt "uint8_t led[7];" schreiben, da du 8 Speicherstellen haben willst und nicht 7! Gezählt wird dann nachher von 0 bis 7 - das ist richtig. In deinem Fall greifst du nun einfach auf eine Speicherstelle zu, die nicht mehr zu deinen Variabeln gehört...

2. Die For-Schleife:
Du testest auf "zaehler2 ==1". Mach da mal "zaehler2 >=1" - dann sollte es klappen!

EDIT: Stell deine Main-For-Schleife mal um, so wie ich es dir gesagt hab. Das tut ja weh an den Augen mit dem komischen endlos-Zähler! *LOL*

EDIT2: "zaehler = zaehler + 1;" macht man in C aber so: "zaehler++;" oder je nach Anwendungsfall "++zaehler;"