Paso 7: Codificación de muestra
Programación del 8051 compatible para secuencia de led no es complicado. Sólo necesita comprender el efecto POV y el simple bucle entonces te puede hacer.Primer segmento es configuración de pines:
#include < AT89X52. H >
a los transistores de conmutación capas
SBIT px0 = P1 ^ 0;
SBIT px1 = P1 ^ 1;
SBIT px2 = P1 ^ 2;
SBIT px3 = P1 ^ 3;
a 74hc154n de turnning en led. salida baja activa, baja
SBIT pd0 = P1 ^ 4; descifrar el pin 0
SBIT pd1 = P1 ^ 5; descifrar el pin 1
SBIT pd2 = P1 ^ 6; descifrar el pin 2
SBIT pd3 = P1 ^ 7; descifrar el pin 3
SBIT pe1 = P3 ^ 7; permiten low activo SW.
Segundo segmento es el led.
Primer número es la duración entre los puntos. Segundo número es no. de veces repetido. Tres dígitos representa xyz de un led. "999" termina el sorteo.
"zz" repite la forma de "Z" 100 veces. Retardo de 1ms entre cada led por lo que tendrá un efecto intermitente.
"cubo" repite un cubo 800 veces pero ninguna demora entre cada led tal ves un cubo estático. No parpadear.
"rain1" a "rain5" son cinco fotogramas diferentes. Cada uno es una forma estática. Cinco formas juntos muestra un movimiento dinámico.
unsigned int código zz [] = {1, 100,
0, 1, 2, 3, 13, 23, 33, 0, 111,222,333, 332,331,330, 230,130,30,
999};
unsigned int código del cubo [] = {0, 800,
0,1,2,3, 30,31,32,33, 330,331,332,333, 300,301,302,303, 100.200, 103.203, 133.233,
unsigned int código rain1 [] = {1, 100, 3,303,33,333,999};
unsigned int código [rain2] = {1, 80, 2,302,32,332,999};
unsigned int código [rain3] = {1, 50, 1,301,31,331,999};
unsigned int código [rain4] = {1, 30, 0,300,30,330,999};
unsigned int código rain5 [] = {50, 1, 110,210,220,120, 111,211,221,121, 112,212,222,122, 113,213,223,123,999};
Tercer segmento es las funciones básicas.
"jugar" a dibujar una forma
encender o apagar un led en (x, y, z)
void onoff (unsigned int x, y unsigned int, unsigned int z) {}
unsigned int n, d0, d1, d2, d3;
activar la capa z
px0 = px1 = px2 = px3 = 0;
Si (z == 0) px0 = 1;
Si (z == 1) px1 = 1;
Si (z == 2) px2 = 1;
Si (z == 3) px3 = 1;
convertir (x, y) con conector n-ésima;
n = x + y * 4;
convertir decimal a binario
Si (n > = 8) {d3 = 1; n = n - 8;} else d3 = 0;
Si (n > = 4) {d2 = 1; n = n - 4;} else d2 = 0;
Si (n > = 2) {d1 = 1; n = n - 2;} else d1 = 0;
Si (n > = 1) {d0 = 1;} else d0 = 0;
pd0 = d0; PD1 = d1; PD2 = d2; PD3 = d3;
}
void delay1ms (unsigned int n) / / 12Mhz, 1ms
{int i; mientras que (n--) {i = 600; mientras (i--);};}
anular el juego (unsigned int * c) {}
unsigned int i, sp, a su vez, x, y, z;
SP = c [0]; vuelta = c [1];
mientras (vuelta > 0) {}
i = 2;
mientras (i < 999) {}
x = c [i] / 100; y = (c [i] - x * 100) / 10; z = (c [i -] x * y - 100 * 10);
OnOff(x,y,z,1);
delay1ms(SP);
i ++;
Si (c[i]==999) i = 999;
};
vuelta--;
};
}
Por último el bucle principal del programa. Dibuja varias veces "z", "cubo" y "lluvia".
void main
{unsigned int i;
mientras que {} (1)
Play(ZZ);
Play(Cube);
para (i = 0; i < 4; i ++) {}
Play(rain1); Play(rain2); Play(rain3); Play(rain4); Play(rain5);
};
}
}
Eso es todo. Disfrute :)