Buscamos ansiosamente un programa de reloj digital multifuncional basado en el microcontrolador 8051
unsigned char second=0, minute=0, hour=0, max=23; //segundo segundo, minuto minuto, hora hora, tiempo máximo
//función principal
main ()
{
tabla de códigos de caracteres sin firmar[]={0xdd, 0x84, 0xe9, 0xec, 0xb4, 0x7c, 0x7d, 0xc4, 0xfd, 0xfc};
unsigned int i;
void good();
TMOD=0X11; Modo de temporización 1, utilizado para temporización; T1 funciona en modo de temporización 1, utilizado para escanear botones
IE=0X8a; //Activa las interrupciones T0 y T1
IP=0X80; / T1 tiene mayor prioridad que T0 y hay un botón para detener el cronometraje
TH0=0X3c //Establece el valor inicial de T0, cronometraje 5MS
TL0=0Xb0;
TH1=0x3c; // Botón de escaneo del temporizador 250 ms
TL1=0xb0
TR1=1; good();
while(1) // Visualización de rotación de escaneo
{
i=minuto/10 //visualización en decenas
P0_5=0;
P0_4=1;
P0_6=1;
P0_7=1; [i];
for(i=0;ilt;500;i);
i=minuto10; //Muestra el número de minutos
P0_5 =1;
P0_4=0;
P0_6=1;
P0_7=1;
P2=tabla[i];
for (i=0; ilt; 500; i );
i=hora10; //Mostrar dígitos individuales
P0_5=1; >
P0_4=1 ;
P0_6=0
P0_7=1
P2=tabla[i]; > for(i=0; ilt; 500; i );
i=hora/10; //décimo dígito al mostrar
P0_5=1; > P0_4=1;
p>P0_6=1;
if(i! =0)P0_7=0;
P2=tabla[i];
for(i=0;ilt; 500;i);
}
}
//Programa de interrupción de tiempo
void abc() interrupción 1 //subrutina de interrupción t0 (tiempo)
p>{
static char a=0;
TH0=0X3c; //Reasignar valor inicial
TL0=0Xb0;
a ;
si (a==20
) //cuando a==20 segundos pasan
{a=0;
P1_7=~P1_7; //tubo secundario invertido parpadeando
segundo ; // el segundo aumenta en 1
if (minuto==0)
{if(segundolt;2*hora)P1_4=~P1_4;
else P1_4 =1; }
if(segundo==60){segundo=0; minuto;}//Los segundos cuentan hasta 60, los segundos se borran y los minutos se incrementan en 1
{ int i , j=0,k;
unsigned char a[]={0x00, 0x00, 0x00, 0x84, 0x00, 0x19, 0x2d, 0x0d, 0x79, 0x00, 0xbc, 0x2d, 0x9d}; // Colocando 0~9
while(TR0==0 amp; amp; minuto==0amp; amp; hora==0)
{ if( k==60) { k =0;j;if(j==13) j=0;}
P0_5=1; /p>
P0_4 =1;
P0_6=1
si(a[j13]==0x00) P0_7=1
P0_7=0;
P2=a[j13];
para(i=0; ilt; 500; i
<); p> //muestra el sub -ten
if(a[(j 1) 13]==0x00) P0_6=1
else P0_6=0;
P0_4=1;
P0_5=1;
P0_7=1;
P2=a[(j 1)13]; >
for(i =0; ilt; 500; i );
//Visualización de bits
P0_4=1; >
P0_6=1 ;
if(a[(j 2)13]==0x00) P0_5=1;
si no P0_5=0;
P0_7=1;
P2=a[(j 2)13];<
for(i=0;ilt;500;i);
// Mostrar bit sub-0
P0_5=1
if(a[(j 3)13; ]==0x00) P0_4=1 ;
más P0_4=0
P0_6=1
P0_7=1; P2=a[(j 3) 13];
for(i=0; ilt; 500; i
k
}}<; /p>
Por escrito Hay algunas cosas a tener en cuenta al realizar este procedimiento.
Debido a los diferentes métodos de conexión del digitalizador. El código para 0~9 de la matriz a[] también debe cambiarse. De lo contrario, cuando escribas, la pantalla será un desastre
porque los tubos nixie están conectados de manera diferente.