In der while(1)-hauptschleife werden nacheinander die drei Delayzähler runtergezählt, die sind ja am Anfang 2000, 100 u. 50
Solange in denen was drin steht, wird nur EINMAL Softdelay angesprungen.
Der mit 50 wird als erstes Null kriegen. In diesem Fall rufen wir erstes() auf und setzen den Zähler wieder auf 50 fürs nächste mal.
Das passiert so bei allen drei Zählern.

erstes()
der erhöht i_1 und schiebt Patt_1 nach links.
ist (i_1 > 7), setzt er i_1 wieder auf Null und erneuert Patt_1
Jedesmal aber mischt er Patt_1 in P2:
P2 &= 0xFF00; löschen des gesamten Bytes in P2
P2 |= Patt_1; neusetzen aktueller Wert

zweites()
ist ganz ähnlich, nur schiebt er Patt_2 bei i_2: 0 -> 6 nach links, bei i_2: 7 -> 11 nach rechst. Bei zwölf alles wieder neu.

drittes()
der schaltet das bit in Port 15 einfach immer um (toggle) , einmal 1 und einmal 0

Tut mit leid, wenn ein Fehler drin ist