Hay habe heute die ansteuerung zu meinem Textdisplay mit einem hd44780
controller und 2*16 zeichen im 4Bit modus fertig gestellt.
jetzt wollte ich gerne das es leichter berrechnungen ausgiebt,
heißt:
int main(void)
{
int i;
i=4;
lcd_init();
lcd_setcursor( 0, 1 );
lcd_string("Hello World!");
while(1)
{
i=i+5;
lcd_setcursor( 0, 2 );
lcd_string("Betrag: %d,i");
}
return 0;
}
doch anstatt wenigstens 5 neben dem Betrag auszugeben und hoch zu
addieren gibt er es mit so aus wie es dort steht, dachte es würde so wie
bei der printf funktion klappen, tut es aber nicht wie stelle ich so nun
an?
MfG
Hallo Jan,
ohne deinen LCD-Code zu kennen, kann man dir nur beschränkt helfen !
nun man kann das so Programmieren wie sprintf, wenn man weiß wie das
geht.
Sonst nimm halt itoa oder ltoa.
ok ?
Nimm doch sprintf. Damit kannst du so formatieren wie du es von printf
gewöhnt bist und das Ergebniss in einen String rausschreiben. Den String
bekommt deine lcd routine.
Die Annahme, die LCD Print Routine (welche auch immer das ist), könnte
dies schon von sich aus, ist natürlich Quatsch.
@Uwe:
itao und co. bringen dir wenig, wenn du z.B. führende Nullen usw. haben
möchstest. Dafür ist das printf geraffel ja da.
gruß cyblord
@cyblord,
ja ist klar, wollte auch nur die Basics darstellen. Ich verwende
entweder die elm chan, die von PeDa oder eine selbst geschriebene
Routine.
Hier mal die ersten in der Anlage.
sprintf, nicht printf.
schau dir einfach mal den syntax an.
Wie gesagt, du gibst deinen Format-String und deine Variablen rein (wie
bei printf) und das Ergebniss wird in einen String geschrieben.
Was ist daran unverständlich?
PS: Die Header Datei zu posten ist echt genial!
ah okay in welcher header datei finde ich den sprintf? in der stdio.h?
also schreibe ich dann einfach, ist das richtig?
int main(void)
{
int i;
i=4;
lcd_init();
lcd_setcursor( 0, 1 );
lcd_string("Hello World!");
while(1)
{
i=i+5;
lcd_setcursor( 0, 2 );
sprintf(filename,"Betrag: %d",i);
}
return 0;
}
vielen dank für eure unterstützung :)
ahh okay danke verstehe :)
die 16 steht für die breite ist das richtig?
int main(void)
{
char text[16];
int i;
i=4;
lcd_init();
lcd_setcursor( 0, 1 );
lcd_string("Hello World!");
while(1)
{
i=i+5;
lcd_setcursor( 0, 2 );
sprintf(text,"Betrag: %d",i);
lcd_string(text);
}
return 0;
}
so sollte es jetzt richtig sein oder? :)
Vielen dank es ist manchmal echt schwer sich durch so viele fachbegriffe
zu kämpfen wenn man noch nicht so viel weiß :)
aber man lernt ja durch die Übung :)
Jan schrieb:> ahh okay danke verstehe :)> die 16 steht für die breite ist das richtig?
Nunja, die sagt halt aus dass du ein Array mit 16 chars anlegst. D.h. du
kannst in deiner text Variable max. 16 Zeichen speichern. Und ja, die 16
deshalb weil du eben ein 16 Zeichen Display hast und man selten mehr als
eine Zeile aufeinmal im Speicher halten muss.
> so sollte es jetzt richtig sein oder? :)
Soweit ich sehe ja.
Auch wenn deine Schleife da wahrscheinlich so schnell läuft, dass du auf
dem Display nicht viel sehen wirst. Eventuell noch ein delay einfügen.
ja funktioniert :D
habe noch nen delay eingefügt :)
so super :=
dann fange ich mal an mit tastern zu arbeiten :)
und versuche die if funktion einzubeziehen:)
besten Dank an euch allen :)
Hallo,
cyblord ---- schrieb:>> die 16 steht für die breite ist das richtig?>> Nunja, die sagt halt aus dass du ein Array mit 16 chars anlegst. D.h. du> kannst in deiner text Variable max. 16 Zeichen speichern. Und ja, die 16> deshalb weil du eben ein 16 Zeichen Display hast und man selten mehr als> eine Zeile aufeinmal im Speicher halten muss.
Hier muss man etwas genauer sein. Platz für 16 Byte ja, aber ein String
mit der Länge 0 benötigt schon 1 Byte! Bei 16 Zeichenlänge eines Strings
sind das nun 17 Byte im array of char.
Die Länge des LCD ist unwichtig.
Man muß schon die maximale Länge des Strings ermitteln, da
Speicherüberläufe sehr schwer zu debuggen sind.
Text: 8 Byte
Integer-Zahl: 6 Byte
Null: 1 Byte
= 15 Byte.
Man muß also mindestens 15 Byte reservieren.
Peter
ah okay :) glaube ich habe es grob verstanden also muss ich maximal
17byte reservieren 16 für day display und 1 wenn der text 0 ist.
aber wieso reservierst du 6byte für die integer? dafür das der integer i
mal über den wert 99999 geht?
und der text 8byte bezieht sich auf "Betrag: " sehe ichdas so richtig?
MfG und besten Dank :)
Jan schrieb:> ah okay :) glaube ich habe es grob verstanden also muss ich maximal> 17byte reservieren 16 für day display und 1 wenn der text 0 ist.>> aber wieso reservierst du 6byte für die integer? dafür das der integer i> mal über den wert 99999 geht?
ein INteger (16 Bit) hat einen Zahlenbereich von
-32768 bis 32767
Zähl nach, wieviele Zeichen du im negativen Fall brauchen wirst um die
kleinst mögliche Zahl in Textform darzustellen
Uwe S. schrieb:> Hier muss man etwas genauer sein. Platz für 16 Byte ja, aber ein String> mit der Länge 0 benötigt schon 1 Byte! Bei 16 Zeichenlänge eines Strings> sind das nun 17 Byte im array of char.
ja da hast du recht, das hab ich übersehen.