Red de conocimiento informático - Material del sitio web - ¿Cómo hacer un temporizador de cuenta regresiva simple usando un microcontrolador?

¿Cómo hacer un temporizador de cuenta regresiva simple usando un microcontrolador?

Lo he completado. A continuación se muestra el diagrama del circuito y el efecto real. ¡También puedes probarlo! ¡¡¡Se adaptó usando el programa de cronómetro. ¡¡¡Espero que pueda ayudarte!!!

#include "reg52.h" //Este archivo define algunos registros de funciones especiales del microcontrolador

typedef unsigned int u16 ? //Para la definición de declaración de tipo de datos

typedef unsigned char u8;

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

código u8 smgduan[10]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,

0x7f, 0x6f} ; //Muestra el valor de 0~F

u8 ssec=100, sec=60, min=04;

u8 DisplayData[8];

sbit bip=P1^5;

contador largo sin signo=0;

unsigned int c=0;

sbit p15=P1^ 5;

bit p;

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

* ¿Nombre de la función?: retraso

* Función función: función de retraso, cuando i = 1, el retraso es de aproximadamente 10us

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

retraso anulado (u16 i)

{

mientras(i--

}

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

* ¿Nombre de la función?: Timer0Init

* Función: Inicialización del temporizador 0

* ¿Entrada?: Ninguna

* ¿Salida?: Ninguna

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

void Timer0Init()

{

TMOD=0X11; //Seleccione el modo del temporizador 0, modo de trabajo 1, solo use TR0 para abrir y comenzar.

TH0=0Xd8; //Asignar valor inicial al temporizador, tiempo 10ms

TL0=0Xf0;

ET0=1;

EA=1; //Activa la interrupción total

TR0=1; //Activa el temporizador --gt; ¡Inicia la interrupción del temporizador!

ET1= 1;

TR1=1;

TH1=(65536-250)/256;? //FC

TL1=(65536-250) 256;

}

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

* ¿Nombre de la función?: DigDisplay

* Función de función: Función de escaneo dinámico de tubos digitales, escaneo cíclico de 8 pantallas de tubos digitales

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

void DigDisplay()

{

u8 i;

for(i=0;ilt;8;i)

{

switch(i) //Selección de bits, seleccione el tubo digital iluminado,

{

case(0):

LSA=0; el 0º bit

case(1):

LSA=1; LSC=0 //Mostrar el 1er bit

case; (2):

LSA=0; LSB=1; LSC=0; //Mostrar el segundo bit

case(3):

LSA=1; LSB= 1; LSC=0; //Mostrar el tercer bit

caso(4):

LSB=0; ; romper; //Mostrar No. 4

case(5):

LSA=1; LSC=1; p>

case (6):

LSA=0; LSB=1; LSC=1; //Mostrar el sexto bit

case(7):

LSA=1; LSB=1; LSC=1; //Mostrar el séptimo bit

}

P0=DisplayData[i]; Enviar código de segmento

delay(100); //Escanear a intervalos

P0=0x00; //Blanking--gt; Unselect;

}

}

void datapros()

{

DisplayData[0]=smgduan[ssec10];

DisplayData [1] =smgduan[ssec/10];

DisplayData[2]=0x40;

DisplayData[3]=smgduan[sec10];

DisplayData [4] =smgduan[seg/10];

DisplayData[5]=0x40;

DisplayData[6]=smgduan[m

in10];

DisplayData[7]=smgduan[min/10];

}

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

* Nombre de la función: principal

* Función: función principal

* Entrada: Ninguna

* Salida: Ninguna

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

void main()

{

Timer0Init(); //Inicialización del temporizador 0

mientras(1)

{

datapros();

DigDisplay()

}

}

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

* Función ¿nombre?: void Timer0() interrupción 1

* Función: Función de interrupción del temporizador 0

* ¿Entrada?: Ninguna

* Salida?: Ninguna

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

void Timer0() interrupción 1

{

TH0=0Xd8; //Asigna un valor inicial al temporizador, cronometrando 10 ms

TL0=0Xf0;

ssec--;

si (ssec==00)? //1s

{

ssec=100;

seg --;

si(seg ==00)

{

seg=60

min--;

if(min==-1)

{

P1=1;

ssec=0; min=0;

TR0=0;

p>

}

}

}

}

void Timer1() interrupción 3

{

TH1=(65536-250)/256; //FC

TL1=(? 65536-250)256;

si(p!= 1) p15=~p15;

si(p==1) p15=0;

c;

if(c==250)

p>

{

//c=0;

}

if(cgt; =250amp;amp;1695);

if(c==1696) c=0;

}