LCD Textausgabe

Gast #259766
Lesenswert?

Hallo,ich hab mal ne frage.Ich muss sehr viel Text auf einem
Grafikdisplay ausgeben.Dieses mache ich mit
ldi zl,low(txt08*2)  ;Zeiger
 ldi zh,high(txt08*2)  ;auf Text
Der Text ist in einzelnen .db Anweisungen gespeichert.
Kann mann für zb.txt08 auch eine Variable übergeben,damit ich
nur die Variable ändern muss und den eigentlichen Schreibbefehl
per unterprogamm aufrufen kann.
gruss
Andy
Gast #259768
Lesenswert?

Hallo,was ich meine ist,das wenn ich zumbeispiel txt31 anzeigen lassen
will,dieses in eine Variable schreibe und dann nur
ldi zl,low(txt08*2)  ;Zeiger
 ldi zh,high(txt08*2)  ;auf Text
als unterprogramm aufrufe,wobei txt08 dann automatisch txt31 wird.
gruss
Andy
Gast #259770
Lesenswert?

Hallo was ich meine istfolgendes.
Ich habe ca.100 db anweisungen durchnummeriert mit
txt00:
.db  "blabla",0
bis
txt100:
.db  "blabla",0
Um mir nun txt0 anzeigen zu lassen führe ich folgendes aus
ldi r16,4        ;Zeile 0
 ldi r17,19        ;Spalte 0
 rcall posi        ;Schreibposition einstellen
 ldi zl,low(txt08*2)  ;Zeiger
 ldi zh,high(txt08*2)  ;auf Text
 rcall wtf        ;Write Text from Fla
Wenn ich nun zb.txt100 anzeigen lassen will,könnte ich dann nicht
irgendwie txt100 in eine Variable schreiben,und den oben aufgeführten
Code als unterprogramm ausführen,wobei dann aus txt08 txt100 wird und
somit der gewünschte text angezeigt wird.
Ich hoffe,ich habe mich halbwegs verständlich ausgedrückt.
gruss
Andy
Gast #259771
Lesenswert?

Hmmm!

Vielleicht solltest Du einen Offset übergeben anstatt explitzit
text08*2 oder zusammen.
Den Zeiger in deinem Unterprogramm kannste ja immer auf den Anfang
zeigenlassen und mit dem Offset könntest Du ja den Zeiger anpassen.

Gruß Klaus
#259772
Lesenswert?

Du kannst Dir Macros einrichten.
Z. B.:

.macro WriteText
 ldi   zl,low(@0)
 ldi   zh,high(@1)
 rcall wtf
.endm

Aufruf im Programm dann mit

 WriteText txt100

Ist es das was Du meinst?

Ansonsten bereitet mir dieses immer noch Kopfzerbrechen:
"wobei dann aus txt08 txt100 wird"???

mfG
Andi
Gast #259774
Lesenswert?

hallo,ich möchte im programm in eine variable zb.20 schreiben.
dann das ausführen
ldi zl,low(variable*2)  ;Zeiger
 ldi zh,high(variable*2)  ;auf Text
Es geht darum,das ich nur die Variable ändere,dann das u-progamm
aufrufe
und der Zeiger dann auf die gewünschte db anweisung zeigt.
gruss
Andy
#259775
Lesenswert?

Das geht leider nicht ganz so einfach.
Es gibt zwar Möglichkeiten Konstannten mit .equ und .set zu definieren,
aber die sind nicht zur Laufzeit zu gebrauchen.
Für das, was Du willst, wird es etwas komplizierter.
Du mußt Dir eine Tabelle mit 100 Einträgen mit Zeigern auf Deine Texte
erstellen:

TxtTabelle:
.dw txt00, txt01, txt02, txt03 etc...

Dann brauchst Du eine Sub der Du z. B. 3 übergibst (zl) welche sich
dann aus dem 3. (4.) Eintrag die Adresse des Textes in Z holt:

Sub:
 clr   zh
 lsl   zl      ;Text-Nummer * 2 (Wortzugriff)
 rol   zh
 subi  zl,-(low(TxtTabelle*2))    ;Startadresse der Tabelle addieren
 sbci  zh,-(high(TxtTabelle*2))
 lpm   r0,z+    ;Textadresse low-Byte lesen
 lpm   r1,z+    ;Textadresse high-Byte lesen
 movw  zl,r0    ;Textadresse nach Z (zh:zl)
                ;hier dann die Textausgabe

MfG
Andi
#259778
Lesenswert?

In beiliegender Sammlung dürfte "printt" und "printts" das sein, was
du suchst.
Verwendet wird es etwa so:

