LCD-Ansteuerung mit ATmega16

Gast #2096963
Lesenswert?

Ich möchte ein 1*16 LCD-Display, mit Controller HD44780 im 4Bit-Mode 
ansteuern. Im Prinzip klappt es. Ich muss aber die Ausgabe nach jeweils 
8 Zeichen umschalten, damit die zweite Displayhälfte beschrieben werden 
kann. Hier der Auszug der Testsoftware:
int main(void)
{
  lcd_init();
  lcd_string("12345678");    // Ausgabe der ersten 8 Zeichen
  lcd_setcursor( 0, 2 );     // Umsetzen des Cursors
  lcd_string("abcdefg");     // Beschreiben der rechten Displayhälfte
 .
 .
 .
}

Meine Frage: Kennt jemand eine elegante Lösung, wie ich die Umsetzung 
nach den ersten 8 Zeichen umgehen kann und einen längeren Text (bis 16 
Zeichen) an einem Stück einschreiben kann?
Es wäre nett, wenn mir hier jemand weiterhelfen würde.
Besten Dank im Voraus.

Wowako
Gast #2097032
Lesenswert?

1
int lcd_putchar(char c, FILE *unused){
2
  static bool nl_seen;
3

4
  if (c == '\r')  //set cursor to second line  {
5
      dogm_gotoxy(0, 1);
6
  }
7
  else if (nl_seen && c != '\n')  {
8
  /*
9
  * First character after newline, clear display and home cursor.
10
  */
11
    
12
  dogm_clear();
13
  dogm_gotoxy(0,0);
14

15
  nl_seen = false;
16
  }
17

18
  if (c == '\n'){
19
      nl_seen = true;
20
  }
21
  else if (c != '\r')  {
22
      dogm_putc(c);
23
  }
24

25
  return 0;
26
}

Ich habe das mit Steuerzeichen gelöst. Danach wurde diese Funktion auf 
printf() gelinkt.
1
  //linking stdout to EA DOGM162L-A Display
2
  static FILE lcd_str = FDEV_SETUP_STREAM(lcd_putchar, NULL, _FDEV_SETUP_WRITE);
3
  stdout = &lcd_str;  //Standardausgabe auf obigen Stream setzen
Den String kann man dan mit printf("1. Linie\n2. Linie\r") ausgeben.

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