mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 4 stellige zahl auf lcd anzeigen


Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: BernhardT (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian Pfanner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: J.Hollinger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Florian Pfanner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tobias hofer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@florian

genau so habe ich es auch gemacht.

besten dank tobias

Autor: Sascha Weitkunat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du dir schonmal den Befehl itoa(..) angeguckt? Zu finden in der 
stdlib.h

http://savannah.nongnu.org/download/avr-libc/doc/a...

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich kenne die fkt. itoa();

leider hat mein compiler keine stdlib.h bibliothek!

wenn mir aber jemand sagen kann wo ich diese stdlib.h find
und wie ich die mit meinem compiler benutzen kann.
wäre das sicher der einfachste weg.

Autor: Sascha Weitkunat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchen Compiler verwendest du denn? Wenn er wirklich keine stdlib.h hat 
schau mal nach dem Sourcecode der itoa(..) Funktion, sollte sicherlich 
auf http://sourceforge.net/ zu finden sein.

Autor: A. Arndt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bei FASTAVR ist das kein Problem, Du kannst die Zahl so darstellen oder 
kannst das Format festlegen, mit Punkt und Auffüllplatzhaltern bei 
kleinen Zahlen.

Gruss
A. Arndt

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich benutze den wickenhäuser c-compiler.
als prozessor habe ich den ds89c420 von dallas.

Autor: BernhardT (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.