Módulo display 7 segmentos 8 dígitos com MAX7219

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.

display 7 segmentos 8 digitos 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!

5/5 - (2 votos)

Related posts

Gravador USBasp AVR com ATMega328P

by Arduino e Cia
11 anos ago

Dicas iniciais Arduino e Cia

by Arduino e Cia
12 anos ago

Ligando display LCD 16×2 em modo 8 bits

by Arduino e Cia
11 anos ago
Sair da versão mobile