Forum: Mikrocontroller und Digitale Elektronik Binäruhr programmieren


von DIY_01 (Gast)


Lesenswert?

Hey,

Ich soll eine 24 Stunden-Binäruhr programmieren, aber wie macht man das, 
wenn die Sekunden und Minuten größer 10, größer 20 ... sind oder, wenn 
die Stunde
Wir arbeiten mit einem 89S52 und insgesamt 20 LED's.
Ich nehme mal an, dass die 6 LED's die Stunden sind und die 7 jeweils 
Minuten und Sekunden.
Das ganze soll nur programmiert werden, nicht aufgebaut.
Das mit den LED's an und aus und an krieg ich auch wohl hin^^, aber wie 
macht man das mit den Stunden Sekunden und Minuten, also wenn die 
gewisse Werte erreichen?
Für jeden einzelnen Wert ne if schleife ist ein wenig heftig oder?
Mir fällt da irgendwie grad keine Lösung für ein.

Das habe ich schon:

if(sekunde == 60)
{
    sekunde = 0;
    minute = minute +1;
    P2_B2 = 0;
}
if(minute == 60)
{
    minute = 0;
    stunde = stunde +1;
}
if(stunde == 24)
{
    stunde = 0;
}

von DIY_01 (Gast)


Lesenswert?

achja, vor die Stunden, Minuten und Sekunden ist jeweils noch ein 
Schiebregister gepackt. (74HCT373N)

von MaWin (Gast)


Lesenswert?

DIY_01 schrieb:
> Das habe ich schon

Na das ist ja nix.

Eine Programm-Hauptschleife die pro Sekunde ein mal durchläuft wäre 
nicht schlecht, und davor die Initialisierung und dadrin die AusgBe an 
die LEDs.
1
// init
2
while(1)
3
{
4
  // dein code
5
  PortA=sekunde;
6
  PortB=minute;
7
  PortC=stunde; // oder wo deine LEDs auch immer angeschlossen sind
8
  Delay1s;
9
}

von MaWin (Gast)


Lesenswert?

Ein sekunde++; wäre auch nich ganz gut, und das Ausgeben eines Werts an 
ein Schieberegister ist dann die nächste Übung.

von DIY_01 (Gast)


Lesenswert?

naja, das mit der sekunde++ hatte ich auch schon.
Die LED's hängen an diesen Schieberegistern, die ich oben beschrieben 
hatte.

near int sekunde = 0;
near int minute = 0;
near int stunde = 0;

    while(1)
    {
        IC6 = sekunde;
        IC7 = minute;
        IC8 = stunde; // wo LED's angeschlossen sind.
        sekunde++;
        if(sekunde == 60)
        {
            sekunde = 0;
            minute = minute +1;
        }
        if(minute == 60)
        {
            minute = 0;
            stunde = stunde +1;
        }
        if(stunde == 24)
        {
            stunde = 0;
            IC6 = 1;
            IC7 = 1;
            IC8 = 1;
        }
    }
}

Ist dieses delay1s auch sowas wie sekunde++?

von MaWin (Gast)


Lesenswert?

Nein, das steht für eine Zeitverzögerung bis 1 Sekunde rum ist. Je nach 
dem, wie dein uC das erlaubt.

Was auch immer mit IC1=IC2=IC3=1 erreicht werden soll, einen Wert ins 
Schieberegister zu übertragen ist wohl aufwändiger.

von Diy_01 (Gast)


Lesenswert?

Wird der Wert von dem schieberegister auf die leds uebertragen? Wie 
macht man das denn dann? Delay1ms kenne ich als _wait_ms();
Das mit den ICs ist uebrigens Kaese.

von Thomas E. (thomase)


Lesenswert?

DIY_01 schrieb:
> achja, vor die Stunden, Minuten und Sekunden ist jeweils noch ein
> Schiebregister gepackt. (74HCT373N)
Das ist kein Schieberegister sondern ein Latch.
Poste mal den Schaltplan.

mfg.

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
Noch kein Account? Hier anmelden.