Red de conocimiento informático - Aprendizaje de programación - Programación principal

Programación principal

Este es un programa de visualización de reloj que utiliza tubos digitales para visualización dinámica. Si no comprende cómo mostrarlo, consulte el principio de visualización dinámica. No hay un diagrama de hardware aquí, pero según el programa debería ser P0.0 PO.1 P0.2 Presione la tecla una vez por segundo y el valor correspondiente aumentará en 1 cada vez.

# 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- );

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;

}

}

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

}

}