1 votos

Temporizador de cuenta atrás en la entrada del interruptor ARM 7

He estado tratando de crear un temporizador de cuenta atrás utilizando el microcontrolador ARM7, una vez que se detecta una entrada de interruptor. Hasta ahora he conseguido crear una función de retardo de 1 minuto, y detectar una entrada de interruptor. Sin embargo, una vez que el interruptor se libera, la cuenta atrás se detiene.

En primer lugar, he configurado 2 pantallas de siete segmentos que detectan una entrada de interruptor y pueden incrementar o disminuir los minutos.

He puesto el delay_MINUTE función como la siguiente, que es básicamente un retraso de 1 minuto. He comprobado esto usando un LED y esta parte de mi programa funciona:

  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 sencilla del programa. Cuando se detecta una entrada de interruptor en P0.14, la pantalla actual debe disminuir en uno, cada un minuto.

Si simplemente lo hago:

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

el número sólo disminuirá en uno cuando se pulse el interruptor, y no seguirá la cuenta atrás hasta llegar 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ía apreciada.

EDITAR También he probado a crear un bucle for dentro de la sentencia switch de forma que cuando se pulse el switch, la cuenta atrás se inicie en función del dígito actual que se esté mostrando. No estoy seguro de si esto es una buena idea o no.

1voto

Jeremy Puntos 424

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

prueba esto:

if (sw3_pressed()) 
  while (num_right--) delay_Minute();

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X