

Descrición:
Un display ou visualizador de 7 segmentos é un compoñente electrónico que se utiliza para representar números. O display está composto por 7 LEDs, os cales se acenden ou apagan en función do número a representar.
O máis cómodo e fácil para incorporar a un proxecto sería utilizar un módulo 4-digit Display ou DigitalTube, que podedes atopar nesta páxina. Pero usar un display 7-seg máis un rexistro de desprazamento é unha práctica para entender como funcionan estes dispositivos, así que non descartamos esta opción.
Montaxe:
Poden ser de ánodo común ou cátodo común. Isto é que o pin común pódese conectar a Vcc ou a GND respectivamente.

- Ánodo común: Os pins comúns debemos conectalos a Vcc cunha resistencia de protección, por exemplo, de 330Ω. Cada LED actívase cun 1 e desactívase cun 0.
- Cátodo común: Os pins comúns debemos conectalos a GND cunha resistencia de protección, por exemplo, de 330Ω. Cada LED actívase cun 0 e desactívase cun 1.
Para ter sempre a mesma intensidade circulando por cada LED deberiamos conectar unha resistencia de protección en cada un deles, pero por simplificar o circuíto utilizo unha única resistencia no pin común. Chega para protexer o display e a diferencia de luminosidade non é perceptible.
Na seguinte táboa podemos ver que pins teñen que estar activos para acender cada un dos números. Non inclúo o punto, que deixaremos desconectado, pois cun díxito non imos traballar con decimais.

| decimal | BCD | Cátodo común | Ánodo común | ||||||||||||||||||
| A | B | C | D | a | b | c | d | e | f | g | a | b | c | d | e | f | g | ||||
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | |||
| 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | |||
| 2 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | |||
| 3 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | |||
| 4 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | |||
| 5 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | |||
| 6 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | |||
| 7 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | |||
| 8 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||
| 9 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | |||
| Apagado | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |||
Imos controlar o display 7 segmentos de dúas maneiras. Primeiro conectando directamente todos os seus pins ao Arduíno e despois utilizando un rexistro de desprazamento ou Shift Register, o que nos permite aforrar pins de Arduíno para telos dispoñibles para outros compoñentes. Utiliza o que mellor che conveña para o teu proxecto.
1. Conexión directa
1. Conexión directa: Un display 7-segmentos de ánodo común conectariámolo do seguinte xeito cunha placa Arduíno. Por simplificar utilízase unha única resistencia de protección.
Se fose de cátodo común deberiamos conectar os pins comúns a GND.

2. Con Shift Register

- É capaz de almacenar un conxunto de n bits.
- Permite realizar a conversión de datos de serie a paralelo e viceversa.
Nós imos utilizar o 74HC595 (Shift Register de 8 bits serial-in, parallel-out) para cargar datos en serie e que o rexistro os vaia cargando nas saídas en paralelo. Con isto aforramos pins do Arduíno pois con só tres pins podemos controlar 8 saídas dixitais.
A forma de conectalo é a que se mostra na figura.

