# 4 digitos con display LED 7 segmentos

**URL:** <https://forum.arduino.cc/t/4-digitos-con-display-led-7-segmentos/457654>\
**Category:** Español\
**Created:** [May 9, 2017, 6:52pm UTC](https://forum.arduino.cc/t/4-digitos-con-display-led-7-segmentos/457654 "2017-05-09T18:52:13Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![cesart050892](https://avatars.discourse-cdn.com/v4/letter/c/f17d59/32.png) [@cesart050892](https://forum.arduino.cc/u/cesart050892)\
**Post date:** [May 9, 2017, 6:52pm UTC](https://forum.arduino.cc/t/4-digitos-con-display-led-7-segmentos/457654/1 "2017-05-09T18:52:13Z")

</div>

Hola a todos

Me gustaria me ayudaran con mi codigo,  
talvez esto ya lo han hecho muchos pero se me  
esta complicando.

Lo que quiero hacer dos contadores  
de 0 - 99 con 4 display de segmentos.  
espero me puedan ayudar estoy trabajando con  
2 74HC595N y arduino uno.

```cpp
#define LATCH  9  
#define CLOCK  10 
#define DATA  8  

byte POS[4] = {0X70, 0XB0, 0XD0, 0xE0};

byte NUM[10] = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6,
 0xBE, 0xE0, 0xFE, 0xF6 };

void display4x7segment(byte datapin, byte clockpin, byte latchpin, byte POS, byte NUM)
{
  digitalWrite(LATCH, LOW);
  shiftOut(DATA, CLOCK, LSBFIRST, POS);  
  shiftOut(DATA, CLOCK, LSBFIRST, NUM); 
  digitalWrite(LATCH, HIGH);
}

void setup()
{
  pinMode(LATCH, OUTPUT);
  pinMode(CLOCK, OUTPUT);
  pinMode(DATA, OUTPUT);
  digitalWrite(LATCH, HIGH); 
  delay(1000);  

}

void loop()
{  
    display4x7segment(DATA, CLOCK, LATCH, POS[0], NUM[1]);
    display4x7segment(DATA, CLOCK, LATCH, POS[1], NUM[2]);
    display4x7segment(DATA, CLOCK, LATCH, POS[2], NUM[3]);
    display4x7segment(DATA, CLOCK, LATCH, POS[3], NUM[4]);
   
}

```

 ![141-c-8-digit-7-segment-led-display-module-600x600 - copia.jpg](https://europe1.discourse-cdn.com/arduino/original/4X/5/2/d/52dadda8826c7cb8fa9fab83562a17f2c2ba2c90.jpeg)

---

<div class="post-metadata">

**Author:** ![Surbyte](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/surbyte/32/217404_2.png) [@Surbyte](https://forum.arduino.cc/u/Surbyte)\
**Post date:** [May 9, 2017, 9:27pm UTC](https://forum.arduino.cc/t/4-digitos-con-display-led-7-segmentos/457654/2 "2017-05-09T21:27:12Z")

</div>

Comienza leyendo las normas del foro y entonces edita tu post de tal modo que el código y la imagen se vean directamente en el post y no a través de descarga.  
Para eso usa las etiquetas indicadas.

\</\> para el código  
pantalla para la imagen.

Ahora ve a More, luego modify y edita tu post anterior.  
La imagen la copias usando boton derecho del mouse sobre el adjunto subido.

Busca en Search 74HC595 display, hay muchos contadores y tableros digitales que se han resuelto y tienen códigos.  
Arriba derecha.

---

<div class="post-metadata">

**Author:** ![cesart050892](https://avatars.discourse-cdn.com/v4/letter/c/f17d59/32.png) [@cesart050892](https://forum.arduino.cc/u/cesart050892)\
**Post date:** [May 9, 2017, 9:58pm UTC](https://forum.arduino.cc/t/4-digitos-con-display-led-7-segmentos/457654/3 "2017-05-09T21:58:37Z")

</div>

Me gustaria poder hacer un contador doble  
me podrian ayudar.

he buscado en internet pero solo he encontrado  
con 74hc595 para digito.

pero yo lo querio hacer con 2 74hc595 como  
muestro en la imagen.

espero su ayuda si recurri aqui es por que ya busque  
en google, y ps no encontre mucho.

---

<div class="post-metadata">

**Author:** ![Surbyte](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/surbyte/32/217404_2.png) [@Surbyte](https://forum.arduino.cc/u/Surbyte)\
**Post date:** [May 9, 2017, 10:58pm UTC](https://forum.arduino.cc/t/4-digitos-con-display-led-7-segmentos/457654/4 "2017-05-09T22:58:50Z")

</div>

Mi amigo, si te digo que busques en search (arriba derecha) busca en search.

te dejo el [link](https://www.google.com.ar/search?ie=UTF-8&oe=UTF-8&q=contador+595&domains=http://forum.arduino.cc&sitesearch=http://forum.arduino.cc&gws_rd=cr&ei=XkgSWeTPJcq7wASoloeADQ)

Estas son dos respuestas.

[Contador de 4 digitos](https://forum.arduino.cc/index.php?topic=309597.0)  
[Cronometro manipulable con 74hc595](http://forum.arduino.cc/index.php?topic=296104.0)

---

<div class="post-metadata">

**Author:** ![cesart050892](https://avatars.discourse-cdn.com/v4/letter/c/f17d59/32.png) [@cesart050892](https://forum.arduino.cc/u/cesart050892)\
**Post date:** [May 10, 2017, 5:12am UTC](https://forum.arduino.cc/t/4-digitos-con-display-led-7-segmentos/457654/5 "2017-05-10T05:12:52Z")

</div>

Gracias Ricardo

Disculpa, no habia entendido lo de search(arriba)  
para proxima.

gracias a tus aportes en otros hilos,  
hice un nuevo codigo y decidi probar  
con el shift register 74HC164.

y ps mas o menos hace lo quiero.  
muchas por la ayuda.

aca voy a dejar el codigo, pa que lo chequees y me digas  
que te parece y no te parece que le deba cambiar.

```cpp
/* 
Contador 0 - 99
con ShiftRegister 74HC164N
por Cesar Augusto Tapia
cesart050892@gmail.com  
whatsapp +50578109544

*/

#if ARDUINO >= 100
  #include "Arduino.h"
#else
  #include "WProgram.h"
#endif

#include "Switch.h"

const byte pinDatos   =   9; //Pin para Datos serie del 74CH164
const byte pinReloj   =   10; //Pin para reloj del 74CH164
const int pinboton1 = 5;
const int pinboton2 = 4;
const int gnd1= 11;
const int gnd2= 12;
int unidades=0;
int decenas=0;
int x;
int y;

byte DigitArray[4] = {0X70, 0XB0, 0XD0, 0xE0};  

byte NumArray[10] = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6,
 0xBE, 0xE0, 0xFE, 0xF6 }; 

Switch pinmas = Switch(pinboton1, INPUT, LOW);
Switch pinmenos = Switch(pinboton2, INPUT, LOW);

int contador=0;

unsigned long currentmillis;  
unsigned long previousmillis;
unsigned long duration = 20; 

void setup() {

pinMode(gnd1, OUTPUT);
pinMode(gnd2, OUTPUT);
pinMode(pinReloj, OUTPUT);
pinMode(pinDatos, OUTPUT);

}

void loop() {

  
  pinmas.poll();
  pinmenos.poll();
  contadorf(pinmas.pushed());
  contadorR(pinmenos.pushed());
  display(contador);

  

} 

void contadorf (int boton) {

if (boton == HIGH){ 
    if (contador++>= 1000)
       contador = 9999;
  }    
}

void contadorR (int boton3) {

if(boton3 == HIGH){
    if (contador-- < 0) 
        contador = 0;
  }    
}

void display(int numero)
{
  int miles = numero / 1000;
  numero %= 1000;
  int centenas = numero / 100;
  numero %= 100;
  int decenas = numero / 10;
  numero %= 10;
  int unidades = numero;

  digitalWrite(gnd2, HIGH); //
  shiftOut(pinDatos, pinReloj, LSBFIRST, NumArray[unidades]);
  digitalWrite(gnd1, LOW); //
  delay(100);
  digitalWrite(gnd1, HIGH); //
  shiftOut(pinDatos, pinReloj, LSBFIRST, NumArray[decenas]);
  digitalWrite(gnd2, LOW); //
  delay(100); 
}

```

me gustari si me puedes ayudar a sustituir los delay

adjunto dejo es archivo de proteus y el codigo.

[74164\_2D.zip](https://forum.arduino.cc/uploads/short-url/u2OgZrBnArqAq9FCh51euyC0ilb.zip) (24.9 KB)

---

<div class="post-metadata">

**Author:** ![Surbyte](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/surbyte/32/217404_2.png) [@Surbyte](https://forum.arduino.cc/u/Surbyte)\
**Post date:** [May 10, 2017, 11:09pm UTC](https://forum.arduino.cc/t/4-digitos-con-display-led-7-segmentos/457654/6 "2017-05-10T23:09:53Z")

</div>

Estos delays comentalos

```cpp
digitalWrite(gnd2, HIGH); //
  shiftOut(pinDatos, pinReloj, LSBFIRST, NumArray[unidades]);
  digitalWrite(gnd1, LOW); //
  //delay(100);
  digitalWrite(gnd1, HIGH); //
  shiftOut(pinDatos, pinReloj, LSBFIRST, NumArray[decenas]);
  digitalWrite(gnd2, LOW); //
  //delay(100); 
}

```

---

<div class="post-metadata">

**Author:** ![cesart050892](https://avatars.discourse-cdn.com/v4/letter/c/f17d59/32.png) [@cesart050892](https://forum.arduino.cc/u/cesart050892)\
**Post date:** [May 12, 2017, 6:43pm UTC](https://forum.arduino.cc/t/4-digitos-con-display-led-7-segmentos/457654/7 "2017-05-12T18:43:53Z")

</div>

Hola Ricardo

Al parecer esos delay estan demas los comente y ps no se ve ningun parpadeo.

Pero tengo un problema, pienso yo que puede ser el integrado 74HC164 que esta en mal estado  
pero se me esta presentando un problema, ya con el circuito en fisico  
aparece el numero que yo quiero ejemplo pongo = 1 y aparece = 0001  
y ps hasta ahi esta bien pero al poco tiempo empieza alternar entre 0001 a 8888.

me gustaria tu comentario sobre esto y ps creo que puede ser que  
algo esta mal en mi codigo.

Otro asunto te dejo un adjunto con codigo y proteus de 4 74HC595.

En este proyecto tu le dijiste al chico que hiciese el cicuito con 2 Shift register  
[proyecto\_contador de 4 digitos](https://forum.arduino.cc/index.php?topic=309597.15)

> surbyte:  
> Que te parece usar dos 595 y no consumir 4 pines mas para comandar los LED?  
> O sea con 3 pines comandas todo?  
> Te queda todo el Arduino para lo que gustes?
> 
> Ahora te lo dibujo y te lo posteo en Proteus.
> 
> ![](https://europe1.discourse-cdn.com/arduino/original/3X/2/f/2f0984456f8dd47c5beb0a68b72c3d6cf62ef2aa.jpeg)

Me gustaria me ayudaras con esa idea,  
2 shiftregisters 74HC595 de la manera de ese ejemplo.  
A mi me gustan las opciones no me gusta quedar con una unca opcion.  
**no te pido codigo ya hecho te pido ayuda a comprender el codigo.**

[74595\_4.zip](https://forum.arduino.cc/uploads/short-url/3YiPv7wJ6LhFWgT4pD8iXnZEIRi.zip) (21 KB)

[595.zip](https://forum.arduino.cc/uploads/short-url/y1QEZSjjuXnzmBoIEGnyCg0seAs.zip) (22.8 KB)

[74595\_2.zip](https://forum.arduino.cc/uploads/short-url/lcU7QBCg5S2hxIezVon5DMpPMx6.zip) (20 KB)

---

<div class="post-metadata">

**Author:** ![Surbyte](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/surbyte/32/217404_2.png) [@Surbyte](https://forum.arduino.cc/u/Surbyte)\
**Post date:** [May 12, 2017, 10:26pm UTC](https://forum.arduino.cc/t/4-digitos-con-display-led-7-segmentos/457654/8 "2017-05-12T22:26:05Z")

</div>

Aca tienes uno de los que hice, no encuentro el tutorial en Documentación que no se si buscaste.

[Contador 5 digitos con 74hc595](https://forum.arduino.cc/index.php?topic=276309.0)

Vamos por partes:

1. 74595\_2 no entiendo para que pones 4 Displays multiplexados y ademas con un segundo 595 controlas el encendido del display.  
Eso require de un timer para que todo se actualice a tal velicidad que la retina del ojo no perciba los cambios.

No digo que no se pueda, pero asi de simple no.  
Asi que hasta ahi esta fallido, el intento.

1. Surbyte\_4 funciona perfecto.  
4 displays multiplexados y una rutina TIMER que controla el refrezco de los 4 displays y sus datos.

Si no logras 30 fps el ojo ve el parpadeo.

1. 74595\_4 solo muestra el valor de cantidad asi que modifiqué esta linea

```cpp
displayLED(cantidad++);

```

Y quita por favor los delays porque arruinan todo.  
Usa millis().

---

<div class="post-metadata">

**Author:** ![cesart050892](https://avatars.discourse-cdn.com/v4/letter/c/f17d59/32.png) [@cesart050892](https://forum.arduino.cc/u/cesart050892)\
**Post date:** [May 16, 2017, 4:48am UTC](https://forum.arduino.cc/t/4-digitos-con-display-led-7-segmentos/457654/9 "2017-05-16T04:48:17Z")

</div>

Hola Ricardo

respuesta a tus respuestas

1 -- **74HC595\_2**

Es el circuito de control con 2 74HC595  
a 4 displays de 7 segmentos; Estoy claro  
de la velocidad de actualizacion

2 -- **surbyte\_595**

Es el circuito de control con 4 74HC595  
a 4 displays de 7 segmentos; **Aqui no estoy**  
**muy claro del uso de la rutina TIMER**

3 -- **74HC595\_4**

Es el circuito de control con 4 74HC595  
a 4 displays de 7 segmentos;  
**sin la rutina TIMER**

**Me gustaria me ayudaras a comprender**  
**las rutina TIMER, no estoy muy claro**  
**de cual es la ventaja de usar la en este**  
**circuito y no se como empezar a usar las.**

---

<div class="post-metadata">

**Author:** ![Surbyte](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/surbyte/32/217404_2.png) [@Surbyte](https://forum.arduino.cc/u/Surbyte)\
**Post date:** [May 16, 2017, 4:23pm UTC](https://forum.arduino.cc/t/4-digitos-con-display-led-7-segmentos/457654/10 "2017-05-16T16:23:29Z")

</div>

La rutina timer es la que hace todo el multiplexado o sea.. prenda/apaga todos los leds a tal velocidad que no te das cuenta de lo que esta ocurriendo.  
Solo le envias lo que quieres mostrar y ella se encarga.

---

<div class="post-metadata">

**Author:** ![cesart050892](https://avatars.discourse-cdn.com/v4/letter/c/f17d59/32.png) [@cesart050892](https://forum.arduino.cc/u/cesart050892)\
**Post date:** [May 16, 2017, 4:36pm UTC](https://forum.arduino.cc/t/4-digitos-con-display-led-7-segmentos/457654/11 "2017-05-16T16:36:58Z")

</div>

Si entiendo el concepto general  
de las librerias timer.

leyendo, en los foros y en Google  
encontre que No recomiendan  
la libreria TimerOne, ni la libreria  
TimedAction, cuando se necesitan 2  
o más.

Esta la libreria timer de alextaujenis  
[Github alextaujenis](https://github.com/alextaujenis)  
[Bolg alextaujenis](http://robotsbigdata.com/docs-arduino-timer.html)

**Adjunto dejo la libreria, me gustaria me pudieras ayudar a comprender su uso en**  
**en circuito de 2 ic 74HC595, para empezar y luego con el circuito de 4 ic 74595**

[RBD\_Timer-master.zip](https://forum.arduino.cc/uploads/short-url/24r6dMrCU1ElWfsfgUv8XwUzgaB.zip) (6.42 KB)

---

<div class="post-metadata">

**Author:** ![cesart050892](https://avatars.discourse-cdn.com/v4/letter/c/f17d59/32.png) [@cesart050892](https://forum.arduino.cc/u/cesart050892)\
**Post date:** [May 21, 2017, 5:37pm UTC](https://forum.arduino.cc/t/4-digitos-con-display-led-7-segmentos/457654/12 "2017-05-21T17:37:33Z")

</div>

Necesito ayuda para implementar la librería rbd-timer al contador

---

<div class="post-metadata">

**Author:** ![cesart050892](https://avatars.discourse-cdn.com/v4/letter/c/f17d59/32.png) [@cesart050892](https://forum.arduino.cc/u/cesart050892)\
**Post date:** [May 22, 2017, 9:08pm UTC](https://forum.arduino.cc/t/4-digitos-con-display-led-7-segmentos/457654/13 "2017-05-22T21:08:22Z")

</div>

**Hola este es nuevo código, implementando la**  
**libreria RDB\_Timer y la libreria Switch**

```cpp
#if ARDUINO >= 100 
  #include "Arduino.h"  
#else                   
  #include "WProgram.h" 
#endif
#include <Switch.h>

#include <RBD_Timer.h>
 
RBD::Timer TiempoRefresh;

const byte IRsensor = 7; 
const byte ShotSensor = 7; 
int tirosPermitidos=10;
int Faltantes;

int cantidades;
int contador;
int i;

Switch IRsensorPin = Switch(IRsensor, INPUT, HIGH);
Switch ShotSensorPin = Switch(ShotSensor, INPUT, HIGH);  

#define LATCH  9  //Serial Output to Shift Register
#define CLOCK  10 //Shift Register Clock Pin
#define DATA  8  //pin 10 connect to DIO

// array to activate particular digit on the 8x7segment module
// it is the common anode of 7 segment
byte POS[4] = {0X70, 0XB0, 0XD0, 0xE0};

//array for decimal number, it is the cathode.
//logic low will activate the particular segment
byte NUM[10] = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6,
 0xBE, 0xE0, 0xFE, 0xF6 }; 

void display4x7(byte datapin, byte clockpin, byte latchpin, byte POS, byte NUM)
  {
 	 	digitalWrite(LATCH, LOW);

  shiftOut(DATA, CLOCK, MSBFIRST, POS); // Particular digit position
  shiftOut(DATA, CLOCK, MSBFIRST, NUM); // array for decimal number

  digitalWrite(LATCH, HIGH); 
}

void displayLED(int numero) {

	int unidades;
	int decimas;
	int centesimas;
	int milesimas;

  unidades  = numero/1000;
 				numero    %= 1000;
 				decimas    = numero/100;
  numero    %= 100;
  centesimas = numero/10;
  numero    %= 10;
  milesimas = numero;
  

  display4x7(DATA, CLOCK, LATCH, POS[0], NUM[milesimas]); //digitOne centesimas
  display4x7(DATA, CLOCK, LATCH, POS[1], NUM[centesimas]); //digitOne centesimas
  display4x7(DATA, CLOCK, LATCH, POS[2], NUM[decimas]);    //digitOne decimas
  display4x7(DATA, CLOCK, LATCH, POS[3], NUM[unidades]);  // digitOne unidades
} 

void Actualiza() {
  if(TiempoRefresh.onRestart()) {
    displayLED(cantidades);
  }
}

void Validos() {
	int TirosFallidos=0;
	int AlarmPer;
	IRsensorPin.poll();
	ShotSensorPin.poll();

if (IRsensorPin.pushed()) { contador++; }

		if (contador == 4 ) { contador = 0; }
	    if (contador == 3 ) { digitalWrite(13, HIGH); }
	    if (contador == 0)  { digitalWrite(13, LOW);  }

cantidades=contador;

if (ShotSensorPin.pushed()) { TirosFallidos++; }

	Faltantes = tirosPermitidos - TirosFallidos;

if (Faltantes == 0) { 
		contador = 0; 
		AlarmPer = AlarmPer - 1;}
		Serial.print(contador);
}

void setup() {

  pinMode(LATCH, OUTPUT);
  pinMode(CLOCK, OUTPUT);
  pinMode(DATA, OUTPUT);
  digitalWrite(LATCH, HIGH); //Wake Up Display

  TiempoRefresh.setTimeout(4);
  TiempoRefresh.restart();
}

void loop() {

Validos();
Actualiza();

	
}

```

---

<div class="post-metadata">

**Author:** ![raquelLroger](https://avatars.discourse-cdn.com/v4/letter/r/bbe5ce/32.png) [@raquelLroger](https://forum.arduino.cc/u/raquelLroger)\
**Post date:** [July 28, 2017, 1:27pm UTC](https://forum.arduino.cc/t/4-digitos-con-display-led-7-segmentos/457654/14 "2017-07-28T13:27:58Z")

</div>

buen dia  
S.O.S NO PUEDO CONECTAR UN DISPLAY 7 SEGMENTOS DE 7CM X 4CM ,PROBE DE MIL MANERAS Y NO ENCIENDE ,ALGUIEN ME PUEDE AYUDAR ???

---

<div class="post-metadata">

**Author:** ![Surbyte](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/surbyte/32/217404_2.png) [@Surbyte](https://forum.arduino.cc/u/Surbyte)\
**Post date:** [July 29, 2017, 7:25pm UTC](https://forum.arduino.cc/t/4-digitos-con-display-led-7-segmentos/457654/15 "2017-07-29T19:25:34Z")

</div>

**raquelLroger, bienvenida al foro ante todo.**  
**Ahora por favor ve a leer las normas del foro y tmb lee que no debes usar Mayúsculas para escribir (es como gritarnos), asi que ahora edita tu post**

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [May 6, 2021, 2:10pm UTC](https://forum.arduino.cc/t/4-digitos-con-display-led-7-segmentos/457654/16 "2021-05-06T14:10:18Z")

</div>


