Forum: Mikrocontroller und Digitale Elektronik Zahl in ASCI umwandeln für LCD


von Georg (Gast)


Lesenswert?

hi,


ich möchte eine zahl z.B. 58 auf dem Display darstellen. Ich habe eine 
Rouitine in C für das LCD. Die darstellung eines Strings funktioniert 
wunderbar.

Da ich diese so übergebe:

WriteLCD (1,1,"Text"); //1.Zeile 1.Zeichen Text

nun will ich eine Zahl darstellen. Diese müsste ich ja als text 
eingeben. Ich will aber eine Variable mit ner zahl darstellen.

Habe es mit Pointern versucht, indem ich auf die Adresse der Zahl zeige. 
Auf dem Display wird die Zahl aber verkert rum angezeigt sprich statt 58 
steht da 85.

Ich möchte nähmlich ne Uhr einbauen. das Hochzählen funktionrt ja alles 
nur dass die Darstellung nicht passt da verkehrt.

Noch ne Frage wie kann ich die Zahl auf 2 Zeichen beschränken. Ich 
verwedene unsigned char sind ja insgesammt 3 zeichen da bis 255.

Gruss und Danke.

von Georg (Gast)


Lesenswert?

hi,

ich beschreibe mal mein problem etwas anders.

Wie wandele ich eine Zahl in ASCI - Code um.

z.B. 37 zerlegen in 3 und 7. Der rest ist dann klar.

von Werner Hoch (Gast)


Lesenswert?

Du kannst die Funktion itoa verwenden:

Sprache c? controller avr?

char buffer[5];
itoa(value, buffer, 10);
WriteLCD (1,1,buffer);

mfg
werner

von Ansgar Hartmann (Gast)


Lesenswert?

Wie wäre es mit sprintf?

sprintf(pString,"%d",zahl);

sollte dir die Lib für printf zu groß sein... wie oben beschrieben itoa

ansonsten:
sprintf(pString,"%0#2.2d:%0#2.2d:%0#2.2d",Stunden, Minuten, Sekunden);

String laute dann ungefähr wie folgt

02:10:15

Das #-Zeichen wird eigentlich bei der Darstellung mit d ignoriert, 
funktioniert aber bestens um die Führende Null zu erzwingen...

Gruß Ansgar

von Nik Bamert (Gast)


Lesenswert?

Hi Georg!

Du kannst ja so rechnen:

Nehmen wir an die Zahl die du zerlegen möchtest ist 58.


zahl = 58

a = zahl / 10  ' a muss integer sein damit nachher 5 in der variablen a 
steht und nicht 5.8.
'a wäre im beispiel jetzt 5

ersteziffer = a

zahl = zahl - (a*10) ' so viele zehner von der zahl abziehen wie in a 
steht. Jetzt ist zahl als noch 8

zweiteziffer = zahl

'in der variablen ersteziffer steht jetzt 5
'und in der Variablen zweite ziffer 8


Nik

von Georg (Gast)


Lesenswert?

hi,


vielen vielen dank für eure hilfe.

hab es doch noch geschaft.

Jetzt habe ich nur noch folgende frage.
Wie schreibe ich die urtzeit ins eeprom. Damit ich bei inem Stromausfall 
zumindestens dann die letzte Zeiteinstellung habe.

Habs zwar probiert aber irgendwie scheint der Controller nicht ins 
eeprom zu schreiben. Kann mir dann noch einer erklären wo da der 
Speicherbereich anfängt? Einfach bei adresse 0x00 oder wie?


Gruss und danke,

georg.

von Stefan_H (Gast)


Lesenswert?

Hi,

Schneller gehts so:

int Zehner;
int Einer;

Zehner=Zahl/10;
Einer=Zahl%10;

lg,

Stefan

von Florian Pfanner (Gast)


Lesenswert?

Wie willst du das mit dem Eprom-Schreiben realisieren?
Jede sekunde den neuen wert reinschreiben? - nach 100000 sekunden 
(ungefär 28 Stunden) ist dann dein Eprom Tot!

Und was bringt es dir? - Du weißt ja nicht wie lange der Stromausfall 
war. Dann kannst du auch gleich wieder mit 00:00:00 anfangen.

Wenns dir darauf ankomt die Zeit zu behalten, dann verwende eine Externe 
Uhr mit Batteriepufferung (oder Gold-Cap).

Gruß, Florian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.