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.
Also ... die Fonts wirst du dir selber neu erzeugen müssen.
Für einen 16*12 Font wäre der Aufbau wie folgt :
In einem Buchstaben sind die ersten 2 Bytes im Font (die ersten 16bit halt) sind die erste Zeile.
Die nächsten 2Byte sind die nächste Zeile usw.
D.h. ein Buchstabe besteht aus 24 Byte.
Genau wie bei einem Bitmap auch.
Jetzt brauch man für ASCII 256 Buchstaben.
Die werden einfach hintereinander geschrieben.
Also die ersten 24 Bytes sind für den ASCII-Wert 0 die nächsten für den ASCII-Wert 2 und so weiter bis 255.
Eigentlich hast du 256 Bitmaps hintereinander geklatscht.
Da musst du dann aber auch leere Bitmaps einfügen für nicht druckbare ASCII-Zeichen.
D.h. Im einfachsten Fall machst du dir für alle Zeichen die du brauchst gedrehte Buchstabengrafiken.
Dann konvertierst du die alle und schreibst sie hintereinander mit ein paar leeren Bitmaps zwischen drin (so dass sie an der richtigen Stelle liegen.)
Du kannst aber auch versuchen ein Tool zu schreiben was dir die schon vorhandenen Fonts dreht.
Ist nicht ganz einfach sollte aber machbar sein.
gibt mal wieder neues von meiner Lib. Es gibt nun 2 neue Controls: Ein Text-Eingabefeld und eine Quertz-Tastatur(50px hoch, 160px breit; y-offset einstellbar).
Desweiteren gibt es ein paar Buxfixes - wobei bestimmt noch ein paar Neue dazugekommen sind. Die Geschwindigkeitsoptimierung habe ich noch nicht gemacht - habe ich jedoch demnächst vor, was dank den write/read_byte Befehlen einfacher geworden ist.
Ich kopiere auch gleich mal das Makefile und einen Beispielsource für Tastatur und Textbox mit rein. Die Bibliothek muss in ./include/
Das Hochkant-Projekt habe ich erstmal zurückgestellt.
Somit viel Spaß beim Testen. (Denkt dran evtl. die Ports in der lcd.h zu ändern)
Im Anhang auch noch 2 Bilder des Beispiels.
MfG
C_Classic
PS: Da is noch ein Fehler im Beispielskript: Zeile 67 muss von char text[2]; auf char text[2]="-"; geändert werden
Verbesserung von DrawHorizontalLine (Ist zur Zeit seeeehhhhhr langsam)
Nummern-Tastatur
Was würdet ihr davon halten, wenn ich einen RN-WIKI-Eintrag zum LCD bzw. der Lib erstelle? Und soll ich die Lib dann in die Wiki oder bei SourceForge hochladen?
So,
hab jetzt mal den Wiki-Eintrag gemacht. Ist zwar wahrscheinlich noch net ganz fertig.
Würde mich aber trotzdem mal freuen, wenn ihr mal drüberschauen könntet und am besten auch gleich die Lib probiert.
Hier ist der Link: http://www.rn-wissen.de/index.php/DG16080_GLCD
Auf der Projektseite (SourceForge - Link im Wiki) findet ihr jetzt auch Beispielcode für alle Elemente.
Lesezeichen