Binäruhr programmieren

Gast #3221479
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;
}
Gast #3221485
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
}
Gast #3221512
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++?
Gast #3221519
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren