Programación sencilla de cuenta atrás de diez segundos
Utilice el temporizador T0 del microcontrolador para cronometrar 1 segundo para realizar la función de cuenta atrás del cronómetro.
El proceso es el siguiente
# include & ltreg 51. h & gt;
Pestaña de código de caracteres sin firmar[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x 90}; //* * *Tabla de códigos de segmento de tubo digital Yang
Segundos de caracteres sin firmar //Segunda variable de cuenta regresiva
Carácter sin signo t0n//Recuento de interrupciones T0
sbit k1=p3^2; //Definir clave
Retraso no válido()
{ p>
Unsigned int j;
for(j = 400; j & gt0;j-);
}
Void display() //Mostrar subrutina
{
P2 = 0x 01;
P0 = tab[segundos/10]; //Mostrar dígitos de decenas p>
retraso( );
P2 = 0x 02;
P0 = tab[segundo % 10]; //Unidad de visualización
retraso( );
}
void main()
{
TMOD = 0x 01; //Temporización T0, modo de interrupción
TH0 = 0x3C//Oscilador de cristal 12M, temporización 50ms.
TL0 = 0xB0
IE = 0x82
mientras(1)
{
display(); //Ajustar subrutina de visualización
If(k1==0)//Botón.
{
If (TR0==0)
{
TR0 = 1; //Inicia el cronómetro.
Segundos = 60; //Comienza la cuenta regresiva desde 60 segundos.
}
Otros
TR0 = 0;
while(k 1 = = 0); //Espera la clave para ser liberado
}
}
}
//programa de interrupción T0
void interrupción T0_int() 1 p>
{
TH0 = 0x3C
TL0 = 0xB0
t0n++;
if(t0n & gt ;=20 )//Llegó en 1 segundo
{
t0n = 0;
Segundo -;//Negativo 1 segundo
si( Segundos = = 0)TR0 = 0;
}
}