LCD-Textausgabe vereinfachen

Gast #29826
Hallo,

ich habe an meinem 4433 ein 20x4 Zeilen LCD und momentan steuere ich das 
LCD mit dem Programm an, das im AVR-Tutorial beschrieben wird.
Nun meine Frage: Gibt es nicht eine einfachere Möglichkeit Texte 
auszugeben? Die im Tutorial beschriebene Möglichkeit ist ziehmlich 
aufwendig, da ich immer nur ein Zeichen sende!

Thx

Andreas
Gast
Also immer nur ein Zeichen an das LCD zu schicken, das wird bleiben, da 
die meisten LCD's nur max. 8 Bit auf einmal empfangen können. Du kannst 
aber deinen Code vereinfachen. Falls du grundsätzlich immer eine 
Eingangsmaske hast oder ähnliches. Das legst du dann im Eprom ab und 
greifst darauf zu. Ich glaube in der Codesammlung war so ein Programm. 
Aber besser wäre es zu wissen ob du BASIC, C oder assembler nutzt??

Sven
Gast
Hallo,

ich nutze FASTAVR, einen Basic-Compiler, da gibt es nur 3 Zeilen:

1. Display-Ports festlegen, wo Daten und Befehle
2. Startposition, Zeile, Spalte (Zeichenposition)
3. den zu schreibenden Text

in echt dann so:

$Lcd = PORTD.1, rs = PORTB.2, en =PORTD.0, 20,4     ' Anschlüsse des LCD 
zuweisen

Locate 1,5            'Start Position festlegen, hier 1. Zeile, 5. 
Segment
LCD "Hallo"          ' Schreibe Hallo


Fertig, und die Tools zum Grafikdisplay sind noch mehr unterstützt, 
eigene Fonts, Rechtecke, invertiert uvm.

Ich finds echt klasse und sehr einfach...

Gruss
A. Arndt
Admin Persönliche Seite
Mit den entsprechenden Makros geht das in Assembler genauso einfach.

; LCD-Cursor an bestimmte Position setzen
; Beispiel: locate 1, 5
.MACRO locate ;(Zeile,Spalte)
        push temp1
        ldi temp1, 0b10000000|(((@0)-1)<<6)|((@1)-1)
        rcall lcd_command
        pop temp1
.ENDMACRO

; String aus dem Flash-ROM auf dem LCD anzeigen
; Beispiel: print t_hallo
.MACRO print ;(String-Adresse)
        push ZL
        push ZH
        ldi ZL, LOW(@0)
        ldi ZH, HIGH(@0)
        rcall printstring
        pop ZH
        pop ZL
.ENDMACRO

Man kann das Ganze auch so machen dass man direkt einen String als 
Argument übergibt:

; String aus dem Flash-ROM auf dem LCD anzeigen
; Beispiel: print "hallo"
.MACRO print ;(String)
        push ZL
        push ZH
        rjmp skip
text:   .db @0, 0
skip:   ldi ZL, LOW(text)
        ldi ZH, HIGH(text)
        rcall printstring
        pop ZH
        pop ZL
.ENDMACROX

Bin mir aber nicht ganz sicher ob das auch im (primitiven) 
Original-Assembler von Atmel funktioniert, da dieser wahrscheinlich 
"duplicate label" oder etwas ähnliches ausspuckt wenn man das Makro 2mal 
in einem Programm verwendet.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.