Ausgabe auf dem Display
Beginnt in Zeile 1 und schreibt durchgehend 0, danach geht es in Zeile
4(!) und schreibt hier durchgehend 1.
Schreibt in die 2. Zeile 2 und danach schreibt er 3 über die 0 aus Zeile
1
2) Versuch
Ich nehme aus char buf[] jeweils eine Zahl raus, so dass es pro Zeile 19
Zeichen sind.
Hier wird alles korrekt ausgegeben, nur dass halt das Letzte Zeichen
jeder Zeile nichts anzeigt (logisch bei 19 Zeichen)
3) Versuch
Nun aufbauen auf Versuch 2 jedoch mit #define LCD_WRAP_LINES 1
Nun wird Zeile 1 mit 0 gefüllt und Zeile 2 mit 1 gefüllt. Alle weiteren
Zeichen werden in Zeile 2 geschrieben
4) Versuch
Nun wie in Versuch 3 aber ohne Linefeed.
Er schreibt in die 1. Zeile 0 bis auf das letzte Zeichen, dieses ist die
erste 1. Das läuft alle korrekt bis zu Zahl 2 in Zeile 3. Mit der Zahl 3
springt er wieder in der ersten Zeile und überschreibt diese.
Könnte jetzt noch weitere Test ausführen, aber ich komme nicht auf einen
guten Nenner.
Was gewünscht ist:
Wenn String länger ist als die Zeile (20 Zeichen) soll er in die nächste
optische Zeile (nicht intern) springen und weiterschreiben.
Kommt ein \n vor, soll er ebenfalls in die nächste optische Zeile
wechseln.
Hat jemand solche Probleme schon gehabt?
Bernd schrieb:> Kommt ein \n vor, soll er ebenfalls in die nächste optische Zeile> wechseln.>> Hat jemand solche Probleme schon gehabt?
nicht wirklich
/n ist ein nicht printzeichen und muss raus, der Rest ist deine
Programmiersache, die 40 Zeichen richtig zu verteilen und zwar für alle
isprint() Zeichen solange dein LCD diese Zeichen kennt, wenn nicht sind
die untersten 07 Char frei selber welche zu definieren und entsprechend
zu ersetzen, gerne auch mal ÄÖÜäöüß oder °
Bernd schrieb:> Beginnt in Zeile 1 und schreibt durchgehend 0, danach geht es in Zeile> 4(!) und schreibt hier durchgehend 1.
20 mal die Null (0x00 - 0x13), nächstes Zeichen geht auf die Adresse
0x14, das ist in Zeile 3, aber da kommt "\n" und Fleury geht in die
nächste Zeile, und das ist die Zeile 4.
Was wundert dich daran ?
Hallo Joachim, das '\n' auf den LCDs nicht angezeigt wird, bzw nur als
komisches Sonderzeichen, ist mir bewusst, das wird ja auch abgefangen.
1
voidlcd_putc(charc){
2
uint8_tpos=lcd_waitbusy();// read busy-flag and address counter
3
if(c=='\n'){
4
lcd_newline(pos);
5
}
6
else{
7
lcd_write(c,1);
8
}
9
}/* lcd_putc */
Hallo Marc,
die von dir angedeutete Logik geht in diesem Funktionen aber so meiner
Meinung nach nicht auf.
Soll Ausgabe werden, ohne dass die Zeile unterbrochen wird.
1
voidlcd_putc(charc){
2
uint8_tpos=lcd_waitbusy();// read busy-flag and address counter
3
if(c=='\n'){
4
lcd_newline(pos);
5
}
6
else{
7
lcd_write(c,1);
8
}
9
}/* lcd_putc */
10
11
/* print string on lcd (no auto linefeed) */
12
voidlcd_puts(constchar*s){
13
while(*s!='\0'){
14
lcd_putc(*s++);
15
}
16
17
}/* lcd_puts */
Bei dieser Variante wird der Text in die nächste Zeile verlagert-
1
voidlcd_putc_lf(charc)
2
{
3
uint8_tpos;
4
5
pos=lcd_waitbusy();// read busy-flag and address counter