Hallo Flo!
Ach quatsch.... vergiss das mit den CD4543.
Du hast deine Platine zur Ansteuerung ja schon längst fertig.
War wohl schon etwas spät bzw. früh, heute Morgen.
Dann schauen wir doch mal, ob wir dein Programm nicht mal etwas umstrukturieren können.
Vielleicht solltest du dir dazu mal den Befehl "Lookup()" ansehen.
Was soll denn letztlich passieren?
Du schaltest die einzelnen Stellen, Zehner-Stunde--> Einer-Stunde--> Zehner-Minute--> Einer-Minute durch und legst immer das passende Byte für die einzelnen Segmente an.
Überlegen wir mal......
Das Zerlegen der BCD-Werte in zwei einzelne Zahlen hast du ja schon realisiert.
Nun hast du also vier Variablen mit binären Ziffern, entsprechend der Uhrzeit.
Zum Beispiel:
21:34 Uhr
H_stunden = &B0000_0010 = 2 dezimal
L_stunden = &B0000_0001 = 1 dezimal
H_minuten = &B0000_0011 = 3 dezimal
L_minuten = &B0000_0100 = 4 dezimal
Natürlich kannst du diese Werte nicht zu den Anzeigen schicken.......
du musst also eine Art "Segmentbild" erstellen.
Die Zwei wäre also:
(gemeinsamer Anodenanschluss, bei "0" wird zu GND durchgeschaltet)
a b c d _ e f g DP
0 0 1 0 _ 0 1 0 1
.---a---
|.........|
f.........b
|.........|
.---g---
|.........|
e.........c
|.........|
.---d---
Damit ergibt also eine binäre "2" das Segmentbild= &B00100101 ......bzw. &H25
Da du aber immer nur EINE Stelle mit dem passenden Segmentbild ansteuern kannst, benötigst du theoretisch auch immer nur eine Variable zum Senden.
Dafür hast du bei dir die Variable "Ausgabe" erstellt.
Nun kommt zum Füllen der "Ausgabe" mal "Lookup()" ins Spiel.
Dafür musst du aber vorher noch etwas hinzufügen.
Am ENDE deines Programmes legst du dir eine Datentabelle mit allen Segmentbildern an.
Diese Tabelle bekommt einen Namen, z.B. "Segmentbild" und wird als DATA-Zeile ausgewiesen.
WICHTIG ist hierbei.....
Die Tabell muss NACH dem "End" angefügt werden und darf KEIN "Return" enthalten!
Prinzipieller Programmaufbau wäre dann als so:
Code:
Do
.
.
Loop
Subroutine1:
.
Return
Subroutine2:
.
Return
End
Segmentbild:
DATA &HFF , &H00 , &H25
Die DATA-Zeile zählt von "0" an, also musst du die Segmentbilder nur der Reihe nach von 0 bis 9 hinterlegen.
Du kannst natürlich noch eine "10" verwenden, damit bei 01:23 Uhr die erste Null nicht angezeigt wird sondern alle Segmente deaktiviert bleiben (&HFF).
Mit dem Befehl "Lookup()" kannst du nun zur Datentabelle springen und das entsprechende Segmentbild laden.
Aufrufen kannst du es folgender Maßen:
Code:
Ausgabe = Lookup(H_stunden , Segmentbild)
Nun kommt dein "Stellen-Zähler" für die Anzeigenstelle noch hinzu und du kannst alles rausschieben..... und das immer wieder im "Kreis".
Ich denke mal, dass du alles soweit verstanden hast, weil das Meiste davon hattest du ja schon realisiert.
Grüße,
Cassio