LCD Display programmieren in C

OP #2962428
Lesenswert?

Habe folgende Frage:

Ich habe mir ein kleines LCD-Display zugelegt (Powertip PC1604A-P3), 
Habe mir mit einem PIC18F46K22 eine Echtzeituhr mit einem Uhrenquarz an 
Timer0 in C gebastelt.

Jetzt möchte ich die Uhrzeit auf dem LCD-Display ausgeben.
Gibt es Bibliotheken in C die die Ausgabe erleichtern oder muss ich sie 
mir selbst programmieren und wie funktioniert das in C?
Wie funktioniert auch die Ausgabe?

Dank im Vorraus
#2962443
Lesenswert?

Patrick Schwarz schrieb:

> Jetzt möchte ich die Uhrzeit auf dem LCD-Display ausgeben.
> Gibt es Bibliotheken in C die die Ausgabe erleichtern oder muss ich sie
> mir selbst programmieren und wie funktioniert das in C?

Du kannst einen String ausgeben?
1
   char OutString[20] = "Hallo World";
2
   lcd_string( OutString );
Dann kannst du im einfachsten 'Faulsein-Fall' zb das hier machen
1
   char OutString[20];
2

3
   sprintf( OutString, "%02d:%02d - %02d", (int)Hour, (int)Minute, (int)Second );
4
   lcd_string( OutString );

sprintf ist ein Universal-Arbeitspferd und demenstprechend langsam und 
umfangreich. Wenn Programmgröße kein Problem darstellt und auch die 
Laufzeit kein Thema ist, kann man es benutzen.
Wenn nicht, dann macht man sich eben selbst eine Funktion dafür.
Gast #2962465
Lesenswert?

Hi,
du könntest den Quellcode von

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung

nehmen.

Musst allerdings die verwendetet Datentypen anpassen
(also z.B. "unsigned char" anstatt "uint8_t")
und du musst dir die beidne delay Funktionen (_delay_ms(), delay_us() ) 
noch schreiben.

Hab ich bei meinem aktuellen pic Projekt mit nem PIC18F26K20 auch so 
gemacht und es funktioniert einwandfrei.

MfG Elko
OP #2962466
Lesenswert?

>Du kannst einen String ausgeben?
>   char OutString[20] = "Hallo World";
>   lcd_string( OutString );
>Dann kannst du im einfachsten 'Faulsein-Fall' zb das hier machen
>   char OutString[20];

>   sprintf( OutString, "%02d:%02d - %02d", (int)Hour, (int)Minute, 
>>>>>>>>(int)Second );
>   lcd_string( OutString );

Wie zentriere ich dann die Schrift d.h. wie füge ich zusätzlich 
Leerzeichen ein? (Tut mir leid ich habe von der Ausgabe auf ein LCD 
Bildschirm wirklich keine Ahnung)
#2962470
Lesenswert?

Mit time.h, conio.h und stdio.h kannst Du Dir was basteln ... dann fehlt 
aber noch der Treiber und der dürfte knifflig werden.

Hier findest Du die Standard-Headerdateien:
http://www2.informatik.uni-halle.de/lehre/c/c_header.html

Für den 18F46K22 wirst Du selbst eine Headerdatei schreiben müssen, 
siehe auch:
http://www.ccsinfo.com/forum/viewtopic.php?t=30964
Der hat einen 18F452 verwendet.
#2962567
Lesenswert?

> aber ich habe bei einem Beispiel gesehen, dass dies nicht viel ändert
> nur 3-4 Änderungen im gesamten Code
Im Prinzip kannst Du die Headerdateien aus dem obigen Projekt für den 
HD44780
ansatzweise (wobei die Betonung auf Ansatz liegt) übernehmen, da dieses 
Display ja nur eine 5x8 Punktmatrix bringt und dann heißt es tüfteln und 
Anpassungen schreiben ... oder es hat schon mal jemand anderes mit 
Deinem Display was versucht.
#2962596
Lesenswert?

Patrick Schwarz schrieb:

> Wie zentriere ich dann die Schrift d.h. wie füge ich zusätzlich
> Leerzeichen ein?

Das ist jetzt aber weniger eine Frage der LCD Ausgabe, sondern eine 
Frage dessen wie "gut" deine C-Kentnisse bzw. deine Fähigkeiten in 
grundlegender Mathematik sind, die jeder Grundschüler in der 3. Klasse 
beherrscht.

> (Tut mir leid ich habe von der Ausgabe auf ein LCD
> Bildschirm wirklich keine Ahnung)

Es ist ganz einfach:
Da sind 16 Ausgabepositionen pro Zeile.
An jede Ausgabeposition kannst du ein Zeichen malen lassen.

Wenn du also einen Text, der zum Beispiel 12 Zeichen lang ist, auf 16 
Ausgabepositionen so ausgeben willst, dass er zentriert in der Mitte 
steht, in welcher Spalte musst du dann mit der Ausgabe anfangen, damit 
sich das genau so ausgeht, wie du das haben willst und der 12-Zeichen 
lange Text in der Mitte auftaucht?

> Viel mehr ist das Problem, dass ich die Logik hinter
> der LCD-Ansteuerung verstehe!

Es ist genau dieselbe Logik, mit der man auf karriertem Papier "Muster" 
macht, indem man in einige Kästchen ein 'x' malt und den Inhalt von 
anderen Kästchen dadurch 'löscht', in dem man mit TippEx ein 
'Leerzeichen' drübermalt. Alles darüber hinausgehende, das du gerne 
hättest, ist dein Bier und wird von dir programmiert. Und im Regelfall 
reicht das auch. Denn auf so einem Text-LCD kann man sowieso keine 
wahnsinnig aufregende Grafiken machen. Das geht schon rein aus 
technischen Gründen nicht.

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