Escriba un programa para el microcontrolador at89c52 para controlar el circuito del cronómetro y mostrar de 0 a 99 en un bucle.
Lo que escribí es ***ánodo, necesitas ***cátodo, simplemente cambia el nivel de entrada RXD, TDX y el valor del código P2 tú mismo.
Conéctese según los requisitos de su tema. Los dos LED se muestran dinámicamente. El tiempo de intervalo de alternancia es constante. Lo configuré en 50 ms. Debido a que estoy usando un software de simulación, el tiempo de intervalo es demasiado corto para mostrar el efecto de alternancia. el intervalo de tiempo es menor.
Además, el botón de pausa en su pregunta está conectado a un pin público. Si el botón está conectado directamente a la interrupción externa 0 para implementar la pausa, será más sensible.
#include
#define uint unsigned int
#define uchar unsigned char
#define duan P2
#define stime 50 //Tiempo entre parpadeos alternos del LED
void init();
void pausa()
sbit wei1; =P3^0;
sbit wei2=P3^1;
sbit s2=P1^4;
sbit s3=P1^ 6;
/***Anodo
retraso nulo(uint xms);
uint g=0
uint s=0; >
uint count=0;
uint ispause=0;
void main()
{
uchar nums[10]={0xc0,0xf9,0xa4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x98};
init();
mientras(1 )
{
si(s2= =0 && ispause==0)
{
si(s2==0)
{
mientras(s2==0);
ispause=1;
pausa();
}}
}
si no(s3==0 && ispause==1)
if(s3==0)
{
{
mientras(s3==0);
ispause=0;
pausa();
}
.
p>}
si(s==0)
{
duan=nums[g];
wei1=0;
wei2=1;
}
else
{
duan=nums[s];
wei1=1;
wei2=0;
retraso(tiempo);
duan=nums[g];
wei1=0;
wei2=1;
retraso (tiempo);
}
}
}
}
pausa vacía()
{
EA=~EA;
}
void init()
{
TMOD=0x02; //El modo de trabajo T0 2 carga automáticamente 200us de 8 bits
TH0=0x38;<
TL0=0x38;
EA =1;
ET0=1;
TR0=1;
}
interrupción ct() nula?1 p >
{
si(cuenta<5000)
cuenta++;
si no
{
cuenta=0;
si(g==9)
{
g=0;
si(s== 9 )
<p>s=0;
más
s++;
s=0;
más
s++ ;
}
else
g++;
}
}
nulo retraso(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j= 112;j>0;j--);
}