Variable auf LCD anzeigen

OP #2274160
Lesenswert?

Hi Leute,

ich habe hier im Forum schon gefühlte 1000 Threads zu diesem Thema 
gelesen. Allerdings war nichts dabei was mir geholfen hat. Zu meinem 
Problem: Ich habe ein HD44780 kompatibles 2x16 LCD, welches ich in C mit 
HEW4 über einen M16C28 ansteuere. Die normale Ausgabe von Strings 
funktioniert auch fehlerfrei. Allerdings würde ich nun gerne Variablen 
anzeigen lassen. Im Forum habe ich dazu zwei Lösungen gefunden: Zum 
einen per sprintf. Da kommen bei mir aber nur sinnlose Zeichen. Und zum 
anderen mit itoa(). Aber da sagt mir der Compiler nur "'itoa' value is 
undefined"
Kann mir irgendjemand helfen? Vielen Dank.

Grüße David
Gast #2274237
Lesenswert?

#include <stdio.h> feht, ansonsten ist das Programm so lauffähig.

Das Problem versteckt sich eventuell in den nicht gezeigten Funktionen 
(init_lcd, set_cursor, send_string) oder es besteht ein Laufzeitproblem 
im unverkürzten Code (z.B. Speichermangel).

Konstrast am LCD ist korrekt eingestellt?
OP #2274252
Lesenswert?

Hi Helfer,

ich kann mir eigentlich nicht vorstellen dass die anderen Funktionen 
oder der Kontrast schuld sind, da ich ja über send_string normale 
Strings anzeigen kann. An sich funktioniert die Ausgabe ja. Nur die 
Umwandlung eines Integers zu einem String eben nicht.
Den Header habe ich gerade noch eingefügt, aber dann füllt sich das 
Display mit Unsinn.
Gast #2274283
Lesenswert?

Mache es zu Fuß:


/*-------------------------------------
 *  Display integer 0-9999
 *--------------------------------------------------*/
void print4(unsigned int x)
{
  unsigned int y;


    y=x/1000;lcd_data(y+0x30);x-=(y*1000);
    y=x/100;lcd_data(y+0x30);x-=(y*100);
    y=x/10;lcd_data(y+0x30);x-=(y*10);
    lcd_data(x+0x30);

}



lcd_data gibt ein Zeichen aus
#2274612
Lesenswert?

David G. schrieb:
> Ändert leider nichts am Ergebnis...

Hat dein Compiler wieder so einen Dondermodus, bei dem er const Dinge 
nicht ins RAM sondern ins Flash legt?
1
send_string(const char *str){  //Ausgabe eines String
2
  while(*str != '\0')      //Ausgabe bis terminierende Null
3
  send_char(*str++);      //zeichenweise Ausgabe
4
}

dann könnte das nämlich die Ursache sein. Du brauchst dann eine 2-te 
SendString Funktion, die keinen const char * Übernimmt.


Und gewöhn dir bitte an, dass Funktionen einen Returntyp haben. Immer! 
Wenn du nichts sinnvolles aus einer Funktion retournieren kannst, dann 
sind das eben void Funktionen. So wie du das jetzt hast, ist das nämlich 
im Grunde alles fehlerhaft: Der Default ist int und du returnierst 
nichts.
1
void send_string(const char *str){  //Ausgabe eines String
2
  while(*str != '\0')      //Ausgabe bis terminierende Null
3
    send_char(*str++);      //zeichenweise Ausgabe
4
}
#2276308
Lesenswert?

David G. schrieb:
> Habe mich verschrieben. Die Fehlermeldung lautet: type redeclaration of
> [Funktionsname].

Tja. Du brauchst natürlich Funktionsprototypen (und ein C Buch).

Geh deinen Code von oben nach unten durch. Jede Funktion muss dem 
Compiler ert mal bekannt gemacht werden, ehe du sie benutzen kannst. 
Dies geschieht, indem du zb eine Funktionsdeklaration (aka Protoyp) 
vorsetzt oder aber, in dem du die Funktionsdefinition vor der ersten 
Verwendung schreibst.

Also entweder
1
void foo( int i )
2
{
3
  ...
4
}
5

6

7
int main()
8
{
9
   foo( 5 );
10
}
(also Funktion definieren, ehe du sie benutzt)

oder so
1
void foo( int i );    // es gibt eine Funktino foo und das sind ihre Argumente
2

3
int main()
4
{
5
  foo( 5 );
6
}
7

8
void foo( int i )     // und da ist sie jetzt: tata, die Funktion höchstpersönlich
9
{
10
  ...
11
}


> Bei manchen Funktionen kann ich ein void schreiben und bei anderen
> bekomme ich diese Fehlermeldung. Hat jemand eine Idee woran das liegen
> könnte?

Im eigentlichen Sinne liegt es daran, dass du kein C-Buch hast, in dem 
du im Kapitel über Funktionen das alles und noch viel mehr gelesen 
hättest.

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