Código de búsqueda

Cómo usar una pantalla TM1638 de 4 dígitos. Ver el vídeo

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

TM1637 keypad display module-1

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

FabricanteQYF
Número de piezaTM1638
Voltaje lógico/E/S5 V
Tensión de alimentación5 V
Corriente de salida (por segmento)20 mA
Corriente de pico (total)120 mA
umbrales lógicos de entrada0.2 V (bajo) / 0.8 V (alto)
PaqueteDIP 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:

Arduino wiring for TM1637 keypad display module
Arduino wiring for TM1637 keypad display module
- Conecte el pin etiquetadoVCCen 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

Imágenes

TM1637 keypad display module-1
TM1637 keypad display module-1
TM1637 keypad display module-2
TM1637 keypad display module-2
TM1637 keypad display module-3
TM1637 keypad display module-3
TM1637 keypad display module
TM1637 keypad display module
Arduino wiring for TM1637 keypad display module
Arduino wiring for TM1637 keypad display module
28-This is the Arduino code for a TM1638 8-digit display with a 4x4 matrix button.
Idioma: C++
/*
 * 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

Recursos y referencias

Archivos📁

Bibliotecas de Arduino (zip)

Manual del Usuario