Variable auf LCD anzeigen

OP #2274160
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
OP #2274220
Gern. In verkürzter Form:
1
void main(void)
2
{
3
  int b=150;
4
  init_lcd();
5
  
6
  set_cursor(2,1);
7
  ItoA(b);
8
  
9
  while(1){          
10
  }
11
}
12

13
ItoA(int z){
14
  char strBuf[20];
15
  sprintf(strBuf, "%d", z);
16
  send_string(strBuf);
17
}
Gast #2274237
#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
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
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
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
}
OP #2275210
Normalerweise schreibe ich auch immer ein void vor meine Funktionen. 
Allerdings erhalte ich hier eine Fehlermeldung vom Compiler wenn ich 
einen Returntyp davor schreibe.(Error: type declaration of 
[Funktionsname])
OP #2275268
Habe mich verschrieben. Die Fehlermeldung lautet: type redeclaration of 
[Funktionsname].
Bei manchen Funktionen kann ich ein void schreiben und bei anderen 
bekomme ich diese Fehlermeldung. Hat jemand eine Idee woran das liegen 
könnte?
#2276308
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

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.