Dies steht vor der Mainloop und wird nach Abarbeitung eines Menüpunktes
aufgerufen (mp ist die Menüpunktnummer, mt_head und mt_key sind die
Indextabellen):

 locate 0,0                 ;Position der LCD-Ausgabe
 printt mt_head,mp          ;Kopfzeile Menüpunkt ausgeben
 locate 7,0                 ;Position der LCD-Ausgabe
 printt mt_key,mp           ;Fußzeile Tastenzuordnung ausgeben

und am Ende des Programms stehen dann die Indextabellen mit den
Pointern auf die Texte und die Tabellen mit den Texten selbst:

mt_head:        ;obere Menüzeilen (Menüpunkte)
.dw mt_000,mt_010,mt_020,mt_030,mt_040,mt_050,mt_060,mt_070
.dw mt_080,mt_090,mt_100,mt_110,mt_120,mt_130,mt_030,mt_030
.dw mt_160

mt_000:     .db " ***   Edit-Mode    *** ",0,0
mt_010:     .db "  Datentransfer mit PC  ",0,0
mt_020:     .db "zur ersten/letzten Zeile",0,0
mt_030:     .db " eine Zeile hoch/runter ",0,0
mt_040:     .db "  Zeile de/aktivieren   ",0,0
mt_050:     .db " Einstellung Stunde x 1 ",0,0
mt_060:     .db "Einstellung Minute x 10 ",0,0
mt_070:     .db " Einstellung Minute x 1 ",0,0
mt_080:     .db "Einstellung Sekunde x 10",0,0
mt_090:     .db "Einstellung Sekunde x 1 ",0,0
mt_100:     .db "Auswahl des Z",$f5,"ndger",$e1,"tes ",0,0
mt_110:     .db " Z",$f5,"ndkreisnummer x 10   ",0,0
mt_120:     .db " Z",$f5,"ndkreisnummer x 1    ",0,0
mt_130:     .db "Daten ins EEP",$f5,"bernehmen ",0,0

mt_160:     .db " *** Feuerwerk-Mode *** ",0,0

mt_key:         ;untere Menüzeilen (Tastenzuordnung)
.dw mt_007,mt_017,mt_027,mt_037,mt_047,mt_057,mt_067,mt_077
.dw mt_087,mt_097,mt_107,mt_117,mt_127,mt_137,mt_037,leerz
.dw mt_167,mt_177,mt_187,mt_197,mt_197,mt_177a,mt_177a,mt_177a
.dw mt_167,mt_197,mt_197

mt_007:     .db "       Run         ++++>",0,0
mt_017:     .db "<----  Load  Save  ++++>",0,0
mt_027:     .db "<----  Home  End   ++++>",0,0
mt_037:     .db "<----  Up    Down  ++++>",0,0
mt_047:     .db "<----  deakt aktiv ++++>",0,0
mt_057:     .db "<----  +1 h  -1 h  ++++>",0,0
mt_067:     .db "<----  +10m  -10m  ++++>",0,0
mt_077:     .db "<----  +1 m  -1 m  ++++>",0,0
mt_087:     .db "<----  +10s  -10s  ++++>",0,0
mt_097:     .db "<----  +1 s  -1 s  ++++>",0,0
mt_107:     .db "<----  +1    -1    ++++>",0,0
mt_117:     .db "<----  +10   -10   ++++>",0,0
mt_127:     .db "<----  +1    -1    ++++>",0,0
mt_137:     .db "<----  Save  Abort      ",0,0

mt_167:     .db "             Edit  ++++>",0,0
mt_177:     .db "<Menu  Start Skip  Set >",0,0
mt_177a:    .db "       Stop  Skip       ",0,0
mt_187:     .db "<----  Up    Down  ++++>",0,0
mt_197:     .db "<Stop  Shot  Skip  Up   ",0,0

In diesem konkreten Beispiel wird auf einem Textdisplay mit 8 Zeilen a
24 Zeichen in der oberen Zeile eine Überschrift angezeigt und in der
unteren Zeile die Funktion der 4 darunter angeordneten
Bedienungstasten. Das Ganze läuft auf einem Mega8535 und dient als
Steuergerät (Schaltuhr) für Feuerwerke der Klasse 4.

Die Bibliothek (Routinensammlung) ist nicht als Dogma anzusehen, sie
wird so nach und nach an sich ändernde Ansprüche angepasst. Wenn es im
Flash mal eng werden sollte, dann werden unbenutzte Teile davon (von
einer zu verwendenden Kopie) gelöscht.

...
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren