Programación principal
# include & ltreg 51. h & gt; //La definición de macro incluye el archivo de encabezado 51 (debe ser regx51.h).
sbit p0_0=p0^0; //Definir puerto P0.0
sbit p0_1=p0^1; //Definir puerto P0.1.
sbit p0_2=p0^2; //Definir puerto P0.2
Dispcode de código de caracteres sin firmar [] = {0x3f, 0x06, 0x5b, 0x4f, //Superficie de búsqueda de visualización de tubo digital .
0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71, 0x 00 };
Dispbitcode de caracteres sin firmar [] = {0xfe, 0xfd, 0xfb, 0xf7, //Selección de la posición del tubo digital.
0xef, 0xdf, 0xbf, 0x7f};
Carácter sin firmar dispbuf[8]={0, 0, 16, 0, 0, 16, 0, 0};/ / Selección de segmento de tubo Nixie
Dispbitcnt de caracteres sin firmar//
Segundos de caracteres sin firmar; //Todos los segundos variables
Minite de caracteres sin firmar//Todas las variables están divididas
p>
unsigned char h; //todas las variables
unsigned int tcnt
unsigned char mstcnt
unsigned char I, j
Gerente general no válido (no válido)
{
TMOD = 0x 02; //Defina el modo de sincronización como modo de sincronización T0 2.
TH0 = 0x06 //Cargar valor predeterminado de T0
TL0 = 0x06 //Cargar valor inicial de T0
TR0 = 1 //Iniciar cronometraje
ET0 = 1; //Interrupción del temporizador T0
EA = 1; //Activar interrupción global
while(1)
{
If(P0_0==0) //p0.0 presiona el botón (debería ser el segundo botón de control).
{
for(I = 5;i>0;I-)//retraso
for(j = 248;j>0;j- ); p>
If(P0_0==0) //Confirma que el botón está presionado.
{
Segundo++; //Suma 1 al segundo
If(segundo==60) //Si el segundo es 60, se convierte en 0.
{
Segundos = 0;
}
disp buf[0]=segundos % 10;
disp buf[1]=segundos/10; //segundos.
while(P0 _ 0 == 0); //Espera a que se suelte la tecla
}
}//Consulta "segundos"
if(P0_1==0)
{
for(I = 5;i>0;i-)
for(j = 248; j & gt0;j-);
if(P0_1==0)
{
minita++;
si( minita= =60)
{
minita = 0;
}
disp buf[3]= minita % 10;
disp buf[4]= minite/10;
mientras(P0 _ 1 = = 0);
}
}
If(P0_2==0) //Referencia "segundos"
{
for(I = 5;I>0;I-)
for(j = 248;j & gt0;j-);
if (P0_2==0)
{
hora++;
if(hora==24)
{
hora = 0;
}
disp buf[6] =hora % 10;
disp buf[7]=hora/10;
mientras(P0_2 = = 0);
}
}
}
}
La interrupción 1 nula T0 usa 0 // función de interrupción T0 del temporizador
{
MST cnt++; //Aumenta la variable global en 1 e interrumpe un ciclo 8 veces (¡no inicializado!)
if(mstcnt==8)
{
MST CNT = 0;
p 1 = disp code[disp buf[dispbitcnt]]; //Visualización de selección de segmento de tubo digital (¡la variable dispbitcnt no está inicializada!)
P3 = dispbitcode[dispbitcnt]; //Selecciona la posición del tubo digital
dispbitcnt++; //Aumenta la variable en 1 y espera la siguiente interrupción para mostrar el siguiente bit.
If(dispbitcnt==8) //período de visualización de 8 bits
{
dispbitcnt = 0;
} p >
}
tcnt++; //La variable de conteo tcnt aumenta en 1
If(tcnt==4000) //El bit de interrupción se establece cada 250us y se coloca 1 4000 veces.
{
tcnt = 0; //tcnt recount
Segundo ++; //El temporizador aumenta en 1 durante 1 segundo
If(segundo==60) // Tiempo 60S, el segundo devuelve 0, más 1.
{
Segundos = 0;
minite++;
If(minite==60) //Temporizador 60MIN, dividido por 0 , más 1.
{
minite = 0;
hora++;
Si (hora==24) // para tiempo de 24 horas, lo hará Devuelve 0.
{
Horas = 0
}
}
}
disp buf[0]=segundo % 10; //decenas de dígitos por segundo
disp buf[1]=segundo/10; //dígitos de dígitos por segundo
disp buf [ 3]= minite % 10; //dividido en diez lugares
disp buf[4]= minite/10; //dividido en bits
disp buf[6]=hora % 10 ; //10 horas
disp buf[7]=hora/10; //Número de dígitos por hora
}
}