Red de conocimientos turísticos - Información de alquiler - ¡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!

¡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

/**************************** ****** *******************************************

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();

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;

}