Datenausgabe auf LCD-Display

Gast #178135
Lesenswert?

Hallo,
habe folgendes Problem:
Möchte Daten auf dem LCD-Display (4X16)ausgeben.
Integer und Text kein Problem, aber mit float, double und long
habe ich Probleme.
Im Programm selbst wird mit float gerechnet, aber die Ausgabe finkt.
nicht. Vermutlich liegt dies am Display.

Verwende den SDCC-Compiler und das Board von Dr.Rakers mit dem Infinion
C517A.



Source:
#include <float.h>
float f1;
chr   str1[16];
sprintf (str1,"xyz %3.2f",f1);
dstrout (0,str1);
Anzeige: <NO FLOAT>

Diese Nachricht kommt auch bei double. Bei long wird nichts angezeigt.
Formatstring natürlich angepasst bei verschiedenen Typen.
Habe gesucht ob es eine Routine zum konvertieren gibt (ftoa).

Vielen Dank
Gruß Fredi Nüßle
Gast #178139
Lesenswert?

Hallo,
habe nochmals bei SDCC nachgeschaut.
Leider gibt es noch keine Ausgabe-Routine für Float.
(z.B. ftoa, dtostr, dtostrf oder ähnliches).

Ich kann mir nur damit behelfen indem ich den Vor- Nachkommaanteil
in integer oder char ausgebe.

Hat jemand schon mal so etwas programmiert???

Wäre dankbar wenn mir da jemand helfen könnte, da ich noch Anfänger und
total auf mich alleine gestellt bin.

Gruß Fredi
Gast #178140
Lesenswert?

Wo ist das Problem?
Wenn du bspw. 2 Kommastellen haben willst, dann multipliziert die
float-Zahl mit 100. Dann fürst du bspw. itoa (...) aus. Bei der Ausgabe
fügst du einfach vor den letzten beiden Zeichen (Zahlen) ein Komma per
Software ein.
Gast #178141
Lesenswert?

Versuche es mal so:

#include <stdlib.h>

void StringDisplay(char *str)  // Ausgabe von Zeichenketten
{
       while(*str!=0)          // solange String-Ende(0)
                                   noch nicht erreicht,
   {
   Befehl(*str);
   str++;                 }
   startwert=counter_buchstabe+startwert;
}

void FloatDisplay(double x,int vk, int nk)   //Ausgabe einer
                                                 Kommazahl über die
                                                 String-Ausgabe
{
  char buffer[20];
  StringDisplay(dtostrf(x, vk, nk, buffer));  // vk Vorkommastellen, nk
Nachkommastellen
}

Wenn Du nun die Funktion FloatDisplay aufrufst mit der Übergabe einer
Zahl oder Variablen sowie der Vor und Nachkommastellen
FloatDisplay(XYZ,VK,NK);
dann sollte das klappen...bei mir klappt es mit jedem Display.

Für Verbesserungsvorschläge bin ich natürlich zu haben :-)
Marco
Gast #178143
Lesenswert?

Danke
Alexander, Marco für eure Hilfe.

Marco deinen Vorschlag kann ich nicht nehmen da mir die Funktion
dtostrf vom sdcc.compiler nicht geboten wird. Trotzdem Danke.

Werde den Vorschlag von Alexander mal versuchen. Klingt sehr einfach.
Nur ist mir noch nicht klar wie ich die Berechnung in Float auf
eine bestimmte Anzahl von Nachkommastellen begrenzen kann.

Aber ich werde es versuchen, kann ja nur dabei lernen.
Werde mich da einlesen. Bestimmt ist es ganz einfach.

Gruß Fredi
Gast #178145
Lesenswert?

Hallo Marco,

habe ich auch immer gedacht. Aber in der stdlib.h vom SDCC ist
diese Funktion nicht enthalten.
Würde mir die ganze Sache viel einfacher machen.

***********************************
#ifndef __SDC51_STDLIB_H
#define __SDC51_STDLIB_H 1

#ifndef NULL
# define NULL (void *)0
#endif

#include <malloc.h>

extern float atof (char *);
extern int atoi (char *);
extern long atol (char *);

extern void _uitoa(unsigned int, char*, unsigned char);
extern void _itoa(unsigned int, char*, unsigned char);

extern void _ultoa(unsigned long, char*, unsigned char);
extern void _ltoa(unsigned long, char*, unsigned char);
#endif
*****************************************
Das ist alles was in der stdlib.h steht!!!


Fredi

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