¡MCU pide ayuda con la programación en lenguaje C para realizar una cuenta regresiva de 99 segundos y detenerse en 0 segundos! ¡Por favor sea bondadoso!
#includelt;reg51.hgt; //Archivo de encabezado que contiene 51 definiciones de registros de microcontrolador
código de caracteres sin firmar Tab[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92 , 0x82, 0xf8, 0x80, 0x90};
//El tubo digital muestra la tabla de códigos de segmento del 0 al 9
unsigned char int_time; //Registra el número de interrupciones
segundo char sin firmar; //segundo de almacenamiento
/**************************** ****** ******************************************* p>
Funciones de función: retraso de escaneo dinámico rápido, el retraso es de aproximadamente 0,6 milisegundos
*************************** *********** **************************************** ***/
retraso nulo (void)
{
unsigned char i
for(i=0; ilt; 200; yo);
}
/****************************** ************ *******************************
Función: mostrar segundos
Parámetros de entrada:k
Parámetros de exportación: Ninguno
****************** ************** ************************************* ******/
void DisplaySecond(unsigned char k)
{
P2=Tab[k/10] //Mostrar dígitos de decenas
P3=0x01; //El pin P3 .0 emite un nivel alto y enciende el dígito de las decenas
delay();
P3=0xfc; Apague todos los tubos digitales
P2= Tab[k10]; //Muestra el dígito de las unidades
P3=0x02; //El pin P3.1 emite un nivel alto y enciende las unidades. digit
delay(); p>
P3=0xfc; //Apaga todos los tubos digitales
}
void main(void) //Función principal
{
TMOD=0x01; //Usar el temporizador T0
TH0=(65536-5000)/256; tiempo a 50 milisegundos
TL0=(65536-5000)256;
EA=1; //Habilitar interrupción total
ET0=1; Interrupción T0 permitida
TR0=1; //Inicia el temporizador T0 para que comience a funcionar
int_time=0; //Inicialización del número de interrupciones
second=99; //Inicialización de segundos
while(1)
{
DisplaySecond(segundo); //Llama a la segunda subrutina de visualización
while(segundo==0)
DisplaySecond(segundo);
}
//********************************* *** **********************
//Función: Interrumpir la rutina de servicio del temporizador T0
/ /** ************************************************* **** ***
void interserve(void) interrupción 1 usando 1
{
TR0=0; //Cerrar temporizador T0
>int_time; // Cada vez que ocurre una interrupción, el número de interrupciones int_time se incrementa en 1
if(int_time==20) //Suficiente para 20 interrupciones, es decir, un resultado de prueba muestreo por segundo
{
int_time=0; //Borrar el número de interrupciones a 0
segundo-- //Disminuir el segundo en 1<; /p>
}
TH0=(65536-5000)/256; //Reasigna el valor inicial al contador T0
TL0=(65536-5000)256;
TR0=1; // Inicia el temporizador T0
if(segundo==0) //Si la cuenta regresiva es 0, detiene el temporizador T0
TR0=0;
}