Contador ascendente-descendente de un dígito con Arduino
Tecnología Robótica
Dr. Héctor Darío Aguirre Arvizu
17-10-24
Explorando el manejo del Sistema Arduino, he encontrado esta aplicación, que de hecho me dejaron como tarea en un curso de robótica para ingenieros.
Tarea: Elaborar un circuito con un display de 7 segmentos para que cuente de 0 a 9 y de regreso. Es decir, hacer un circuito contador ascendente-descendente de un dígito.
Disponemos de un display de 7 segmentos 5611B. Nos vamos a la hoja de datos (ver la liga) y descubrimos que es un display de ánodo común, es decir, el común de los 7 LEDs que conforman el display tienen conectada la terminal positiva, la cual debe ir al positivo del circuito.
![]() |
Display de 7 segmentos de un dígito. |
![]() |
Disposición de los diferentes LEDs de un display de 7 segmentos, y conexión de los mismos en cátodo común (para el tipo 5611Ax) y ánodo común (para el 5611Bx). |
A continuación se muestra el diagrama de conexión entre el Arduino y el display. Está elaborado con un programa llamado Fritzing.
![]() |
Diagrama electrónico |
![]() |
Diagrama de conexiones |
Pude conseguir el display de 7 segmentos en una librería de Fritzing y rehice el diagrama esquemático como a continuación se muestra:
![]() |
Display de 7 segmentos vertical |
Nota: Por lo menos la versión de Fritzing que manejo tiene un problema ya que aunque uno hace el esquema de modo correcto a como corresponden las terminales reales, a la hora de pasar al diagrama electrónico conecta terminales inadecuadas. A la inversa es lo mismo, si uno hace el diagrama correcto al ir al esquema ya hizo otra conexión diferente.
Por lo anterior, anexo unas fotografías de cómo quedó el circuito armado:
El programa utilizado para el control del display es muy sencillo, aunque demasiado repetitivo, ya que, de momento, no utiliza grandes recursos de programación y está utilizándose como programa didáctico inicial. A continuación se muestra el programa (intencionalmente se colocó en letras pequeñas, sólo cópialo a tu programa Arduino, pero revisa la gramática del programa para evitar malos funcionamientos):
//Contador ascendente-descendente con display de 7 segmentos con ánodo común
//Dr. Héctor Darío Aguirre Arvizu
//2017-10-22
// las terminales 5 y 8 del display 5611BH son el punto común que en este caso se conecta a positivo (+5V)
const int p = 13; //asigna el pin 13 el encendido del punto decimal al inicio del programa; parpadea con el diodo del circuito
const int a = 12; // a partir de 12 hacia abajo asignamos los pines para los diferentes segmentos;
const int b = 11; // los colocamos como enteros asignados a un pin;
const int c = 10; // Ello permite no confundir a qué segmento (a, b, c, etc.) se le dará voltaje
const int d = 9;
const int e = 8;
const int f = 7;
const int g = 6;
const int x = 1000; // asignamos un valor fijo para que cada dígito prenda un segundo
void setup() {
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
}
void loop() {
//Cero
digitalWrite(a, LOW); //Al ser un display de ánodo común cada segmento debe estar en bajo para encender
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH); // cuando están en alto permanecen apagados
delay(x);
//Uno
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
delay(x);
//Dos
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
delay(x);
//Tres
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
delay(x);
//Cuatro
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
delay(x);
//Cinco
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
delay(x);
//Seis
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
delay(x);
//Siete
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
delay(x);
//Ocho
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
delay(x);
//Nueve
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
delay(x);
//Ocho
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
delay(x);
//Siete
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
delay(x);
//Seis
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
delay(x);
//Cinco
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
delay(x);
//Cuatro
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
delay(x);
//Tres
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
delay(x);
//Dos
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
delay(x);
//Uno
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
delay(x);
}
Hasta aquí el programa
Aquí podrás ver el video descriptivo y cómo funciona el circuito:
Esperamos te guste y lo armes.
Dr. Héctor Darío Aguirre Arvizu
D. R. 2017 Darío Aguirre
![]() |
Circuito para controlar un display de 7 segmentos con Arduino 01 |
![]() |
Circuito para controlar un display de 7 segmentos con Arduino 02 |
![]() |
Circuito para controlar un display de 7 segmentos con Arduino 03 |
//Contador ascendente-descendente con display de 7 segmentos con ánodo común
//Dr. Héctor Darío Aguirre Arvizu
//2017-10-22
// las terminales 5 y 8 del display 5611BH son el punto común que en este caso se conecta a positivo (+5V)
const int p = 13; //asigna el pin 13 el encendido del punto decimal al inicio del programa; parpadea con el diodo del circuito
const int a = 12; // a partir de 12 hacia abajo asignamos los pines para los diferentes segmentos;
const int b = 11; // los colocamos como enteros asignados a un pin;
const int c = 10; // Ello permite no confundir a qué segmento (a, b, c, etc.) se le dará voltaje
const int d = 9;
const int e = 8;
const int f = 7;
const int g = 6;
const int x = 1000; // asignamos un valor fijo para que cada dígito prenda un segundo
void setup() {
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
}
void loop() {
//Cero
digitalWrite(a, LOW); //Al ser un display de ánodo común cada segmento debe estar en bajo para encender
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH); // cuando están en alto permanecen apagados
delay(x);
//Uno
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
delay(x);
//Dos
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
delay(x);
//Tres
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
delay(x);
//Cuatro
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
delay(x);
//Cinco
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
delay(x);
//Seis
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
delay(x);
//Siete
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
delay(x);
//Ocho
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
delay(x);
//Nueve
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
delay(x);
//Ocho
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
delay(x);
//Siete
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
delay(x);
//Seis
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
delay(x);
//Cinco
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
delay(x);
//Cuatro
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
delay(x);
//Tres
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
delay(x);
//Dos
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
delay(x);
//Uno
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
delay(x);
}
Hasta aquí el programa
Aquí podrás ver el video descriptivo y cómo funciona el circuito:
Esperamos te guste y lo armes.
Dr. Héctor Darío Aguirre Arvizu
D. R. 2017 Darío Aguirre
No hay comentarios:
Publicar un comentario