Hoy os traigo un fantástico POST en el que os voy a enseñar como poder visualizar datos a través de un display de 4 dígitos y 7 segmentos con controlador TM1637 utilizando la librería “TM1637.h”.
Esta librería se encuentra dentro de la carpeta “TM1637_DigitalTube” que se puede descargar del siguiente enlace. Está dotada de recursos y funciones suficientes para simplificar nuestro trabajo de manera importante y poder así mostrar a través del display números tanto positivos como negativos. También es posible visualizar algunas letras como A, b, C, d, E y F.
En el mercado existen displays de este tipo en diferentes colores (blanco, azul, verde, rojo y amarillo), por un precio entorno a los 2-3€.
Un display de 7 segmentos de 4 dígitos tradicional tiene 12 pines. Este módulo incluye un chip TM1637 para reducir a 2 los pines para controlar los 4 dígitos. Esto quiere decir que, con solo 2 pines digitales se controla tanto el valor mostrado en el display como la iluminación del mismo.
Este display 7 segmentos tiene dos hilos para alimentación, GND y VCC (que puede ser 5V o 3.3V), y dos pines de datos (CLK y DIO) que podemos conectar a los pines digitales de Arduino que queramos. En este POST vamos a conectar el display según se muestra a continuación:
Lista de Materiales
-
- Arduino UNO Rev.3.
- Cable USB tipo A-B.
- Un display de 4 dígitos y 7 segmentos con controlador TM1637.
- Cables de conexión.
Programa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
/* TITULO: Display de 4 dígitos y 7 segmentos con controlador TM1637 AUTOR: MARIANO DEL CAMPO GARCÍA (@2018) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia - TWITTER: https://twitter.com/MarianoCampoGa - CORREO: [email protected] DESCRIPCIÓN DEL PROGRAMA Este programa muestra a través del display de 4 dígitos y 7 segmentos con controlador TM1637, números enteros, los caracteres especiales de espacio " " y signo negativo "-", y algunas letras como A, b, C, d, E y F. El programa puede mostrar tanto caracteres individuales dígito a dígito (MODO MANUAL) como matrices completas de 4 dígitos (MODO AUTOMÁTICO). ESQUEMA DE CONEXION +-----+ +----[PWR]-------------------| USB |--+ | +-----+ | | GND/RST2 [ ][ ] | | MOSI2/SCK2 [ ][ ] A5/SCL[ ] | | 5V/MISO2 [ ][ ] A4/SDA[ ] | | AREF[ ] | | GND[ ] | | [ ]N/C SCK/13[ ] | | [ ]IOREF MISO/12[ ] | | [ ]RST MOSI/11[ ]~| | [ ]3V3 +---+ 10[ ]~| | [ ]5v -| A |- 9[ ]~| | [ ]GND -| R |- 8[ ] | | [ ]GND -| D |- | | [ ]Vin -| U |- 7[ ] | | -| I |- 6[ ]~| | [ ]A0 -| N |- 5[ ]~| | [ ]A1 -| O |- 4[ ] | | [ ]A2 +---+ INT1/3[ ]~| Pin "DIO" del display de 4 dígitos TM1637 | [ ]A3 INT0/2[ ] | Pin "CLK" del display de 4 dígitos TM1637 | [ ]A4/SDA RST SCK MISO TX>1[ ] | | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] | | [ ] [ ] [ ] | | UNO_R3 GND MOSI 5V ____________/ \_______________________/ NOTAS: - La alimentación (VCC) y la masa (GND) del display de 4 dígitos TM1637, va directamente conectada a +3.3/5V y GND de Arduino respectivamente. */ #include "TM1637.h" // Librería necesaria para el display de 4 dígitos TM1637 #define CLK 2 // Pin CLK #define DIO 3 // Pin DIO // Declaración del objeto para el display de 4 dígitos TM1637 Display1(CLK,DIO); // Matriz de números que se van a mostrar int8_t Digits1[4] = {4,3,2,1}; // Matriz de letras que se van a mostrar int8_t Digits2[4] = {0x0a,0xb,0xc,0x0d}; // Matriz de dos "-" y dos espacios en blanco int8_t Digits3[4] = {0x10,0x13,0x10,0x13}; void setup() { Display1.set(BRIGHT_TYPICAL); // BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7; (de 0 a 7) Display1.init(); // Inicializa display de 4 dígitos Display1.clearDisplay(); // Borra el display de 4 dígitos Display1.point(POINT_ON); // Enciende los dos puntos centrales Display1.display(0, 0); // Digito 0 => 0 Display1.display(1, 0); // Digito 1 => 0 Display1.display(2, 0); // Digito 2 => 0 Display1.display(3, 0); // Digito 3 => 0 delay(1000); Display1.point(POINT_OFF); // Apaga los dos puntos centrales Display1.display(0, 0); // Digito 0 => 0 Display1.display(1, 0); // Digito 1 => 0 Display1.display(2, 0); // Digito 2 => 0 Display1.display(3, 1); // Digito 3 => 1 delay(1000); Display1.point(POINT_ON); // Enciende los dos puntos centrales Display1.display(0, 0); // Digito 0 => 0 Display1.display(1, 0); // Digito 1 => 0 Display1.display(2, 0); // Digito 2 => 0 Display1.display(3, 2); // Digito 3 => 2 delay(1000); Display1.point(POINT_OFF); // Apaga los dos puntos centrales Display1.display(0, 0); // Digito 0 => 0 Display1.display(1, 0); // Digito 1 => 0 Display1.display(2, 0); // Digito 2 => 0 Display1.display(3, 3); // Digito 3 => 3 delay(1000); Display1.point(POINT_ON); // Enciende los dos puntos centrales Display1.display(0, 0); // Digito 0 => 0 Display1.display(1, 0); // Digito 1 => 0 Display1.display(2, 0); // Digito 2 => 0 Display1.display(3, 4); // Digito 3 => 4 delay(1000); Display1.point(POINT_OFF); // Apaga los dos puntos centrales Display1.display(0, 0); // Digito 0 => 0 Display1.display(1, 0); // Digito 1 => 0 Display1.display(2, 0); // Digito 2 => 0 Display1.display(3, 5); // Digito 3 => 5 delay(1000); Display1.clearDisplay(); // Borra el display delay(1000); } void loop() { // MODO AUTOMÁTICO Display1.display(Digits1); // Muestra la matriz Digits1 delay(2000); Display1.display(Digits2); // Muestra la matriz Digits2 delay(2000); Display1.display(Digits3); // Muestra la matriz Digits3 delay(2000); // MODO MANUAL Display1.display(0, 6); // Digito 0 => 6 Display1.display(1, 7); // Digito 1 => 7 Display1.display(2, 8); // Digito 2 => 8 Display1.display(3, 9); // Digito 3 => 9 delay(2000); Display1.display(0, 0x13); // Digito 0 => " " (Vacío) Display1.display(1, 0x10); // Digito 1 => "-" (Negativo) Display1.display(2, 0x13); // Digito 2 => " " (Vacío) Display1.display(3, 0x10); // Digito 3 => "-" (Negativo) delay(2000); Display1.display(0, 0x0e); // Digito 0 => E Display1.display(1, 0x0f); // Digito 1 => F Display1.display(2, 0x0e); // Digito 2 => E Display1.display(3, 0x0f); // Digito 3 => F delay(2000); } |