hallo zusammen,
ich möchte auf meinem display einen zahlenwert über eine variable
anzeigen.
leider bin ich fast am verzweifeln.
vielleicht kann mir jemand weiter helfen.
vielen dank im voraus.
int main(void)
{
int a;
int string;
a = 25;
itoa (a, string, 10);
// Innen
LCD_Print(string, 6, 113, 2, 1, 1, yellow, black);
LCD_Print("o", 46, 107, 2, 1, 1, yellow, black);
der wert wird nicht angezeigt. wenn ich die 10 hinter string rein mache,
kommt eine fehlermeldung, dass zu viele kommas im befehl lcd_print sind.
..ausserdem kommt beim kompilieren diese meldung:
displaydemo.c: In function 'main':
displaydemo.c:35: warning: left-hand operand of comma expression has no
effect
displaydemo.c:35: warning: left-hand operand of comma expression has no
effect
displaydemo.c:35: warning: statement with no effect
displaydemo.c:80: warning: passing argument 1 of 'LCD_Print' makes
pointer from integer without a cast
Martin Schmid wrote:
> int string;
Dem Compiler ist der Name egal, einen String kann die Variable "string"
nicht speichern, sondern nur einen int.
itoa verlangt ein Array von mindestens 7 Byte ("-32768\0"), also
1
charstring[7];
Und dann schau Dir genau die Argumentenfolge von itoa an.
Peter
..ich wollte eigentlich eine zahl in einen string umwandeln, da nur so
scheinbar der wert über eine variable ans display geschickt werden kann.
gruss martin
Martin Schmid wrote:
> ..ich wollte eigentlich eine zahl in einen string umwandeln
Und genau dafür mußt Du ne Variable bereitstellen, die den Text
(Char-Array) auch aufnehmen kann.
Peter
sorry..ich blick da nicht durch.
hab jetzt mal folgendes gemacht:
int a;
char string[7];
a = 25;
itoa (a, string,10);
// Innen
LCD_Print(string, 6, 113, 2, 1, 1, yellow, black);
LCD_Print("o", 46, 107, 2, 1, 1, yellow, black);
kommt kein wert auf dem display und folgende meldung:
displaydemo.c:39: warning: left-hand operand of comma expression has no
effect
displaydemo.c:39: warning: left-hand operand of comma expression has no
effect
displaydemo.c:39: warning: statement with no effect
ich hab nur diese dateien eingebunden:
#include <stdio.h>
#include <avr/io.h>
#include <avr/wdt.h>
#include <util/delay.h>
#include <math.h>
#include <avr/pgmspace.h>
#define LCD_DDR DDRB
#define itoa
//#include <stdlib.h>
vielleicht fehlt da ja was
gruss martin
>ich hab nur diese dateien eingebunden:>#define itoa>//#include <stdlib.h>
Durch das '#define itoa' wird jedes 'itoa' aus dem Quellcode entfernt.
Aus 'itoa(a, string,10);' wird also '(a, string,10);', und das macht
keinen Sinn, deswegen auch die Warnings. Lösch das am besten wieder und
tu die beiden Slashs vor '//#include <stdlib.h>' weg.
MfG Mark
> #define itoa
Was soll das denn? itoa ist eine Funktion aus der stdlib.h. Außerdem
wäre es sinnvoll, mal den ganzen Code zu posten, damit man auch mit den
Zeilennummern was anfangen kann. Wo und wie ist übrigens die Funktion
LCD_Print definiert?
Außerdem solltest Du Dich dringendst mit ASCII-Zeichen befassen. Ohne
das Verständnis, was ein ASCII-String eigentlich ist, brauchst Du an der
Stelle zunächst mal nicht weiterzumachen.
...sorry, bin halt noch anfänger und gerade am lernen.
code hab ich angehängt.
lcd_print ist in der #include <glcd-Display3000-211.h> definiert:
void LCD_Print(const char* Text, unsigned char X, unsigned char Y,
unsigned char FontNr,unsigned char XScale, unsigned char YScale,
unsigned int ForeColor, unsigned int BackColor);
displaydemo.c: In function 'main':
displaydemo.c:39: warning: left-hand operand of comma expression has no
effect
displaydemo.c:39: warning: left-hand operand of comma expression has no
effect
displaydemo.c:39: warning: statement with no effect
mit eingebundener #include <stdlib.h> kommen mehr fehlermeldungen
In file included from displaydemo.c:11:
c:/winavr-20071221/bin/../avr/include/stdlib.h:445: error: expected
identifier or '(' before 'int'
displaydemo.c: In function 'main':
displaydemo.c:39: warning: left-hand operand of comma expression has no
effect
displaydemo.c:39: warning: left-hand operand of comma expression has no
effect
displaydemo.c:39: warning: statement with no effect
make.exe: *** [obj/displaydemo.o] Error 1
@ Martin Schmid (paul-stanley)
Dein tödlich, schwachsinniges
1
#define itoa
ist immer noch drin. Und so ein Grafik-LCD ist KEIN Anfängerprojekt,
schon gar nciht wenn elementare Programmiergrundlagen fehlen. versuchs
mal mit zwei Nummern kleiner.
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#LCD-Ansteuerung
MfG
Falk
P.S. Deine Quelltextformatierung ist unter aller Sau. Das ist der
Lesbarkeit und Fehlersuche nicht sonderlich zuträglich.
hallo falk,
hab #define itoa gelöscht.
jetzt wird der wert als variable übergeben und auch angezeigt.
getraue nmich jetzt fast nicht mehr zu sagen, dass keine werte hinter
dem komma übergeben werden.
ja, ich war da wohl zu optimistisch mit dem ersten projekt. das soll ein
kleiner board computer fürs auto werden. die ganze sensorik drum rum
kann ich ohne probleme..aber ich hab vor 20 jahren mal basic gelernt und
seither nie mehr was programmiert. könnte das teil meinem
arbeitskollegen geben und er würde es mir programmieren. aber ich will
trotzdem einwenig versuchen was ich zusammen bekomme.
gruss und danke für die hilfe
martin
Martin Schmid wrote:
> getraue nmich jetzt fast nicht mehr zu sagen, dass keine werte hinter> dem komma übergeben werden.
Das ist korrekt, int ist das Format für Ganzzahlen und die haben kein
Komma.
Übergibt man in C einem int eine Kommazahl, wird der Kommateil einfach
abgeschnitten.
Sonst wärs ja kein Ganzzahl mehr, auch C kann nicht gegen die Mathematik
verstoßen.
Peter
@ Martin Schmid (paul-stanley)
>hab #define itoa gelöscht.>jetzt wird der wert als variable übergeben und auch angezeigt.
Autsch! Na wenigsten läuft es jetzt.
>getraue nmich jetzt fast nicht mehr zu sagen, dass keine werte hinter>dem komma übergeben werden.
sprintf() ist dein Freund.
MfG
Falk
..freund wäre doch glatt übertrieben.
hab nun alles mögliche ausprobiert
sprintf(string,"%2,%1",a);
bringt alles nichts. nach dem komma wird nichts mehr übergeben.
gebe für heute auf :-(
gruss martin
@ Martin Schmid (paul-stanley)
>..freund wäre doch glatt übertrieben.>hab nun alles mögliche ausprobiert>sprintf(string,"%2,%1",a);>bringt alles nichts. nach dem komma wird nichts mehr übergeben.>gebe für heute auf :-(
Das bringt alles nichts.
Gehe zurück zu den Grundlagen
Gehe direkt dorthin
Ziehe keine 4000 Euro ein.
Lies mal ein Grundlagenbuch über C. In Ruhe. Ja, das dauert einige
Stunden bis
Tage, bis du das alles wirklich verstanden hast Wochen bis Monate.
Dann reden wir weiter.
MfG
Falk
...muss das teil doch von meinem arbeitskollegen programmieren lassen.
kaufe mir aber ein zweites board und übe da dann richtig. ohne zeitdruck
(da der board computer ins auto muss) und vorherigem einlesen in die
grundlagen.
gruss martin