Saltar al contenido

Display 7 segmentos

En esta ocasión os quiero compartir el esquema de conexión de un display de 4 dígitos y 7 segmentos. Dicha conexión la realizamos con un registro de desplazamiento, el 74HC595, dicho módulo nos evite tener que conectar los 12 pines al Arduino y con solo tres de pines a la placa controlamos los 7 segmentos.

Por otro lado, conectamos directamente los cables de cada uno de los dígitos a la placa mediante una resistencia de 330ohm.

Al trabajar con dicho componente no podemos usar la instrucción usar la instrucción “delay()” ya que no nos funcionaria correctamente, con lo cual debemos hacer comprobaciones con la instrucción “millis()” o hacer otro método para provocar un retardo.

Dicha librería nos permite varias cosas que hacer con el display, como, por ejemplo: usar el mismo código para un módulo de Ánodo o Cátodo, controlar la intensidad de los leds, indicándole que punto es el decimal, etc.

Esquema de conexión:

Aplicación:

/*
 * Autor: Josep Martinez Tejedor
 * Fecha: 21 de febrero de 2022
 * Web: josepmt.com 
 */
#include <SevSegShift.h>

#define SHIFT_PIN_SHCP 6
#define SHIFT_PIN_STCP 5
#define SHIFT_PIN_DS   4

SevSegShift sevseg(SHIFT_PIN_DS, SHIFT_PIN_SHCP, SHIFT_PIN_STCP, 1, true);

void setup() {
  byte numDigits = 4;
  byte digitPins[] = {9, 10, 11, 12}; // Aquests són els PIN de la ** Arduino **  
  byte segmentPins[] = {0, 1, 2, 3, 4, 5, 6, 7}; // Aquests són els PIN de la ** del registo e desplazamiento **
  bool resistorsOnSegments = false;     //'falso' significa que las resistencias están en pines de dígitos
  byte hardwareConfig = COMMON_ANODE;   // Ver README.md para opciones
  bool updateWithDelays = false;        // Por defecto 'falso' es Recomendado
  bool leadingZeros = false;            // Use 'true' si desea mantener los ceros iniciales
  bool disableDecPoint = false;         // Use 'true' si su punto decimal no existe o no está conectado. Luego, solo necesita especificar 7 segmentPins[]
  
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint);
  sevseg.setBrightness(20);           // Intensiad de los leds hasta 90
}

void loop() {
  static unsigned long tiempoejec=millis()+100; //proximo evento
  static int contador=0;

  if(millis()>=tiempoejec){
    tiempoejec+=100;      //proximo evento
    contador++;
    if(contador==10000){
      contador=0;         //reseteamos contador
    }
    sevseg.setNumber(contador,1);  // El segundo parámetro indica la posición del punto decimal. 
  }
  sevseg.refreshDisplay();
}
/*
 * Autor: Josep Martinez Tejedor
 * Fecha: 21 de febrero de 2022
 * Web: josepmt.com 
 */
#include <SevSegShift.h>

#define SHIFT_PIN_SHCP 6
#define SHIFT_PIN_STCP 5
#define SHIFT_PIN_DS   4

SevSegShift sevseg(SHIFT_PIN_DS, SHIFT_PIN_SHCP, SHIFT_PIN_STCP, 1, true);

void setup() {
  byte numDigits = 4;
  byte digitPins[] = {9, 10, 11, 12}; // Aquests són els PIN de la ** Arduino **  
  byte segmentPins[] = {0, 1, 2, 3, 4, 5, 6, 7}; // Aquests són els PIN de la ** del registo e desplazamiento **
  bool resistorsOnSegments = false;     //'falso' significa que las resistencias están en pines de dígitos
  byte hardwareConfig = COMMON_CATHODE; // Ver README.md para opciones COMMON_CATHODE   COMMON_ANODE
  bool updateWithDelays = false;        // Por defecto 'falso' es Recomendado
  bool leadingZeros = false;            // Use 'true' si desea mantener los ceros iniciales
  bool disableDecPoint = false;         // Use 'true' si su punto decimal no existe o no está conectado. Luego, solo necesita especificar 7 segmentPins[]
  
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint);
  sevseg.setBrightness(20);           // Intensiad de los leds hasta 90
}

void loop() {
  static unsigned long tiempoejec=millis()+100; //proximo evento
  static int contador=0;

  if(millis()>=tiempoejec){
    tiempoejec+=100;      //proximo evento
    contador++;
    if(contador==10000){
      contador=0;         //reseteamos contador
    }
    sevseg.setNumber(contador,1);   // El segundo parámetro indica la posición del punto decimal.
  }
  sevseg.refreshDisplay();
}

Descarga de la libreria: