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. 🙂