Hai tres pins importantes que conectaremos á placa Arduíno, no noso caso aos pins 8, 9 e 10:
- DATA IN ou DS: pin para enviar los bits en serie
- LATCH ou ST_CP: Cando os 8 bits de entrada se leron no rexistro, o LATCH escribe estes bits nos pins de saída do chip e mantenos ata que se reciban novos datos.
- Clock ou SH_CP: marca cando hai que ler cada bit.
Programas
1. Conexión directa
1. Conexión directa: Para enviar o díxito que queremos escribir no display creamos un array de m filas e n columnas:
tipo nome[m][n]={ táboa };
Cada fila corresponde a un díxito, e cada valor 0 e 1 aos valores que teñen que tomar as saídas dixitais a, b, c, d , e, f, g para un display.
O array deste exemplo é para un display 7-seg de ánodo común. No caso de que utilices un de cátodo común debes intercambiar os ceros e uns.
// Declaración de variables:
/* Creamos un array de dúas dimensións de 11 filas e 7 columnas.
Cada fila corresponde a un díxito, e cada valor 0 e 1 aos valores que teñen que tomar as saídas dixitais a, b, c, d , e f, g para un display de ánodo común.
Usamos byte (8 bits) e non int(16 bits), para aforrar memoria.
Este array é para un display 7-seg de ánodo común.
No caso de que utilices un de cátodo común debes intercambiar os ceros e uns. */
byte dixito[11][7] = {
{ 0,0,0,0,0,0,1 }, // escribe 0
{ 1,0,0,1,1,1,1 }, // escribe 1
{ 0,0,1,0,0,1,0 }, // escribe 2
{ 0,0,0,0,1,1,0 }, // escribe 3
{ 1,0,0,1,1,0,0 }, // escribe 4
{ 0,1,0,0,1,0,0 }, // escribe 5
{ 0,1,0,0,0,0,0 }, // escribe 6
{ 0,0,0,1,1,1,1 }, // escribe 7
{ 0,0,0,0,0,0,0 }, // escribe 8
{ 0,0,0,1,1,0,0 }, // escribe 9
{ 1,1,1,1,1,1,1 } // apagado
} ;
// Configuración:
void setup() {
for (int n=7;n<=13;n++) { // configuramos os pins do 7 ata o 13 como saídas
pinMode(n, OUTPUT);
}
}
// Programa:
/* Creamos unha función que busca na táboa o valor N.
A función for i vai lendo os elementos do array para escribilos no pin correspondiente de saída,
que o calculamos como i+7, pois usamos os pins do 7 ao 13 para conectar os elementos do display */
void Display(int N) {
for (int i= 0 ; i<7 ; i++) {
digitalWrite(i+7 , dixito[N][i]);
}
}
void loop() {
Display(1); // Chama á función Display para que escriba os díxitos que queiramos
delay(1000);
Display(2);
delay(1000);
}
Se queremos que vaia mostrando os díxitos dun en un , substituímos a función loop anterior por esta:
void loop() {
for ( int k=0 ; k<10 ; k++) { // Chama á función Display para que escriba os díxitos de 0 a 9
Display(k);
delay(1000);
}
}
2. Con Shift Register
2. Con Shift Register: Debemos indicar cales son os pins aos que está conectado o rexistro de desprazamento e crear un array “dixito[]” cos bytes que queremos mostrar en binario (poñemos un B diante, por exemplo B10011110).
Para enviar os datos poñemos o latch a LOW, cargamos os datos mediante a función
shiftOut(dataPin, clockPin, LSBFIRST, dixito[numero]);
e enviamos os datos poñendo Latch a HIGH.
/// Declaración de variables:
int dataPin = 8; // Pin 8 conectado ao DS do 74HC595 - Serve para enviar os datos
int latchPin = 9 ; // Pin 9 conectado ao ST_CP do 74HC595 - Escritura nos pins de saída
int clockPin = 10; // Pin 10 conectado ao SH_CP do 74HC595 - Clock
byte dixito[] ={ // díxitos para un display 7 seg de ánodo común (abcdefgdot)
B00000011, // escribe 0
B10011111, // escribe 1
B00100101, // escribe 2
B00001101, // escribe 3
B10011001, // escribe 4
B01001001, // escribe 5
B01000001, // escribe 6
B00011111, // escribe 7
B00000001, // escribe 8
B00011001, // escribe 9
B11111111 // apagado
};
// Configuración:
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
// Programa:
void Display(byte numero){
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, dixito[numero]); // función para enviar os datos en serie
digitalWrite(latchPin, HIGH);
}
void loop(){ // Imos mostrando os díxitos dun en un.
for(int n=0;n<11;n++){
Display(n);
delay(1000);
}
}
Propostas:
- Display descendente. Fai que se vaian amosando os díxitos de forma descendente, desde o 9 ata o 0.
- Conta atrás. Prememos nun pulsador para iniciar unha conta atrás na que se van amosando os díxitos de forma descendente, desde o 5 ata o 0. Ao chegar a 0 soa unha melodía cun zumbador.
- Contador. Fai que cada vez que premamos un pulsador sume un díxito a un contador, e que este se mostre nun display. Pon un límite de ata 9, e que a partir de entón se poña de novo a 0.
- Contar e descontar. Fai que cada vez que premamos un pulsador sume un díxito a un contador, e que este se mostre nun display. Outro pulsador fai que se desconten os números. Pon un límite superior de 9 e un límite inferior de 0.
- Que pulsador? Conecta dous pulsadores e fai que cada vez que prememos nun deles indique na pantalla cal dos pulsadores foi pulsado primeiro, o 1 ou o 2.