Forum: Mikrocontroller und Digitale Elektronik LCD ausgabe in C


von Alex (Gast)


Lesenswert?

Moin Moin,

mal so ne frage, ich bin ziemlich neu beim Programmieren mit  und ich 
habe bis jetzt leider noch nichts gefunden, wie ich in C daten an ein 
LCD übergebe, mit Assembler mache ich das so

Text:  db 'Text fuer LCD',0

und so wird es dann an das LCD übergeben:

LCD_DB_Text:  mov  LCD_NZ,#000h
LCD_DB_Text1:  mov  A,LCD_NZ
    movc   A,@A+DPTR
    jz  LCD_DB_Text2
    mov  LCD_Wert,A
    lcall  LCD_Anz
    inc  LCD_NZ
    sjmp  LCD_DB_Text1
LCD_DB_Text2:  ret


Wie ich die übergabe an das LCD per C mache ist nicht schwer, jedoch was 
für mich schwerer ist, ist das mit der DB, wo der Text drin steht.

Wer kann mir da helfen? =)

von Uwe (de0508)


Lesenswert?

Hallo Alex,

vorweg, warum nutzt Du nicht die Suchfunktion des Forums ?

Schau mal hier :

Das ist der Standart: Peter Fleury "LCD library for HD44870 based LCD"
[1]; zumindest bei mir und einigen anderen.

Peter PeDa hat auch eine sehr schnelle und kleine LCD Lib [2]
geschrieben.

Link:
[1] http://homepage.hispeed.ch/peterfleury/avr-software.html
[2] 
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=102296

von Peter II (Gast)


Lesenswert?

wenn noch genug ram vorhanden ist kannst du einfach schreiben

lcd_send("Text fuer LCD");

lcd_send ist ann die funktion die das senden übernimmt (keine ahnung wie 
die bei dir heist)

wenn aber der speicher knapp wird, dann musst du mit PROGMEM

const char lcd_text[] PROGMEM = "Text fuer LCD";  // Flash

und dann musst du eine lcd_funtion haben die mit lcd_text umgenen kann.

von Andreas D. (rackandboneman)


Lesenswert?

char *lcd_text="Text für LCD";

Bei einigen Compilern muss das vor jeglichen ->Funktionsaufrufen oder 
->Kontrollstrukturen in einem ->Block stehen, und auch bei denen die 
anderes zulassen sollte man es der Kompatibilität wegen so halten.

Nachtrag: das beschreibt nur wie man die Konstante anlegt, nicht wie man 
sie ausgibt. Const darf man auch davorschreiben; Vorsicht: Risiko von 
Missverständnissen siehe 
http://stackoverflow.com/questions/890535/what-is-the-difference-between-char-const-and-const-char

von Klaus W. (mfgkw)


Lesenswert?

Andy D. schrieb:
> Bei einigen Compilern muss das vor jeglichen ->Funktionsaufrufen oder
> ->Kontrollstrukturen in einem ->Block stehen, und auch bei denen die
> anderes zulassen sollte man es der Kompatibilität wegen so halten.

Liegt es an mir, wenn ich davon jetzt nichts verstanden habe?

von Alex (Gast)


Lesenswert?

Wenn ich das verwende:

const char lcd_text[] PROGMEM = "Text fuer LCD";


Dann bekomme ich immer ienen Fehler und zwar:

missing ';' before 'PROGMEN'


Jemand eine Idee?

von Peter II (Gast)


Lesenswert?

Alex schrieb:
> Dann bekomme ich immer ienen Fehler und zwar:

dann wird es jetzt aber erstmal zeit das du uns sagst welche hardware 
und welchen compieler du verwendest.

von Hubert G. (hubertg)


Lesenswert?

Auf das vergessen?
#include <avr/pgmspace.h>

von Andreas D. (rackandboneman)


Lesenswert?

PROGME*N* ?

von Alex (Gast)


Lesenswert?

Keil 4 und ich verwend nen Atmel Controller.

von Peter D. (peda)


Lesenswert?

Alex schrieb:
> Jemand eine Idee?

Lies das Manual zu Deinen ungenanten Compiler.

PROGMEM ist nur für den AVR-GCC gültig.

Es geht aber auch ohne explizite Flash-Zuweisung:
1
lcd_send("Text fuer LCD");


Peter

von Andreas D. (rackandboneman)


Lesenswert?

Wenn da nicht vorher zu lesen wäre "avr" hätten die Stichworte Keil und 
Atmel hier so manchen auf den Holzweg geführt (da würde man einen 8051 
annehmen!).

von Peter D. (peda)


Lesenswert?

Andy D. schrieb:
> die Stichworte Keil und
> Atmel hier so manchen auf den Holzweg geführt (da würde man einen 8051
> annehmen!).

Keil und Atmel kann aber auch ARM sein.
Der Assemblercode oben ist aber eindeutig 8051.


Peter

von Alex (Gast)


Lesenswert?

Un jetz noch ne doofe Frage ^^

Wie mache ich "lcd_send" bekannt?

von Alex (Gast)


Lesenswert?

ach ne halt, hat sich erledigt =D

von Alex (Gast)


Lesenswert?

Danke an euch alle =)

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
Noch kein Account? Hier anmelden.