Binäruhr programmieren

Gast #3221479
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
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
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
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.
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.