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.