Countdown-Timer am Schaltereingang ARM 7

Ich habe versucht, einen Countdown-Timer mit einem ARM7-Mikrocontroller zu erstellen, sobald ein Schaltereingang erkannt wurde. Bisher ist es mir gelungen, eine Verzögerungsfunktion von 1 Minute zu erstellen und einen Schaltereingang zu erkennen. Sobald der Schalter jedoch losgelassen wird, stoppt der Countdown.

Zuerst habe ich 2 Sieben-Segment-Anzeigen eingerichtet, die eine Schaltereingabe erkennen und die Minuten erhöhen oder verringern können.

delay_MINUTEIch habe die Funktion wie folgt eingestellt , was im Grunde eine Verzögerung von 1 Minute ist. Ich habe dies mit einer LED überprüft und dieser Teil meines Programms funktioniert:

  void delay_MINUTE(void)
{
 T0TCR = 0x0;                   //Resetting Timer0

 T0MR0 = 499999;                //Loading match register value

 T0PR = 600;                  //Loading Prescalar register value  

 T0PC = T0TC = 0;             //The value in the register increments with   every     input pulse or Processor clock fed into it. 

 T0MCR = (1<<0) | (1<<2);     //Generates interrupt and reset on match.    

 T0TCR = 0x1;                   //Starting Timer

 while(!(T0IR & (1<<0)));       //Waiting for interrupt
 T0IR = (1<<0);               //Clearing interrupt
}

Ich stecke in einem einfachen Teil des Programms fest. Wenn ein Schaltereingang an P0.14 erkannt wird, sollte die Stromanzeige jede Minute um eins verringert werden.

Wenn ich es einfach mache:

     int y = 0;
     unsigned int SW3;
     if((SW3) == y)  //detecting switch input
    {
        delay_MINUTE();
        num_right --;
    }

Die Zahl wird nur um eins verringert, wenn der Schalter gedrückt wird, und nicht weiter heruntergezählt, bis sie 0 erreicht. Alle Vorschläge, wie ich meinen Code ändern könnte, um eine Schaltereingabe zu erkennen und nach dem Loslassen kontinuierlich zu verringern, wären willkommen.

BEARBEITEN Ich habe auch versucht, eine for-Schleife innerhalb der switch-Anweisung zu erstellen, sodass beim Drücken des Schalters der Countdown abhängig von der aktuell angezeigten Ziffer beginnt. Ich bin mir nicht sicher, ob dies eine gute Idee ist oder nicht.

Antworten (1)

Erkennen einer Schaltereingabe und kontinuierliches Dekrementieren, nachdem sie losgelassen wurde, wäre wünschenswert.

Versuche dies:

if (sw3_pressed()) 
  while (num_right--) delay_Minute();
Übernehmen Sie hier eine Funktion? Ich habe Schaltereingaben nur durch Verwenden if((SW3) == y)oder etwas Ähnliches erkannt