LCD-Testprogramm Verständnisproblem

OP #2778561
Hallo Leute,

wenn ich folgenden Quellcode an mein 2 zeiliges LCD-Display (HD44870) 
übertrage erscheint in der ersten Zeile das Symbol * und in der zweiten 
Zeile die Zahl 42. Wie sehe ich, dass das Symbol * in die erste Zeile 
soll und wie mussich vorgehen, wenn ich das Symbol in der zweiten Zeile 
haben will.
Danke im Voraus


//
// Anpassungen im makefile:
//    ATMega8 => MCU=atmega8 im makefile einstellen
//    lcd-routines.c in SRC = ... Zeile anhängen
//
#include <avr/io.h>
#include <stdlib.h>
#include "lcd-routines.h"

// Beispiel
int variable = 42;

int main(void)
{
  lcd_init();

  // Ausgabe des Zeichens dessen ASCII-Code gleich dem Variablenwert ist
  // (Im Beispiel entspricht der ASCII-Code 42 dem Zeichen *)
  // http://www.code-knacker.de/ascii.htm
  lcd_data( variable );

  lcd_setcursor( 0, 2 );

  // Ausgabe der Variable als Text in dezimaler Schreibweise
  {
     // ... umwandeln siehe FAQ Artikel bei 
http://www.mikrocontroller.net/Articles/FAQ
     // WinAVR hat eine itoa()-Funktion, das erfordert obiges #include 
<stdlib.h>
     char Buffer[20]; // in diesem {} lokal
     itoa( variable, Buffer, 10 );

     // ... ausgeben
     lcd_string( Buffer );
  }

  while(1)
  {
  }

  return 0;
}
#2778601
Walter Klevenz schrieb:

> Zeile die Zahl 42. Wie sehe ich, dass das Symbol * in die erste Zeile
> soll

Das ist implizit.
Wird das LCD initialisiert beginnt es links oben in der ersten Zeile, 
erste Spalte mit der Ausgabe
(*)

> und wie mussich vorgehen, wenn ich das Symbol in der zweiten Zeile
> haben will.

Die Ausgabeposition nennt man allgemein den 'Cursor'. Dort wo der Cursor 
steht, wird das nächste Zeichen ausgegeben (und der Cursor wandert eine 
Position weiter)

Was in deinem Code erinnert dich vom Namen her an 'den Cursor' und 
könnte daher zur Steuerung bzw. gezielten Positionierung des 'Cursors' 
verantwortlich sein?

(*) Diese Aussage ist gleichwertig mit:
Nach dem Initialisieren steht der Cursor in Zeile 0, Spalte 0
OP #2778670
Vielen Dank,
also heißt das, dass bei der Erstinitialisierung der Cursor in Zeile 1 
an Position 0 steht. Wie sieht es aber aus, wenn ich bei dem Befehl
lcd_string( Buffer );
diese Ausgabe in Zeile 2 anzeigen lassen will und
lcd_data( variable );
lcd_setcursor( 0, 2 );
in Zeile 1 haben möchte?
Bei lcd_setcursor(0, 2 ); sieht man ja, dass Zeile 2 gemeint ist, aber 
bei dem anderen nicht.
Vielen Dank im Voraus!!
#2778679
Wie bereits gesagt, darfst du dir gerne nach dem lcd_init ein implizites 
lcd_setcursor dazudenken. Denn genau das ist der Zustand, in dem das LCD 
nach dem init ist. Und den kennst du, der ist immer nach dem Init so.

Deine Sequenz ist dann
1
  lcd_init();
2
  lcd_setcursor( 0, 1 );
3

4
  lcd_data( variable );
5

6
  lcd_setcursor( 0, 2 );
7
  ...
8
  lcd_string( Buffer );
9
}

jetzt noch ein bisschen die Leerzeile umgruppieren
1
  lcd_init();
2

3
  // Einzelzeichen ausgeben
4
  lcd_setcursor( 0, 1 );    // alle weitere ab Zeile 1/Spalte 0 ausgeben
5
  lcd_data( variable );
6

7
  // Zahl in String umwandeln und ausgeben
8
  lcd_setcursor( 0, 2 );    // alles weitere ab Zeile 2/Spalte 0 ausgeben
9
  ...
10
  lcd_string( Buffer );
11
}

wenn du jetzt die Einzelteile an anderen Stellen am LCD haben willst, wo 
wirst du daher eingreifen müssen?

Zuerst den Cursor positionieren .... dann ausgeben.
OP #2779318
Vielen Dank Herr Buchegger,

das habe ich verstanden dank Ihrer guten Erklärung.
Nun noch eine Frage: Wenn ich nun mehrere Variable verwenden will
wie z.B. int variable = 42;
         int variable1 = 52;
         int variable2 = 62;
Kann ich das dann auch irgendwie alles in einer Zeile (Kurzschreibweise)
unterbringen?
Außerdem noch:
Wie kann ich in C einen String deklarieren?
Vielen Dank im Voraus
#2779329
Walter Klevenz schrieb:
> Vielen Dank Herr Buchegger,

Huch!
Ich bin der Karl Heinz. Der "Herr" Buchegger ist mein Vater.


(Im Ernst: In Foren geht es nicht förmlich zu. Wir sind hier automatisch 
per Du)

> das habe ich verstanden dank Ihrer guten Erklärung.
> Nun noch eine Frage: Wenn ich nun mehrere Variable verwenden will
> wie z.B. int variable = 42;
>          int variable1 = 52;
>          int variable2 = 62;
> Kann ich das dann auch irgendwie alles in einer Zeile (Kurzschreibweise)
> unterbringen?

Vor allen Dingen brauchst du jetzt erst mal ganz dringend ein C-Buch!

  int a = 5, b = 8, c = 9, d, e = 43;

> Außerdem noch:
> Wie kann ich in C einen String deklarieren?

   lcd_string( "Hallo Welt" );

   char* test = "Hallo Welt";
   lcd_string( test );


   char test2[] = "Noch mal hallo"
   lcd_string( test2 );


String-Verarbeitung in C
(Das ist die Kurzfassung! Du brauchst trotzdem ein C-Buch)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.