Usando lenguaje c para implementar un reloj digital usando un microcontrolador Se ha proporcionado la imagen.
#include lt;reg51.hgt;
código de carácter sin firmar DSY_CODE[]={
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82 , 0xf8, 0x80, 0x90,
//Número 0 1 2 3 4 5 6 7 8 9
0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xff};
// A b C d E F Destrucción total 16
código de carácter sin firmar DSY_WEI[]={0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80} ;
//Código de posición, el número 0 está todo apagado, 1, 2, 3,... corresponden a los tubos digitales de izquierda a derecha
unsigned char DSY_BUFFER[]={ 0, 0, 0xBF, 0, 0, 0xBF, 0, 0}; //0xBF muestra "-"
carácter sin firmar DSY_IDX, Key_State, hh, mm, ss, s20;
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
retrasos vacíos (car ms sin firmar )
{
carácter sin firmar i;
while(ms--) for(i=0;ilt;120;i);
}
void Aumentar_hora()
{
if( hhgt; 23)
{
hh =0;
}
DSY_BUFFER[0]=DSY_CODE[hh/10]
DSY_BUFFER[1]=DSY_CODE[hh10]; /p >
}
void Incremento_Minuto()
{
if( mmgt; 59)
{
mm=0;
Aumento_Hora();
}
DSY_BUFFER[3]=DSY_CODE[mm/10];
DSY_BUFFER[4]=DSY_CODE[mm10];
}
void Guarantee_Second()
{
if( ssgt 59 )
{
ss=0;
Incrementar_Minuto();
}
DSY_BUFFER[ 6] =DSY_CODE[ss/10];
DSY_BUFFER[7]=DSY_CODE[ss10];
if(cnt_Bufflt;12)cnt_Buff;
}
p>void T0_INT() interrupción 1
{
TH0=(65536-2000)/256;
T
L0=(65536-2000)256;
P2=DSY_WEI[0];
P0=DSY_BUFFER[DSY_IDX];
P2=DSY_WEI[DSY_IDX 1 ];
DSY_IDX
DSY_IDX=8
}
anular T1_INT() interrupción 3
{
TH1=(65536-(50000-Val_ADJ))/256;
TL1=(65536-(50000-Val_ADJ))256 //Corrección de tiempo Val_ADJ número sin signo <; /p>
if( s20==20)
{
s20=0
Incrementar_segundo(); }
}
void main()
{
carácter sin firmar i;
TMOD=0x11 ;
TH1=(65536-50000-Val_ADJ)/256;
TL1=(65536-50000-Val_ADJ)256;
TH0=(65536-2000; )/256;
TL0=(65536-2000)256;
TCON=0x01; //IT0=1, interrupción externa 0 disparador de flanco descendente
EA=1;
ET0=1;
ET1=1;
hh=12; p>
ss=0;
DSY_BUFFER[0]=DSY_CODE[hh/10];
DSY_BUFFER[1]=DSY_CODE[hh10]; p>DSY_BUFFER[3]=DSY_CODE[mm/10];
DSY_BUFFER[4]=DSY_CODE[mm10];
DSY_BUFFER[6]=DSY_CODE[ss/10] ;
DSY_BUFFER[7]=DSY_CODE[ss10];
DSY_IDX=0;
TR0=1;
TR1=1 ;
Key_State=0xff;
while(1)
{
if(P1^Key_State)
{
demorams(10);
if(P1^Key_State)
{
//EA=0;
p>Key_State=P1;
if(!K1)
{
Incrementar_hora();
}
p>
if(!K2)
{
if( mmgt; 59) mm=0
DSY_BUFFER[ 3]=DSY_CODE[mm /10];
DSY_BUFFER[4]=DSY_CODE[mm10]
}
si(!K3)
{
si
(ssgt;59) ss=0;
DSY_BUFFER[6]=DSY_CODE[mm/10];
DSY_BUFFER[7]=DSY_CODE[mm10];
}
}
EA=1
}
if(cnt_Buff==10)
{
DSY_BUFFER[0]=DSY_CODE[hh/10]
DSY_BUFFER[1]=DSY_CODE[hh10];
DSY_BUFFER[3]= DSY_CODE[mm/10];
DSY_BUFFER[4]=DSY_CODE[mm10];
DSY_BUFFER[6]=DSY_CODE[ss/10];
DSY_BUFFER[7]=DSY_CODE[ss10];
}
}
}