¿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]; p>
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): p>
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;
} p>
}
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
{ p>
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>
}
}
}
} 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;
}