mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Textausgabe


Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Kassner (andi_k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meinst Du sowas?

 ldi   zl,low(2*txt08)
 ldi   zh,high(2*txt08)
 rcall PrintStr
 ...

txt08: .db "Hello World",0

PrintStr:
 lpm   r16,z+
 tst   r16
 breq  PrtStrEnd
 rcall lcd_data
 rjmp  PrintStr
PrtStrEnd:
 ret

Ist doch die einfachste Übung ;-)

MfG
Andi

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Kassner (andi_k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soll in txt08 nicht nur Text, sondern auch Pointer auf andere Texte
stehen, oder was meinst Du?
Beschreibe mal genauer was Du willst.

MfG
Andi

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Kassner (andi_k)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Kassner (andi_k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sollte natürlich so aussehen:
.macro WriteText
 ldi   zl,low(@0)
 ldi   zh,high(@0)  <-- hier war vorher der Fehler
 rcall wtf
.endm

MfG
Andi

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Kassner (andi_k)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,das sieht doch gut aus.Werd ich gleich mal ausprobieren.Danke für
die antwort und deine geduld.
gruss
Andy

Autor: Andreas Kassner (andi_k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, in den Textadressen der Tabelle muß überall ein "* 2"
dahinter:
.dw txt00*2, txt01*2, txt02*2, txt03*2 etc...

MfG
Andi

Autor: Hannes Lux (hannes)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ganz vergessen:

Mojje Andi... - Schönen Sonntagabend wünsche ich dir...

Bit- & Bytebruch...
...HanneS...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.