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
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
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
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
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
@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
Hast du dir schonmal den Befehl itoa(..) angeguckt? Zu finden in der stdlib.h http://savannah.nongnu.org/download/avr-libc/doc/avr-libc-user-manual/group__avr__stdlib.html#a23
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.
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.
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
ich benutze den wickenhäuser c-compiler. als prozessor habe ich den ds89c420 von dallas.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.