4 stellige zahl auf lcd anzeigen

Gast #28265
Lesenswert?

hallo

ich habe ein lcd display und möchte auf diesem nun eine
vierstellige zahl von meinem timer darstellen. dafür muss ich die zahl 
in 1'er 10'er 100'er und 1000'er aufteilen.

ich habe folgendes prinzip versucht:

(timerwert%10)/10 ergibt 10'er
(timerwert%100)/100 ergibt 100'er
(timerwert%1000)/1000 ergibt 1000'er

leider hat das ganze bei mir nicht funktioniert.
hat vieleich jemand schon einmal ein ähnliches problem gelöst und könnte 
mir mit ein bisschen c-code auf den richtigen weg helfen?

besten dank gruss tobias
Gast #28266
Lesenswert?

Tja, 7 Segmentanzeigen brauchen halt mindestens 7 bit für eine Anzeige 
(digit). Ohne detailierte Angabe deiner Hardware wird dir wohl keiner 
eine vernünftige Antwort geben können.
Nur ein Tip - normalerweise liest man die benötigten Segmentwerte aus 
einer ROM-Tabelle. Das ist eigentlich viel einfacher als es klingt - 
aber bitte gib uns einen Tip für welchen Controller - was für ein 
Compiler - und vor allem welche Segmente an welchen Portpins hängen.
Gruß Bernhard
Gast #28267
Lesenswert?

Ich weiß nicht was du mit Module (%) erreichen willst???? - versuch mal

tausend=timerwert/1000;
timerwert=timerwert-tausend;
hundert=timerwert/100;
timerwert=timerwert-hundert;
zehnerwert=timerwert/10;
einerwert=timerwert-zehnerwert;

Müsste gehn - weiß jedoch nicht ob der Compiler rundet (dann würde das 
ganze nicht gehn) oder ob der Compiler einfach die Nachkommastellen 
weglässt???

Einfach mal ausprobieren!

Gruß, Florian
Gast #28268
Lesenswert?

hallo bernhard

also ich habe ein ganz normales lcd display 2zeilen a 16charakter, 
controller hd44.... keine 7-segment anzeige oder sowas.

hallo florian

nehmen wir einmal an der timer hat den wert 4780.
mit deinem allgorythmus wenn richtig gerundet wird:

tausend=timerwert/1000;             4
timerwert=timerwert-tausend;
hundert=timerwert/100;              37
timerwert=timerwert-hundert;
zehnerwert=timerwert/10;            27
einerwert=timerwert-zehnerwert;

ich will ja 1'er 10'er 100'er usw...

gruss tobias
Gast #28269
Lesenswert?

Hi Tobias,

versuch mal den angehängten Source. Die zu schreibende Zahl wird 
zerpflückt und jedes einzelne Zeichen zum Display geschrieben. Der 
meiste Teil dient der Unterdrückung führender Nullen (if Zahl > 9999 
usw.). Kann man natürlich auch weglassen oder eleganter lösen.
Eine andere Alternative ist die "sprintf"-Funktion.

Viel Spass

Jochen
Angehängte Dateien:
Gast #28270
Lesenswert?

@Tobias:
Tut mir leid, kleiner Fehler im Syntax:

[z.b:Timerwert=4780]

tausend=timerwert/1000;
[4=4780/1000]

timerwert=timerwert-(tausend*1000);
[780=4780-(4*1000)]

hundert=timerwert/100;
[7=780/100]

timerwert=timerwert-(hundert*100);
[80=780-(7*100)]

zehnerwert=timerwert/10;
[8=80/10]

einerwert=timerwert-(zehnerwert*10);
[0=80-(8*10)]

In eckigen Klammern sind bsp.-Werte!

Hoffe jetzt stimmts,
Gruß, Florian
Gast #28277
Lesenswert?

Hat mich meine Kristallkugel halt getäuscht. Fragen wie die von dir im 
Zusammenhang mit C sind mehr als ungewöhnlich.
Wie hier einige schon erwähnt haben gibt es normalerweise für C 
PrintF,itoa und noch einen Haufen mehr. Sollte dein Compiler nix davon 
unterstützen dann viel Spaß bei der Arbeit, Ich in deinem Fall würde 
dann aber mal ernsthaft einen Wechsel  in Erwägung ziehen (WINAVR ist 
übrigens völlig umsonst:-)
Wenn du dich aber in die Arbeit stürzen willst: um eine einzelne Ziffer 
für einen hd44..  umzuwandweln must du h'30' addieren Hexadezimal 30 ist 
die null 39 = 9. Die 10er, 100er... must du dann schon berechnen. Aber 
ich kann nicht  glauben, das der Compiler da gar nichts kann - und wenn 
doch: für die 51er Familie gibt es nun wirklich genügend Compiler (auch 
teilweise freie).
Gruß Bernhard

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