El modelo de display de 7 segmentos que probamos en este proyecto dispone de un circuito integrado TM1637 (se puede comprar a parte y conectar) justo en su parte trasera que reduce el número de conexiones o pines necesarios de conexión de los 12 sobre el módulo sin este CI hasta solo 4 necesarios para conectar a Arduino y empezar a funcionar. Donde dos pines se necesitan para las conexiones de energía (VCC y GND) y los otros dos para el control de los segmentos.
El TM1637 es un circuito integrado para display de LED de 7 segmentos y teclado, este módulo se puede utilizar proyectos que muestren valores numéricos (como relojes, temperatura, etc).
![]() |
Detalle del módulo |
El módulo que he adquirido no dispone de soldaduras en los 4 pines, por lo que es preciso realizar un trabajo previo de presoldado de 4 pines para poder conectarlos con el cable DUPONT female-male a Arduino. Por unos céntimos más es recomendable comprarlo con los pines soldados.
Diagrama de conexión
La conexión a arduino del módulo es muy sencilla, solo se necesitan dos pines de datos y los otros dos se conectan a VCC y a GND, por lo que no es necesario hacer uso de una protoboard como sí ocurría con el display de 7 segmentos de un dígito visto en una anterior entrada.
![]() |
Detalle del diagrama de conexión |
Código
Hay que incluir la librería TM1637.h a través del IDE de arduino, como siempre buscamos por tm1637 y elegimos la librería de Avishay Orpaz , y una vez la tengamos instalada la referenciamos en el código. Incorpora una serie de métodos para hacer más fácil la gestión del módulo.
En el siguiente código de ejemplo, se hace uso del método showNumberDec(i) para escribir directamente el número en el display y otros métodos, para incrementar el brillo, escribir texto o encender y apagar los segmentos en los cuatro digitos o alguno de ellos.
#include <TM1637Display.h>
// Define the connections pins:
#define CLK 7
#define DIO 6
// Create display object of type TM1637Display:
TM1637Display display = TM1637Display(CLK, DIO);
// Array para encender todos los leds, en hexadecimal
const uint8_t allon[] = {0xff, 0xff, 0xff, 0xff};
// Array para apagar todos los leds, en hexadecimal
const uint8_t blank[] = {0x00, 0x00, 0x00, 0x00};
//array con palabra JaVI
/*puedes encender segmentos individuales para escribir palabras u otros símbolos
A
__
F | | B
G
__
E | | C
__
D
*/
const uint8_t JaVI[] = {
SEG_B | SEG_C | SEG_D | SEG_E , // J
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // a
SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // U
SEG_B | SEG_C // I
};
//array con grados celsius
const uint8_t celsius[] = {
SEG_A | SEG_B | SEG_F | SEG_G, // Circulo
SEG_A | SEG_D | SEG_E | SEG_F // C
};
void setup() {
// put your setup code here, to run once:
pinMode(PIN2,OUTPUT);
pinMode(PIN3,OUTPUT);
pinMode(PIN4,OUTPUT);
pinMode(PIN10,OUTPUT);
pinMode(PIN11,OUTPUT);
pinMode(PIN12,OUTPUT);
pinMode(PIN13,OUTPUT);
randomSeed(analogRead(A0));
display.clear();
delay(1000);
}
void loop() {
//compruebaLedsCorrespondencia();
secuencia4digit();
//SecuenciaEnteros09(1);
//SecuenciaEnteros09(0);
//SecuenciaRandom();
}
void d4digit_init(){
display.setBrightness(3);
display.setSegments(allon);
delay(1000);
display.clear();
delay(1000);
}
//acelerómetro hasta 200
void d4digit_acel()
{ byte i;
for (i = 0; i < 201; i++) {
display.showNumberDec(i);
delay(40);
}
delay(1000);
display.clear();
delay(1000);
}
//cambiamos de posición los valores entre los 4 dígitos
void d4digit_chanpos(){
byte j,i;
for (j = 0; j < 2; j++) {
for (i = 3; i < 7; i++) {
display.showNumberDec(i, false, 1, i);
delay(500);
display.clear();
}
}
delay(1000);
}
//mostramos un texto con brillo de forma incremental
void d4digit_text(){
byte k;
for (k = 0; k < 8; k++) {
display.setBrightness(k);
display.setSegments(JaVI);
delay(500);
}
display.clear();
delay(1000);
}
//añadimos los puntos para formar una hora
void d4digit_clockformat(int valor)
{
display.showNumberDecEx(valor, 0b11100000, false, 4, 0);
delay(1000);
display.clear();
delay(1000);
}
//escribimos el valor de una temperatura con el valor en grados celsius escrito
void d4digit_tempformat(byte valor){
display.showNumberDec(valor, false, 2, 0);
display.setSegments(celsius, 2, 2);
delay(1000);
display.clear();
delay(1000);
}
void secuencia4digit()
{
d4digit_init();
d4digit_acel();
d4digit_chanpos();
d4digit_text();
d4digit_clockformat(1200);
d4digit_tempformat(34);
}
Referencias
- http://polaridad.es/tm1637-driver-display-led-7-segmentos-teclado/
- https://www.makerelectronico.com/display-tm1637-4-digitos-7-segmentos/
- https://www.makerguides.com/tm1637-arduino-tutorial/