O módulo display 4 dígitos 74HC595 é um módulo que usa 4 displays de 7 segmentos, onde podemos mostrar números e letras, e que usa apenas 3 pinos para conexão ao microcontrolador.

Neste post vamos usar o módulo 74HC595 para montar um contador com 2 push-buttons, que você pode usar como base para montar seu próprio projeto.
O módulo display 7 segmentos 74HC595
Na imagem abaixo podemos ver o módulo display 4 dígitos com 74HC595, que tem no lado esquerdo 5 pinos de entrada, sendo 3 de controle e 2 de alimentação. No lado oposto, temos os pinos de saída, que permitem que você interligue módulos idênticos:
O controle dos segmentos dos dígitos do display é feito por dois CI´s 74HC595, que são registradores de deslocamento utilizados para expandir as portas do microcontrolador.
Com o 74HC595, você usa 3 pinos de controle para enviar dados para as 8 portas de saída do CI, com a vantagem de poder utilizar vários desses módulos ao mesmo tempo.
Circuito display 4 dígitos com 74HC595
Para ligar o módulo display 4 dígitos 74HC595 ao Arduino e montar o nosso contador, vamos usar os pinos digitais 5, 6 e 7, que serão ligados no módulo nos pinos DIO, RCLK, e SCLK, respectivamente.
Para os botões do contador, vamos usar dois push-buttons ligados ao pino 2 (para aumentar o contador), e ao pino 3 (para diminuir).
Os resistores tem a função de pull-down, e foram usados resistores de 330 ohms.
Programa contador com 74HC595
O programa abaixo utiliza as bibliotecas TM74HC595Display (download) e TimerOne (download). Descompacte a pasta e coloque as bibliotecas na pasta LIBRARIES da IDE do Arduino.
No setup() foram definidos os endereços para os dígitos de 0 a 9 que serão utilizados no programa, e também um pequeno teste com os 4 dígitos, mostrando os números de 1 a 4 no display.
Na seção loop(), são lidos os valores das portas do botões (2 e 3), que quando acionadas aumentam ou diminuem o valor do contador no display.
//Programa: Contador com modulo display 7 digitos 74HC595
//Autor: Arduino e Cia
#include <TM74HC595Display.h>
#include <TimerOne.h>
//Pinos de conexao ao modulo
int PINO_SCLK = 7;
int PINO_RCLK = 6;
int PINO_DIO = 5;
//Pinos de conexao push-button
int PINO_UP = 2;
int PINO_DOWN = 3;
int contador = 0;
TM74HC595Display disp(PINO_SCLK, PINO_RCLK, PINO_DIO);
unsigned char LED_0F[10];
void setup()
{
//Definicao dos digitos de 0 a 9
LED_0F[0] = 0xC0; //0
LED_0F[1] = 0xF9; //1
LED_0F[2] = 0xA4; //2
LED_0F[3] = 0xB0; //3
LED_0F[4] = 0x99; //4
LED_0F[5] = 0x92; //5
LED_0F[6] = 0x82; //6
LED_0F[7] = 0xF8; //7
LED_0F[8] = 0x80; //8
LED_0F[9] = 0x90; //9
Timer1.initialize(1500); // set a timer of length 1500
Timer1.attachInterrupt(timerIsr); // attach the service routine here
//Testes iniciais
//Envia o numero 1 para o primeiro digito
disp.set(LED_0F[1], 3);
delay(1000);
//Apaga o display
disp.clear();
//Envia o numero 2 para o primeiro digito
disp.set(LED_0F[2], 2);
delay(1000);
disp.clear();
//Envia o numero 3 para o primeiro digito
disp.set(LED_0F[3], 1);
delay(1000);
disp.clear();
//Envia o numero 4 para o primeiro digito
disp.set(LED_0F[4], 0);
delay(1000);
disp.clear();
}
void loop()
{
//Verifica se o botao aumentar contador foi acionado
int up = digitalRead(PINO_UP);
if (up == 1)
{
contador++;
while (digitalRead(PINO_UP) == 1) {
delay(10);
}
//disp.clear();
}
//Verifica se o botao diminuir contador foi acionado
int down = digitalRead(PINO_DOWN);
if (down == 1)
{
contador--;
while (digitalRead(PINO_DOWN) == 1) {
delay(10);
}
//disp.clear();
}
disp.clear();
//Mostra o valor do contador no display
disp.digit4(contador);
delay(10);
}
void timerIsr()
{
disp.timerIsr();
}
Para mostrar o valor da variável contador no display, utilizamos o comando disp.digit4(), que vai ajustando os dígitos de acordo com o valor da variável (ocupando apenas os dígitos necessários no display).
Você também pode utilizar o comando disp.set() para enviar um valor para um dígito específico, ou o comando disp.digit4showZero() para mostrar o 0 nos dígitos à esquerda.
Você pode ver como utilizar esses comandos carregando o programa de exemplo da própria biblioteca TM74HC595Display, que mostra inclusive como usar letras nesse display. 🙂