Documente Academic
Documente Profesional
Documente Cultură
Prcticas de Laboratorio
Laboratorio N 07
7 VISUALIZACIN DE CARACTERES EN
UNA MATRIZ DE LEDs DE 8x8
7.1 OBJETIVOS
Descripcin
(2) Protoboard
76Laboratorio N 07
Materiales
Descripcin
F
I
L
A
S
X
X
X
128
X
64
32
16
1
1
COLUMNAS
Mapa de
Bits
Pesos
Binarios
de LEDs de 8x877
MATRIZ DE
LEDs DE 8x8
COLUMNAS
1
124
138
146
162
124
78Laboratorio N 07
Qu se va a hacer?
Programando.
7.4.1 Qu se va a hacer?
En ste stima prctica de laboratorio, se realizar las siguientes aplicaciones:
F G H I J
G
E
1
60
55
50
45
40
35
30
25
20
15
10
F G H I J
1
G
A B C D E
F
C
60
55
50
45
40
35
30
25
20
10
15
3
2
A B C D E
F G H I J
G
60
55
50
B
D
1
60
55
45
45
50
40
40
8
7
30
25
20
15
10
6
5
A
B
A B C D E
F G H I J
1
G
4
3
C
D
30
25
20
15
10
2
1
E
F
35
G
H
35
A B C D E
(8) 120
de LEDs de 8x879
7.4.3 Programando
Primera experiencia:
Aprenderemos a mostrar un carcter en la matriz de LEDs de 8x8. Por ejemplo el nmero 0, el cual
se hall su mapa de bits anteriormente.
H
G
F
E
FILAS
D
C
B
A
1
COLUMNAS
80Laboratorio N 07
// Se declaran los caracteres como un array con los arrays de los bitmap de los distintos
carateres que se va a mostrar en la matriz.
// Como los elementos del array con cadenas de caracteres se utiliza int*
const int* letras[] = {_cero, _uno, _dos, _tres, _cuatro, _cinco, _seis, _siete, _ocho,
_nueve};
// La funcin SETUP se utiliza para inicializar los modos de trabajo de los pines, o el puerto
serie:
void setup()
{
for (int i=0; i<=7; i++)
{
pinMode(filasMatriz[i], OUTPUT); // Los PINES 2, 3, 4, 5, 6, 7, 8 y 9 como salidas para
controlar las filas de la matriz de LEDs de 8x8.
pinMode(columnasMatriz[i], OUTPUT); // Los PINES 14, 15, 16, 17, 18, 19, 20 y 21 como
salidas para controlar las columnas de la matriz de LEDs de 8x8.
}
// Se inicializa la matriz apagada.
for (int j=0; j<=7; j++)
{
digitalWrite(filasMatriz[j], LOW); // Las filas se activan con UNO's (HIGHs).
digitalWrite(columnasMatriz[j], HIGH); // Las columnas se activan con CERO's (LOWs)
}
}
// La funcin LOOP se ejecuta continuamente respondiendo a los eventos que se produzcan en la
placa:
void loop()
{
actualizaMatriz();
}
void actualizaMatriz()
{
construyePantalla();
muestraPantalla();
}
// Se utilizar el siguiente array con potencias de 2 para manejar los bits de cada bitmap.
const int potencias[8] = {1,2,4,8,16,32,64,128};
// Cada nmero corresponde, en binario, a 00000001, 00000010, 00000100, 00001000, 00010000,
00100000, 01000000, 1000000.
void construyePantalla() // Carga el estado actual en el array datos[].
{
int caracterActual = cogeCaracter(fraseDinamica[5]);
for (int fila=0; fila<=7; fila++)
{
datos[fila] = 0;
// Se resetea a 0 la fila que estoy considerando.
for (int columna=0; columna<=7; columna++) // Se realiza un barrido por la columna.
{
// Se construir un nmero decimal a base de sumas de tal forma que tenga UNOs en los
lugares donde quiero que se encienda el LED.
datos[fila] = datos[fila] + (potencias[columna] & (letras[caracterActual][fila])); //
Se muestra el caracter actual.
}
}
}
void muestraPantalla()
{
for (int columna=0; columna<=7; columna++) // Se har el barrido de la matriz columna por
columna.
{
for (int i=0; i<=7; i++) digitalWrite(filasMatriz[i], LOW); // Se pone a LOW todos los
pines de control de filas.
for (int j=0; j<=7; j++) // Solo se pondr en LOW el pin de la columna que estamos
considerando.
{
if (j==columna) digitalWrite(columnasMatriz[j], LOW);
else digitalWrite(columnasMatriz[j], HIGH); // El resto de pines se pone a HIGH (se
apaga el resto de columnas de LEDs).
}
for (int fila=0; fila<=7; fila++) // Se realiza el barrido, dentro de la columna activa,
por la fila.
{
int Bit=(datos[columna] >> fila) & 1; // Se detecta los "1" de las fila si al
multiplicarlo por 1 da 1.
de LEDs de 8x881
Segunda experiencia:
Aprenderemos a realizar un desplazamiento de caracteres en la matriz de LEDs de 8x8. Este
desplazamiento ser de abajo hacia arriba. En esta aplicacin se desplazaran los nmeros decimales.
82Laboratorio N 07
// REA DE DEFINICIN DE VARIABLES UTILIZADAS EN EL PROGRAMA
// Variables Estticas:
int numeroPantallas = 20;
un lugar.
de LEDs de 8x883
84Laboratorio N 07
int Bit=(datos[columna] >> fila) & 1; // Se detecta los "1" de las fila si al
multiplicarlo por 1 da 1.
if (Bit==1) digitalWrite(filasMatriz[fila], HIGH); // Si el bit en el array datos[]
es un 1, encender el LED.
}
delayMicroseconds(tiempoBarridoColumna); // Es el tiempo que cada columna est
encendida.
}
}
}
// Veamos como asociamos cada caracter de la cadena con su bitmap
int cogeCaracter(char caracter)
{
int returnValue;
switch(caracter)
{
case '0': returnValue = cero;
break;
case '1': returnValue = uno;
break;
case '2': returnValue = dos;
break;
case '3': returnValue = tres;
break;
case '4': returnValue = cuatro;
break;
case '5': returnValue = cinco;
break;
case '6': returnValue = seis;
break;
case '7': returnValue = siete;
break;
case '8': returnValue = ocho;
break;
case '9': returnValue = nueve;
break;
case ' ': returnValue = espacio;
break;
}
return returnValue;
}
de LEDs de 8x885
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________