Vamos a manejar un display de 7 segmentos cátodo común miniatura de referencia SM420561K para ser implementado en el protoboard.
El display dispone de 7 leds para los segmentos a, b, c, d, e, f, g tal como se muestra en la figura anterior.Además se dispone de un octavo led para el punto. La configuración de pines se indica también en la figura. Existen dos pines para el cátodo común que debe conectarse a GND (tierra).
El objetivo del presente proyecto es visualizar en el display los números del 0 al 9, y las letras A,B,C.D,E,F,
del sistema numérico Hexadecimal.
El punto solo enciende con las letras.
El objetivo del presente proyecto es visualizar en el display los números del 0 al 9, y las letras A,B,C.D,E,F,
del sistema numérico Hexadecimal.
En los almacenes especializados, como tienda de Robótica, donde se suministran accesorios para trabajar con el Arduino venden cables de colores, muy útiles para llevar un orden y no confundirnos al conectar el display a los pines del Arduino.
Nosotros conectamos cada segmento con un cable de color específico tal como se muestra en el siguiente esquema, disponiendo de una resistencia de 220 ohmios, 1/4 watio, en serie con cada diodo led, para limitar la corriente en cada led y proteger los puertos del Arduino:
//Visualización en display de 7 segmentos de los caracteres del sistema hexadecimal
// Si el carácter es alfabético se enciende el punto decimal
// Los Leds a,b,c,d,e,f,g y el punto decimal P se encienden al producirse un nivel lógico alto(HIGH) en el pin
int i;
int j;
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;
int P= 9;
int retardo= 2000;
void setup( )
{
pinMode ( a, OUTPUT);
pinMode ( b, OUTPUT);
pinMode ( c, OUTPUT);
pinMode ( d, OUTPUT);
pinMode ( e, OUTPUT);
pinMode ( f, OUTPUT);
pinMode ( g, OUTPUT);
pinMode ( P, OUTPUT);
}
void loop ( )
{
for (i=0;i<=15;i++)
{
if (i == 0) // 0
{digitalWrite(a,HIGH); //enciende el segmento a
digitalWrite(b,HIGH); //enciende el segmento b
digitalWrite(c,HIGH); //enciende el segmento c
digitalWrite(d,HIGH); //enciende el segmento d
digitalWrite(e,HIGH); //enciende el segmento e
digitalWrite(f,HIGH); //enciende el segmento f
digitalWrite(g,LOW); //apaga el segmento g
digitalWrite(P,LOW); //apaga el punto P
delay(retardo);}
if (i == 1) // 1
{digitalWrite(a,LOW); //apaga el segmento a
digitalWrite(b,HIGH); //enciende el segmento b
digitalWrite(c,HIGH); //enciende el segmento c
digitalWrite(d,LOW); //apaga el segmento d
digitalWrite(e,LOW); //apaga el segmento e
digitalWrite(f,LOW); //apaga el segmento f
digitalWrite(g,LOW); //apaga el segmento g
digitalWrite(P,LOW); //apaga el punto P
delay(retardo);}
if (i == 2) //2
{digitalWrite(a,HIGH); //enciende el segmento a
digitalWrite(b,HIGH); //enciende el segmento b
digitalWrite(c,LOW); //apaga el segmento c
digitalWrite(d,HIGH); //enciende el segmento d
digitalWrite(e,HIGH); //enciende el segmento e
digitalWrite(f,LOW); //apaga el segmento f
digitalWrite(g,HIGH); //enciende el segmento g
digitalWrite(P,LOW); //apaga el punto P
delay(retardo);}
if (i == 3) //3
{digitalWrite(a,HIGH); //enciende el segmento a
digitalWrite(b,HIGH); //enciende el segmento b
digitalWrite(c,HIGH); //enciende el segmento c
digitalWrite(d,HIGH); //enciende el segmento d
digitalWrite(e,LOW); //apaga el segmento e
digitalWrite(f,LOW); //apaga el segmento f
digitalWrite(g,HIGH); //enciende el segmento g
digitalWrite(P,LOW); //apaga el punto P
delay(retardo);}
if (i == 4) //4
{digitalWrite(a,LOW); //apaga el segmento a
digitalWrite(b,HIGH); //enciende el segmento b
digitalWrite(c,HIGH); //enciende el segmento c
digitalWrite(d,LOW); //apaga el segmento d
digitalWrite(e,LOW); //apaga el segmento e
digitalWrite(f,HIGH); //enciende el segmento f
digitalWrite(g,HIGH); //enciende el segmento g
digitalWrite(P,LOW); //apaga el punto P
delay(retardo);}
if (i == 5) //5
{digitalWrite(a,HIGH); //enciende el segmento a
digitalWrite(b,LOW); //apaga el segmento b
digitalWrite(c,HIGH); //enciende el segmento c
digitalWrite(d,HIGH); //enciende el segmento d
digitalWrite(e,LOW); //apaga el segmento e
digitalWrite(f,HIGH); //enciende el segmento f
digitalWrite(g,HIGH); //enciende el segmento g
digitalWrite(P,LOW); //apaga el punto P
delay(retardo);}
if (i == 6) //6
{digitalWrite(a,LOW); //apaga el segmento a
digitalWrite(b,LOW); //apaga el segmento b
digitalWrite(c,HIGH); //enciende el segmento c
digitalWrite(d,HIGH); //enciende el segmento d
digitalWrite(e,HIGH); //enciende el segmento e
digitalWrite(f,HIGH); //enciende el segmento f
digitalWrite(g,HIGH); //enciende el segmento g
digitalWrite(P,LOW); //apaga el punto P
delay(retardo);}
if (i == 7) //7
{digitalWrite(a,HIGH); //enciende el segmento a
digitalWrite(b, HIGH); //enciende el segmento b
digitalWrite(c, HIGH); //enciende el segmento c
digitalWrite(d,LOW); //apaga el segmento d
digitalWrite(e, LOW); //apaga el segmento e
digitalWrite(f, LOW); //apaga el segmento f
digitalWrite(g, LOW); //apaga el segmento g
digitalWrite(P,LOW); //apaga el punto P
delay(retardo);}
if (i == 8) //8
{digitalWrite(a,HIGH); //enciende el segmento a
digitalWrite(b, HIGH); //enciende el segmento b
digitalWrite(c, HIGH); //enciende el segmento c
digitalWrite(d, HIGH); //enciende el segmento d
digitalWrite(e, HIGH); //enciende el segmento e
digitalWrite(f, HIGH); //enciende el segmento
digitalWrite(g, HIGH); //enciende el segmento g
digitalWrite(P,LOW); //apaga el punto P
delay(retardo);}
if (i == 9) //9
{digitalWrite(a,HIGH); //enciende el segmento a
digitalWrite(b,HIGH); //enciende el segmento b
digitalWrite(c,HIGH); //enciende el segmento c
digitalWrite(d,LOW); //apaga el segmento d
digitalWrite(e,LOW); //apaga el segmento e
digitalWrite(f,HIGH); //enciende el segmento f
digitalWrite(g,HIGH); //enciende el segmento g
digitalWrite(P,LOW); //apaga el punto P
delay(retardo);}
if (i == 10) // A
{digitalWrite(a,HIGH); //enciende el segmento a
digitalWrite(b, HIGH); //enciende el segmento b
digitalWrite(c, HIGH); //enciende el segmento c
digitalWrite(d, LOW); //apaga el segmento d
digitalWrite(e, HIGH); //enciende el segmento e
digitalWrite(f, HIGH); //enciende el segmento
digitalWrite(g, HIGH); //enciende el segmento g
digitalWrite(P,HIGH); //enciende el punto P
delay(retardo);}
if (i == 11) // B
{digitalWrite(a, LOW); //apaga el segmento a
digitalWrite(b, LOW); //apaga el segmento b
digitalWrite(c, HIGH); //enciende el segmento c
digitalWrite(d, HIGH); //enciende el segmento d
digitalWrite(e, HIGH); //enciende el segmento e
digitalWrite(f, HIGH); //enciende el segmento
digitalWrite(g, HIGH); //enciende el segmento g
digitalWrite(P,HIGH); //enciende el punto P
delay(retardo);}
if (i == 12) // C
{digitalWrite(a, HIGH); //enciende el segmento a
digitalWrite(b, LOW); //apaga el segmento b
digitalWrite(c, LOW); //apaga el segmento c
digitalWrite(d, HIGH); //enciende el segmento d
digitalWrite(e, HIGH); //enciende el segmento e
digitalWrite(f, HIGH); //enciende el segmento
digitalWrite(g, LOW); //enciende el segmento g
digitalWrite(P,HIGH); //enciende el punto P
delay(retardo);}
if (i == 13) // D
{digitalWrite(a, LOW); //apaga el segmento a
digitalWrite(b, HIGH); //enciende el segmento b
digitalWrite(c, HIGH); //enciende el segmento c
digitalWrite(d, HIGH); //enciende el segmento d
digitalWrite(e, HIGH); //enciende el segmento e
digitalWrite(f, LOW); //apaga el segmento f
digitalWrite(g, HIGH); //enciende el segmento g
digitalWrite(P,HIGH); //enciende el punto P
delay(retardo);}
if (i == 14) //E
{digitalWrite(a,HIGH); //enciende el segmento a
digitalWrite(b, LOW); //apaga el segmento b
digitalWrite(c, LOW); //apaga el segmento c
digitalWrite(d, HIGH); //enciende el segmento d
digitalWrite(e, HIGH); //enciende el segmento e
digitalWrite(f, HIGH); //enciende el segmento
digitalWrite(g, HIGH); //enciende el segmento g
digitalWrite(P,HIGH); //enciende el punto P
delay(retardo);}
if (i == 15) //F
{digitalWrite(a,HIGH); //enciende el segmento a
digitalWrite(b, LOW); //apaga el segmento b
digitalWrite(c, LOW); //apaga el segmento c
digitalWrite(d, LOW); //apaga el segmento d
digitalWrite(e, HIGH); //enciende el segmento e
digitalWrite(f, HIGH); //enciende el segmento
digitalWrite(g, HIGH); //enciende el segmento g
digitalWrite(P,HIGH); //enciende el punto P
delay(retardo);}
}
}
La alimentación al Arduino UNO R3 se establece a través de una pila de 9 voltios recargable, con un plug de 2.1 mm, positivo al centro.
Se puede obtener un programa mucho más corto utilizando arreglos,tal como se muestra a continuación:
// Display de 7 segmentos,catodo común, en hexadecimal usando arreglos
void setup (){
for (int X = 2; X <= 9; X++)
pinMode(X,OUTPUT);
}
void loop (){
int caracter = 0;
while (caracter <= 15) {
display7sg(caracter);
caracter ++;
delay (3000);
}
}
void display7sg(int num){
byte
valores[]={B00111111,B00000110,B01011011,B01001111,B01100110,B01101101,B01111101,B00000111,B01111111,B01101111,B11110111,B11111100,B10111001,B11011110,B11111001,B11110001};
for (int X = 0; X <= 7; X++) digitalWrite ( X + 2, bitRead(valores[num],X));
}