Hallo, ich habe mir eine Uhr mit Hilfe des Timers gebastelt. Funktioniert auch einwandfrei. Jetzt gebe ich das ganze auf mein Lcd aus. Sagen wir mal: 12:25:11. Also super, so wollte ich es, aber wenn die Stunden, Minuten oder Sekunden auf Null stehen, sieht das in etwa so aus: 12:0:2. Das wollte ich natürlich nicht. Hat jemand eine Idee zur Lösung? Es sollte mit Bascom realisierbar sein. Gruß Holger
Du wirst deine Zahlen in Strngs wandeln müssen, und wenn die Zahl kleiner als 9 ist, noch eine 0 voranstellen müssen.
Falls jetzt die Frage aufkommt: "Wie mache ich das denn in BASCOM?" Antwort: "Weiß ich nicht. Aber irgendwelche Strinbearbeitungsroutinen wird es in BASCOM schon geben."
Kann ja auch sein, daß er das schon macht und nur die führenden Nullen
im Formatsting vergessen hat. Also sowas wie '%d:%d:%d' statt
'%02d:%02d:%02d'.
> Es sollte mit Bascom realisierbar sein.
Hat Bascom Einschränkungen gegenüber anderen Programmiersprachen?
Denke man kann nahezu alles in Allem realisieren. Kommt nur darauf an
ob hinterher Aufwand und Nutzen in einem guten Verhältnis stehen ;-)
Grüße, Freakazoid
Also ich habe bis jetzt die normalen Zählerwerte genutzt zur Ausgabe. Ich bin davon ausgegangen das jede rechenarbeit (also auch das wandeln in Strings) eine weitere Ungenaigkeit mitbringt. Oder liege ich da falsch? Mir ist schon klar, das die ganze Angelegenheit sowieso nicht wirklich genau ist, aber man muss es ja nicht noch verschlimmern, wenn es anders geht. Dachte ich jedenfalls. Gruß Holger
>Oder liege ich da falsch?
Sofern du mit ganzen Zahlen rechnest, liegst du bzgl. der Genauigkeit
falsch.
Wie sieht deine Ausgabe denn bisher aus?
Das ist die Grundversion des Codes: $regfile = "m8def.dat" $crystal = 3686400 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2 Config Lcdbus = 4 Cursor Off Noblink Dim Stunde As Byte , Minute As Byte , Sekunde As Byte Config Timer1 = Timer , Prescale = 64 On Timer1 Timer_irq Const Startwert = 7936 Enable Timer1 Enable Interrupts Stunde = 21 Minute = 59 Sekunde = 50 Cls Do If Sekunde = 0 Then Cls Locate 1 , 2 Lcd Stunde ; ":" ; Minute ; ":" ; Sekunde Loop Timer_irq: Timer1 = Startwert Incr Sekunde If Sekunde = 60 Then Sekunde = 0 Incr Minute End If If Minute = 60 Then Minute = 0 Incr Stunde End If If Stunde = 24 Then Stunde = 0 End If Return Also wirklich im Moment mit ganzen Zahlen nur geht eben "01" usw. nicht.
>Lcd Stunde ; ":" ; Minute ; ":" ; Sekunde
if Stunde < 10 LCD "0"
LCD Stunde ; ":" ;
if Minute < 10 LCD "0"
LCD Minute ; ":" ;
if Sekunde < 10 LCD "0"
LCD Sekunde
Ist etwas länger, sollte aber funktionieren.
Ob der LCD-Befehl eine eigene Formatierung beitzt, weiß ich nicht.
Bascom hat aber eigentlich auch eine Date$- und Time$-Funktion...
Wer lesen kann ist klar im Vorteil! :-) Ich kann scheinbar nicht lesen. Man sollte manchmal einfach einen Blick in die (Bascom)-Hilfe werfen. Da steht dann auch tatsächlich Time$ usw. Also vielen Dank erstmal. Gruß Holger
Gibts in Bascom kein "PRINT USING"? In den üblichen Basic-Dialekten war das die einfachste Möglichkeit, Zahlen formatiert auszugeben.
In BASCOM heist das FORMAT. Wenn ich die Doku richtig deute würde das so gehen LCD Format( Stunde, "00" ); ":"; Format( Minute, "00" ); ":" Format( Sekunde, "00" )
Also mit Format funktioniert es nicht. Es geht mit: config clock = soft und dem Time Ausdruck ohne "$". Danke an alle die mich auf den richtigen Weg geführt haben. Gruß Holger
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.