Temporizador de cuenta regresiva en el interruptor de entrada ARM 7

1

He estado intentando crear un temporizador de cuenta regresiva con el microcontrolador ARM7, una vez que se detectó una entrada de interruptor. Hasta ahora logré crear una función de retraso de 1 minuto y detectar una entrada de interruptor. Sin embargo, una vez que se suelta el interruptor, la cuenta regresiva se detendrá.

Primero, he configurado 2 pantallas de siete segmentos que detectan una entrada de interruptor y pueden aumentar o disminuir los minutos.

He configurado la función delay_MINUTE de la siguiente manera, que es básicamente un retraso de 1 minuto. He comprobado esto usando un LED y esta parte de mi programa está funcionando:

  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
}

Me estoy atascando en una parte simple del programa. Cuando se detecta una entrada de interruptor en P0.14, la pantalla actual debería disminuir en uno, cada minuto.

Si simplemente lo hago:

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

el número solo disminuirá en uno cuando se presione el interruptor, y no continuará la cuenta regresiva hasta que llegue a 0. Cualquier sugerencia sobre cómo podría cambiar mi código para detectar una entrada de interruptor y disminuir continuamente después de que se haya liberado ser apreciado.

EDIT También he intentado crear un bucle for dentro de la instrucción de cambio, de modo que cuando se presiona el interruptor, la cuenta regresiva comenzará dependiendo del dígito actual que se muestra. No estoy seguro de si esto es una buena idea o no.

    
pregunta Rizzo

1 respuesta

1
  

detectar una entrada de interruptor y disminuir continuamente después de que se haya liberado sería apreciado.

prueba esto:

if (sw3_pressed()) 
  while (num_right--) delay_Minute();
    
respondido por el dannyf

Lea otras preguntas en las etiquetas