Cómo usar una pantalla TM1638 de 4 dígitos. Ver el vídeo
El módulo TM1638 es un componente versátil que puede mostrar números y caracteres mientras se controla mediante botones. En este tutorial aprenderás a configurar y programar esta pantalla para mostrar distintos valores, incluidos números y valores hexadecimales. Al final de esta guía tendrás una pantalla completamente funcional que responde a las pulsaciones de los botones y cambia lo que muestra según la entrada del usuario. Puedes ver una demostración en el video en (en el video en 00:00).

Hardware explicado
El módulo TM1638 está diseñado para mostrar información y recibir entradas de botones. Consiste en una pantalla LED de 8 dígitos y una matriz de 16 botones. Cada botón puede programarse para activar distintas funciones, lo que permite una interfaz fácil de usar. El módulo se conecta a un microcontrolador mediante tres pines: un pin de entrada/salida de datos, un pin de reloj y un pin de activación (strobe). Esta configuración permite una comunicación eficiente entre el microcontrolador y el TM1638. El circuito integrado TM1638 gestiona la pantalla y las entradas de los botones. Usa un protocolo de comunicación serial que le permite controlar la pantalla y leer el estado de los botones con un cableado mínimo. Cada pulsación de botón envía una señal al microcontrolador, que puede entonces ejecutar acciones específicas según qué botón se haya presionado.
Detalles de la hoja de datos
| Fabricante | QYF |
|---|---|
| Número de pieza | TM1638 |
| Voltaje lógico/E/S | 5 V |
| Tensión de alimentación | 5 V |
| Corriente de salida (por segmento) | 20 mA |
| Corriente de pico (total) | 120 mA |
| umbrales lógicos de entrada | 0.2 V (bajo) / 0.8 V (alto) |
| Paquete | DIP de 28 pines |
- Asegúrese de que la tensión de alimentación sea estable a 5 V para un rendimiento óptimo.
- Limite la corriente de salida para evitar daños en la pantalla.
- Use resistencias para evitar una corriente excesiva a través de los LED.
- Filtrar el rebote de las entradas de botones en el software para evitar activaciones múltiples.
- Mantenga el cableado corto para reducir el ruido en la comunicación.
Instrucciones de cableado
Para cablear el módulo TM1638, lo conectarás a tu microcontrolador de la siguiente manera:

VCCen el TM1638 a la fuente de alimentación de 5V de su microcontrolador.
- Conecte elGNDpin del TM1638 al terminal de tierra de tu microcontrolador.
- Conecta elSTBpin (a menudo etiquetado enSTROBE) al pin digital 5 de tu microcontrolador.
- Conecta elCLKpin (reloj) al pin digital 2 de su microcontrolador.
- Conecte elDIOConecta el pin (entrada/salida de datos) al pin digital 3 de tu microcontrolador.
Asegúrate de revisar tus conexiones antes de encender el sistema. Si has seguido el video (en el minuto 02:30), no deberías tener problemas con el cableado.Ejemplos de código y guía paso a paso
El siguiente fragmento de código inicializa el módulo TM1638 y configura la pantalla. El identificadormodulerepresenta la instancia de TM1638 creada para interactuar con la pantalla.
TM1638QYF module(DIO, CLK, STB);
void setup()
{
module.setupDisplay(true, 7);
}En este fragmento, la pantalla se configura para mostrar el brillo máximo (7). La siguiente parte del código gestiona las pulsaciones de los botones y cambia la pantalla según qué botón se pulse.
void update(TM1638QYF* module, word* mode) {
word buttons = module->getButtons();
if (buttons != 0) {
*mode = buttons >> 1;
}
switch (*mode) {
case 0: module->setDisplayToString("press 1"); break;
// other cases follow
}
}Esta función comprueba qué botón está presionado usandogetButtons()y actualiza la pantalla en consecuencia. La variablemodedetermina qué texto se muestra según el botón presionado. Finalmente, el bucle principal actualiza continuamente la pantalla.
void loop()
{
update(&module, &mode);
}Este bucle llama aupdatefunción, asegurando que la visualización se actualice según la interacción del usuario. Para una comprensión completa, consulte el código completo cargado más abajo en el artículo.
Demostración / Qué esperar
Una vez que tengas todo cableado y el código cargado, al presionar los botones el texto de la pantalla debería cambiar en consecuencia. Por ejemplo, al pulsar el botón 1 la pantalla mostrará pulsa 1, mientras que al pulsar el botón 2 mostrará pulsa 2. Si hay algún problema, revisa el cableado y asegúrate de que se están usando los pines correctos como se mencionó. Ver el video (en el minuto 05:00) también ayudará a confirmar que todo funciona como se espera.
Marcas de tiempo del vídeo
- 00:00- Introducción
- 02:30- Instrucciones de cableado
- 05:00- Explicación y Demostración del Código
/*
* Este es el código de Arduino para la pantalla de 8 dígitos TM1638, con 16 botones de matriz.
*
* Escrito por Ahmad Nejrabi para el video de Robojax
* Fecha: 10 de diciembre de 2017, en Ajax, Ontario, Canadá
* Se concede permiso para compartir este código siempre que se mantenga esta
* nota con el código.
* Descargo de responsabilidad: este código es "TAL CUAL" y solo para fines educativos.
*
* /
*
* /*
* // http://arduinolearning.com/code/qyf-tm1638-and-arduino-module.php#codesyntax_2
* Modificado para el video de Robojax el 10 de diciembre de 2017
*/
#include <TM1638.h>
#include <TM1638QYF.h>
#define STB 5
#define DIO 3
#define CLK 2
TM1638QYF module(DIO, CLK, STB);
word mode;
void setup()
{
module.setupDisplay(true, 7);
mode = 0; // botón inicial cero
}
void update(TM1638QYF* module, word* mode) {
word buttons = module->getButtons();
// botón presionado - cambiar modo
if (buttons != 0) {
*mode = buttons >> 1;
if (*mode < 0) {
module->clearDisplay();
delay(100);
}
}
switch (*mode) {
case 0: // S1
module->setDisplayToString("press 1");
break;
case 1: // S2
module->setDisplayToString("press 2");
break;
case 2: // S3
module->setDisplayToString("press 3");
break;
case 4: // S4
module->setDisplayToString("press 4");
break;
case 8: // S5
module->setDisplayToString("press 5");
break;
case 16: // S6
module->setDisplayToString("press 6");
break;
case 32: // S7
module->setDisplayToString("press 7");
break;
case 64: // S8
module->setDisplayToString("press 8");
break;
case 128: // S9
module->setDisplayToString("press 9");
break;
case 256: // S10
module->setDisplayToString("press 10");
break;
case 512: // S11
module->setDisplayToString("press 11");
break;
case 1024: // S12
module->setDisplayToString("press 12");
break;
case 2048: // S13
module->setDisplayToString("press 13");
break;
case 4096: // S14
module->setDisplayToString("press 14");
break;
case 8192: // S15
module->setDisplayToString("press 15");
break;
case 16384: // S16
module->setDisplayToString("robojax");
break;
default: // botón desconocido
module->setDisplayToString("?????");
break;
}
}
void loop()
{
update(&module, &mode);
}
Cosas que podrías necesitar
-
AmazonasTM1638 en Amazonamzn.to
-
AliExpressMódulo de teclado TM1638 en AliExpresss.click.aliexpress.com
Recursos y referencias
-
ExternoBiblioteca TM1638 (de GitHub)github.com
Archivos📁
Bibliotecas de Arduino (zip)
Manual del Usuario
-
Manual TM1638
robojax-TM1638_manual.pdf5.07 MB