Da sind dann sogar noch ausreichend Reserven für andere Dinge vorhanden. Für Dein Vorhaben gibt es hier schon reichlich Code. Anfangen würde ich mit der Uhr. Wenn du diese stellen kannst (oder sie sich selbst stellt, z.B. über DCF) und die Uhrzeit anzeigen kannst, geht es im nächsten Schritt weiter. Entweder du löst es so, dass die Schaltzeiten fest verankert sind, oder dass du sie verstellen kannst (Taster, Drehencoder, RS232,...)

Wenn die Uhr dann läuft und die Sekunde 0 ist, wird geprüft, ob eine (oder mehrere) der Schaltzeiten mit der aktuellen Zeit übereinstimmt und dann dementsprechend die Ports gesetzt. Wait ist für sowas immer schlecht, da dann der uC für alles (außer Interrupts) blockiert ist. Ich selbst nutze Wait nur während die Einschaltmeldung angezeigt wird, danach nutze ich nur noch waitms oder waitus, jeweils mit recht kleinen Zahlen, z.B. bei der Kommunikation mit anderen ICs oder der Abfrage einer Tastaturmatrix.