Cómo hacer un temporizador de cuenta regresiva usando un microcontrolador
// = = = = declarar área = = = = = = = = = = = = =
# include & ltreg 51. H & gt; p>#Definir segmento P0
#definir recuento 50000//Declarar el valor inicial de T0.
#define TH_M1 (recuento 65536)/256
#define TL_M1 (recuento 65536)%256
#define recuento_M2 250
#Definir TH_M2 (256-count_M2)
#Definir TL_M2 (256-count_M2)
recuento de caracteres _ t 1 = 0;
char TAB[ 10] ={0xc0, 0xf9, 0xa4, 0xb0, 0x99,
0x92, 0x82, 0xf8, 0x80, 0x 90};
int count _ T0 //Número de interrupciones
p>
char disp[4]={0xc0, 0xc0, 0xc0, 0xc 0}; //área a mostrar
char segundos = 0 //segundos
char minutos = 0; // minutos
char scan = 0xf7
int I = 0
escáner de vacío (void); Función de visualización de declaración
//= = = = = = =Cinta principal= = = = = = = = =
Main()
{ EA = 1 ;
ET0 = 1;
et 1 = 1;
TMOD = 0x 21;
TH0 = TH_m 1; /p>
TL0 = TL_m 1;
TH0 = TL0 = TH_M2
TL0 = TL_M2
tr 1; = 1;
TR0 = 1;
mientras(1);
}
//= = = = = 60s a 1 enviado al área a mostrar = = = = = = = =
void T0_1S(void) interrupción 1
{ TH0 = TH_m 1;
TL0 = TL_m 1;
si (++count_T0==20)
{ count_T0 = 0;
segundos++;
si (segundos==60)
{segundos = 0;
minutos++;
}
si(minutos==60)
Minutos = 0;
}
disp[3]= TAB[minutos/10] //dividido en diez lugares
disp[2]= TAB[minutos % 10];
disp[1]= TAB[segundos/10]; //Diez dígitos por segundo
disp[0]= TAB [segundo % 10]; //bits
}
//= = = = = = = = Área de visualización = = = = = = = = =
void T1_8ms(void) interrupción 3
{
if(++count_T1==20)
{ count _ t 1 = 0 ; p>
si (i==4)
{ I = 0
escanear = 0xf7
}
SEG; = 0xff
P2 = escanear;
SEG = disp[i++];
Escanear>>= 1;
}
}