LCD-display 2.zeile?

Gast #3181850
Lesenswert?

Hallo

Ich hab ein kleines Programm, welches einen LCD display ansteuert wie 
aber kann ich die 2 Zeile ansteuern?

Ich habe nur herausgefunden, dass ich statt der 0x80 in der 
Commando-Funkrtion die 0x40 verwende soll, mit diesem Befehl aber wird 
zwar in die 2.Zeile gesteurt und der Anzeigebalken verschiebt sich auch 
um die Anzahl der eingegebene Buchstaben mehr auch nicht.


#include <avr/io.h>
#include <util/delay.h>

#define RS PC0        //RS= 1---->Daten, RS=0---->Befehl
#define RW PC1
#define EN PC2          //Enable=1 LCD stellt sich auf Empfang ein







int main(void)
{
    DDRC = 0xFF;
  DDRD = 0xFF;


  LCD_init();
  _delay_ms(50);


  LCD_write_string("Hallo");

}

void LCD_init(void)
{
  LCD_commando(0x38);
  _delay_ms(1);

  LCD_commando(0x0F);
  _delay_ms(1);

  LCD_commando(0x01);
  _delay_ms(1);

  LCD_commando(0x80);
  _delay_ms(1);

}


void LCD_commando(unsigned int befehl)
{
  PORTD= befehl;
  PORTC= (0<<RS)|(0<<RW)|(1<<EN);
  _delay_ms(1);

  PORTC= (0<<RS)|(0<<RW)|(0<<EN);
  _delay_ms(50);
  return;
}

void LCD_write(unsigned char buchstabe)
{
  PORTD = buchstabe;
  PORTC = (1<<RS)|(0<<RW)|(1<<EN);
  _delay_ms(1);

  PORTC = (1<<RS)|(0<<RW)|(0<<EN);
  return;
}


void LCD_write_string(unsigned char str[])
{
  int i=0;

  while (str[i] != 0)

  {
    LCD_write(str[i]);
    i++;
  }
}
Gast #3181891
Lesenswert?

Hi

>Ich habe nur herausgefunden, dass ich statt der 0x80 in der
>Commando-Funkrtion die 0x40 verwende soll,

Da bringst du etwas durcheinander. Um den Cursor an eine bestimmte 
Stelle des Displays zu setzen benutzt man den Befehl 'Set DDRAM 
Address'. Und der ist 0b1xxxxxxx. Dabei ist 'xxxxxxx' die Adresse im 
DDRAM. Deine 0x80 (0b10000000) heißt also 'gehe zur Adresse 0 im DDRAM'. 
Deine 0x40 (0b01000000) ist aber nur die Anfangsadresse der 2.Zeile. Um 
an den Anfang der 2.Zeile zu kommen mu?t du Befehl und Adresse 
kombinieren:
 0b10000000 + 0b01000000 = 0b11000000 = 0xC0

mfG Spess

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