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++; } }
schau mal bei Sprut vorbei, er hat die Zusammenhänge gut dokumentiert..... http://sprut.de/electronic/lcd/index.htm
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
@Azubi Deine void LCD_init(void) Routine ist, so wie ich es sehe, Unvollständig. Schau ins Datenblatt da steht was alles rein soll.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.