Wie bekomme ich das hin z.B. 1x drücken = LED bleibt an und wieder 1x drücken = LED geht wieder aus?
Zuerst brauchst du mal eine Entprell Routine.
ein Taster schließt und öffnet während einer Betätigung mehrmals und somit wäre dein Zustand der LED hinterher nicht eindeutig.
Als nächstes musst Du den Zustand der Taste abspeichern und erst wieder reagieren wenn die Taste von 0 nach 1 wechselt, wenn der Taster gegen GND schaltet natürlich von 1->0.

Beispiel:
In deinem Programm wird zyklisch die Taste über die Entprell Routine abgefragt. Ändert sich der Zustand von vorher 0 -> 1 (1 -> 0 bei GND)wird deine LED ein bzw. aus geschaltet.

Das ist ein Weg der Realisierung.
Man kann das auch über Interrupts, Timerabfragen oder sonstwas hinkriegen.
Es kommt halt darauf an, was der Controller sonst noch zu tun hat und ob da noch Timer frei sind, oder ohnehin Zyklisch Interrupts produzieren.