Moin

Nun ... ja ...
Es sollte an sich kein großer Aufwand sein.
Zumal man fast nichts umstellen müsste, wenn man ein paar Abstriche macht.

Du kannst ja einfach hochkant zeichnen.
Ob du jetzt eine X-Achse von links nach rechts oder von oben nach unten hast ist reine Definitionssache. (Name sind Schall und Rauch.)
D.h. man müsste für eine vertikale Linie anstatt von 10,5 nach 50,5 einfach von 5,10 nach 5,50 malen.
Dafür muss man am Grafikcode ja nichts ändern.


Einzigster Knackpunkt sind die Fonts und die Bitmaps.

Bitmaps :
Die kann man auch einfach gedreht abspeichern.
Sprich vorm konvertieren im Grafikprogramm entsprechend drehen.

Oder du schreibt meine Bitmaproutine um (dafür musst du dich halt entsprechend ins den Controller vom Display einlesen um zu wissen welches Bit wo hin muss).
Dann kannst du die selben Bitmaps in beiden Modi anzeigen.
Dafür fällt mir ad hoc kein performanter weg ein, die dann beim Ausgeben in den Displayspeicher zu drehen.
Was gehen könnte wäre Pixelweise zu Plotten (nicht wie im Moment Byteweise). Das wäre grob geschätzt um Faktor 8-10 langsamer.
Immer 8 Pixel in einer Zeile sind 1Byte im Displayspeicher.
Das kann man leider nicht Umstellen.

Allergrößtes Problem sind die Fonts.
Allerdings wenn du gedrehte Bitmaps hast (entweder Routine umgeschrieben oder gedreht im Grafikprogramm) musst du nur umstellen, dass die einzelnen Buchstaben in Y Richtung anstatt in X Richtung versetzt werden.
Siehe lcd_plot_text().

Also in Kurz :
Möglichkeit 1 :
Einfach gedrehte Bitmaps benutzen, beim Zeichnen X und Y tauschen.
Perfomant, schnell umgestellt.
Während dem Betrieb das Bild drehen nur möglich, wenn man alle Bitmaps 2 mal hat.

Möglichkeit 2 :
Bitmaps selber drehen.
Beim Zeichnen auch nur X und Y tauschen.
Langsam, eventuell der Overkill für den Controller, vermutlich ziemlich komplexer Code.
Großer Implementierungsaufwand (zumal ich dir nicht aktiv helfen werden kann).
Aber drehen im Laufenden Betrieb mit nur einem Satz Bitmaps möglich.

Ich wäre für Möglichkeit 1.

Aber wie gesagt ich würde mich an deiner Stelle mal in die Lowlevel-Funktionen des LC7981 einlesen, dann sollte sich dir die Problematik von alleine erschließen.

Gruß
Sebastian