Uma sugestão de módulo para quem precisa utilizar display 7 segmentos sem ter que ligar um monte de fios, é esse módulo display 7 segmentos de 8 dígitos, com CI MAX7219.

Como você pode ver pela imagem, podemos imprimir alguns caracteres nesse display além, é claro, de mostrar os números.
Uma outra maneira de acionar o display, que veremos adiante, é utilizar uma sequência de bits para acionar os segmentos correspondentes no display e criarmos nossos próprios símbolos.
O módulo display Max7219
Aqui no Arduino e Cia já usamos o MAX7219 para controlar tanto módulos matriz de leds 8×8 como displays 7 segmentos:
Da mesma forma que vimos nesses posts, o funcionamento do módulo de 8 dígitos é muito semelhante, pois ele também usa apenas três pinos (lado esquerdo) para conexão ao Arduino ou outro microcontrolador.
No lado direito, encontramos os pinos que permitem a ligação de vários módulos em cascata.
Conexão do módulo display 7 segmentos Max7219 no Arduino
O circuito para ligação ao Arduino fica então dessa maneira, com os pinos 5, 6 e 7 conectados respectivamente aos pinos LOAD, CLK e DIN:
Programa utilizando a biblioteca LedControl
A biblioteca LedControl, que pode ser baixada nesse link é quem vai controlar o acionamento do display. Comandos principais do LedControl utilizados no programa:
// Programa : Display 7 segmentos - 8 digitos MAX7219
// Autor : Arduino e Cia
// Carrega a biblioteca LedControl
#include "LedControl.h"
// Definicoes dos pinos e quantidade de modulos no circuito
LedControl lc=LedControl(7,6,5,1);
void setup()
{
// Inicializa o modulo
lc.shutdown(0,false);
// Ajuste do brilho do display
lc.setIntensity(0,3);
// Apaga o display
lc.clearDisplay(0);
}
void loop()
{
// Envia Arduino e Cia para o display
writeArduinoOn7Segment();
// Contagem regressiva
contagem_regressiva();
// Mostra numeros no lado esquerdo e direito do display
numeros_separados();
// Inicia contador de 0 a 1 milhao
for (long i=0; i < 1000000; i++)
{
printNumber(i);
}
delay(500);
}
void printNumber(long v)
{
// Variavel valor digitos
int digito1;
int digito2;
int digito3;
int digito4;
int digito5;
int digito6;
int digito7;
int digito8;
// Calcula o valor de cada digito
digito1 = v%10;
digito2 = (v / 10) % 10;
digito3 = (v/ 100) % 10;
digito4 = (v/1000) %10;
digito5 = (v/10000) %10;
digito6 = (v/100000) %10;
digito7 = (v/1000000) %10;
digito8 = (v/10000000) %10;
// Mostra o valor de cada digito no display
lc.setDigit(0,7,(byte)digito8,false);
lc.setDigit(0,6,(byte)digito7,false);
lc.setDigit(0,5,(byte)digito6,false);
lc.setDigit(0,4,(byte)digito5,false);
lc.setDigit(0,3,(byte)digito4,false);
lc.setDigit(0,2,(byte)digito3,false);
lc.setDigit(0,1,(byte)digito2,false);
lc.setDigit(0,0,(byte)digito1,false);
delay(00);
}
void writeArduinoOn7Segment()
{
// Escreve Arduino e Cia no display
for (int i =0; i<21; i++)
{
lc.setChar(0,i,'a',false);
lc.setRow(0,i-1,0x05);
lc.setChar(0,i-2,'d',false);
lc.setRow(0,i-3,0x1c);
lc.setRow(0,i-4,B00010000);
lc.setRow(0,i-5,0x15);
lc.setRow(0,i-6,0x1D);
lc.setChar(0,i-7,' ',false);
lc.setChar(0,i-8,'e',false);
lc.setChar(0,i-9,' ',false);
lc.setRow(0,i-10,B1001110);
lc.setRow(0,i-11,B0010000);
lc.setChar(0,i-12,'a',false);
lc.setChar(0,i-13,' ',false);
delay(300);
}
}
void contagem_regressiva()
{
for (int x = 8; x >-1;x--)
{
lc.setDigit(0,x,x+1, false);
lc.setChar(0,x+1,' ',false);
delay(300);
}
lc.clearDisplay(0);
}
void numeros_separados()
{
for (int i =0 ; i<10 ; i++)
{
lc.setDigit(0,0,i,false);
lc.setDigit(0,1,i,false);
lc.setDigit(0,6,i,false);
lc.setDigit(0,7,i,false);
delay(300);
}
lc.clearDisplay(0);
}
Vamos dar uma olhada nos principais comandos dessa biblioteca?
Principais comandos da biblioteca LedControl
LedControl lc=LedControl(7, 6, 5 , 1) = Define os pinos que serão ligados ao módulo. Pino 7 do Arduino ao DIN, pino 6 ao CLK e pino 5 ao LOAD. O último valor se refere à quantidade de módulos que estão conectados ao Arduino.
lc.shutdown(0, false) = Esse comando, além de servir para inicializar o display, também serve para apagar o display sem perder os dados em memória. Ele é especialmente útil quando o módulo estiver sendo alimentado por baterias, já que podemos mostrar os dados no display apenas quando for acionado um botão, por exemplo. Nesse caso, basta alterar o último parâmetro para TRUE quando não quisermos que o display permaneça ligado.
lc.setIntensity(modulo, valor) = Regula o brilho do display. O primeiro parâmetro é o número do módulo, e valor pode ser um número entre 0 (mínimo) à 15 (brilho máximo).
lc.setIntensity(modulo, valor) = Regula o brilho do display. O primeiro parâmetro é o número do módulo, e valor pode ser um número entre 0 (mínimo) à 15 (brilho máximo).
lc.setDigit(modulo, digito, valor, ponto_decimal) = Utilizamos para enviar diretamente um número ou o valor de uma variável para determinado digito no display. O parâmetro ponto_decimal pode receber os valores TRUE (exibe o ponto decimal), ou FALSE (desativa o ponto decimal).
Por último, para acionar apenas determinados segmentos do display, usamos o comando lc.setRow(), que tem a seguinte sintaxe :
lc.setRow(numero_modulo, digito,valor)
Desse modo podemos definir valores em decimal, hexa ou binário, mas o comando fica mais fácil de entender se utilizarmos binário. Veja por exemplo a letra “R”, que escrevemos no display usando esse comando:
lc.setRow(0, digito, 0x05)
Em binário, o comando fica assim:
lc.setRow(0, digito, B00000101)
Que significa que estamos acionando apenas os segmentos E e G do display. A figura abaixo mostra exatamente como isso funciona:
Assim, escolha os segmentos que você deseja ligar ou desligar alterando o valor do bit correspondente para 1 ou 0.
Abaixo, vídeo mostrando o funcionamento do programa mostrado acima:
Gostou? Confira mais posts usando o Max7219 aqui mesmo no Arduino e Cia!