{"id":2625,"date":"2014-02-28T18:49:09","date_gmt":"2014-02-28T17:49:09","guid":{"rendered":"http:\/\/www.diarioelectronicohoy.com\/blog\/?p=2625"},"modified":"2019-06-20T18:08:42","modified_gmt":"2019-06-20T16:08:42","slug":"display-multiple-de-7-segmentos","status":"publish","type":"post","link":"https:\/\/www.diarioelectronicohoy.com\/blog\/display-multiple-de-7-segmentos","title":{"rendered":"Display m\u00faltiple de 7 segmentos"},"content":{"rendered":"<h3 style=\"color: #333399;\"><a id=\"inici\"><\/a>PROLOGO.<\/h3>\n<p style=\"text-align: justify;\"><span style=\"text-align: justify; line-height: 1.5;\">Quien no dispone en su caj\u00f3n desastre, de un conjunto de display a LED con dos, tres o cuatro d\u00edgitos. Este es el momento de reutilizar dicho display (multiplexado) en un contador cuya aplicaci\u00f3n puede mejorar una presentaci\u00f3n que ten\u00eda pendiente. En este art\u00edculo, veremos como aplicar c\u00f3digo a un display multiplexado y como debe funcionar.<\/span><\/p>\n<h3 style=\"color: #333399;\">INICIANDO.<\/h3>\n<p style=\"text-align: justify;\">Actualmente es f\u00e1cil encontrar en Internet c\u00f3digos sobre pantallas LCD y c\u00f3mo adaptarlas a distintas aplicaciones. En cambio, son muy pocos los sitios donde se describe c\u00f3mo utilizar un display de siete segmentos y no digamos, cuando se trata de conjuntos de displays de 2, 3 o 4 d\u00edgitos multiplexados. Sin embargo, este dispositivo es bastante com\u00fan en un gran n\u00famero de electrodom\u00e9sticos que podemos desguazar y reutilizar su display. Aqu\u00ed, con este art\u00edculo, voy a intentar rellenar esta laguna.<!--more--><\/p>\n<p style=\"text-align: justify;\">Este art\u00edculo, no se puede considerar como una extensi\u00f3n a uno anterior que puede verse\u00a0<a href=\"http:\/\/www.hispavila.com\/3ds\/atmega\/doblecontador.html\"><span style=\"text-decoration: underline;\">aqu\u00ed<\/span><\/a>. En aquella ocasi\u00f3n se contemplaba el caso de aplicar el contador de dos d\u00edgitos, como contador en una aplicaci\u00f3n del propio Arduino que, como ejercicio es esclarecedor y consigue ayudar el interesado en realizar un contador de esas caracter\u00edsticas. En esta ocasi\u00f3n, si bien, puede utilizarse con unos peque\u00f1os ajustes, del mismo modo, la diferencia radica en que se visualizar\u00e1 la cuenta obtenida reflejada en un pantalla o display de dos, tres o cuatro d\u00edgitos de siete segmentos a LED, mediante la multiplexaci\u00f3n de los d\u00edgitos utilizados. Esta es la estructura del display m\u00faltiple.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/display-multiple-de-7-segmentos\/4digitos7segmentos\" rel=\"attachment wp-att-2626\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2626\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/4digitos7segmentos.gif\" alt=\"4digitos7segmentos\" width=\"484\" height=\"158\" \/><\/a>Estructura<\/p>\n<p style=\"text-align: justify;\">\u00a0Sin m\u00e1s, vamos a entrar en harina, como dir\u00eda un panadero. La teor\u00eda, se puede ver en el mencionado art\u00edculo, as\u00ed que s\u00f3lo nos preocuparemos de los tipos de pantalla a utilizar, para este caso usaremos un display m\u00faltiple (multiplexado). El display que vamos a utilizar aqu\u00ed, tiene la particularidad en su encapsulado, es decir, que en una pieza ( o encapsulado) nos presenta varios d\u00edgitos. Tenemos que tener en cuenta que en algunos casos, las patillas que vienen en el encapsulado, parece que no est\u00e1n bien, ya que hay menos de las que se supone deber\u00eda tener, esto es debido a que se han dispuesto de forma especial, lo que se llama multiplexado.<\/p>\n<h3 style=\"color: #333399;\">EL PROGRAMA.<\/h3>\n<p style=\"text-align: justify;\">La cuesti\u00f3n importante radica en el propio programa. El programa consta de 3 partes bien diferenciadas:<\/p>\n<ol>\n<li style=\"text-align: justify;\">Los displays, definici\u00f3n propia de los segmentos, de como se constituyen los d\u00edgitos (estructura interna).<\/li>\n<li style=\"text-align: justify;\">La asignaci\u00f3n y correspondencia de los pines del display, del Arduino y pulsadores, para su aplicaci\u00f3n sin posteriores consultas por ese motivo.<\/li>\n<li style=\"text-align: justify;\">Rutinas, adem\u00e1s de la configuraci\u00f3n (Set up), dentro del lazo (loop) se encuentran las subrutinas pertenecientes a los pulsadores.<\/li>\n<\/ol>\n<h2><span style=\"color: #333399;\">LOS DISPLAYS.<\/span><\/h2>\n<p style=\"text-align: justify;\">No voy a describir con detalle c\u00f3mo se construye un display, m\u00e1s arriba se puede ver su estructura. El display que voy a utilizar en este art\u00edculo, es el de un display multiplexado, es decir, que sus segmentos est\u00e1n conectados internamente de tal manera que al exterior s\u00f3lo aparecen (normalmente) los correspondientes a los siete segmentos, m\u00e1s el com\u00fan de cada uno de los d\u00edgitos que lo componen, en el caso de cuatro d\u00edgitos, muestra los siete pines de los siete segmentos, m\u00e1s cuatro correspondientes a cada uno de los cuatro d\u00edgitos. Estos son, unos ejemplos de encapsulados.<\/p>\n<div align=\"center\">\n<table border=\"0\" width=\"60%\">\n<tbody>\n<tr>\n<td colspan=\"1\" width=\"30%\" height=\"1\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/display-multiple-de-7-segmentos\/display_365\" rel=\"attachment wp-att-2627\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2627 alignleft\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/display_365.jpg\" alt=\"display_365\" width=\"300\" height=\"300\" srcset=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/display_365.jpg 500w, https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/display_365-150x150.jpg 150w, https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/display_365-300x300.jpg 300w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/td>\n<td colspan=\"2\" width=\"30%\" height=\"1\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/display-multiple-de-7-segmentos\/tyc-365wbg\" rel=\"attachment wp-att-2628\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2628 aligncenter\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/tyc-365wbg.gif\" alt=\"tyc-365wbg\" width=\"116\" height=\"72\" \/><\/a><\/td>\n<td colspan=\"1\" width=\"30%\" height=\"1\">\u00a0<a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/display-multiple-de-7-segmentos\/7segmentosx3\" rel=\"attachment wp-att-2629\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2629\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/7segmentosx3.jpg\" alt=\"7segmentosx3\" width=\"302\" height=\"179\" srcset=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/7segmentosx3.jpg 302w, https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/7segmentosx3-300x177.jpg 300w\" sizes=\"auto, (max-width: 302px) 100vw, 302px\" \/><\/a> <a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/display-multiple-de-7-segmentos\/s127139\" rel=\"attachment wp-att-2630\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2630\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/s127139.png\" alt=\"s127139\" width=\"100\" height=\"100\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\" width=\"30%\" height=\"1\">\u00a0<a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/display-multiple-de-7-segmentos\/pines_display\" rel=\"attachment wp-att-2631\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2631\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/pines_display.jpg\" alt=\"pines_display\" width=\"265\" height=\"190\" \/><\/a><\/td>\n<td colspan=\"2\" width=\"30%\" height=\"1\">\u00a0<a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/display-multiple-de-7-segmentos\/pines_display-2\" rel=\"attachment wp-att-2632\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2632\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/pines_display.gif\" alt=\"pines_display\" width=\"204\" height=\"249\" \/><\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p style=\"text-align: justify;\">Hay que tener en cuenta que podemos encontrar estos displays en c\u00e1todo com\u00fan y en \u00e1nodo com\u00fan. Si usted, no dispone de un encapsulado de este tipo y est\u00e1 interesado en poner en pr\u00e1ctica un contador de los descritos aqu\u00ed y en cambio, si dispone de los display individuales, tranquilo, usted puede auto construir uno f\u00e1cilmente, con los d\u00edgitos que necesite, vea c\u00f3mo est\u00e1 construido el de 2 d\u00edgitos, de abajo y p\u00f3ngase a su construcci\u00f3n.<\/p>\n<div align=\"center\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/display-multiple-de-7-segmentos\/autoconstruido\" rel=\"attachment wp-att-2633\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2633\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/autoconstruido.jpg\" alt=\"autoconstruido\" width=\"405\" height=\"356\" srcset=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/autoconstruido.jpg 405w, https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/autoconstruido-300x263.jpg 300w\" sizes=\"auto, (max-width: 405px) 100vw, 405px\" \/><\/a><\/div>\n<p style=\"text-align: justify;\">Se pueden apreciar con todo detalle, los dos cablecillos blancos que son los comunes de cada d\u00edgito, por otra parte los siete hilos rojos, corresponden a los 7 segmentos, los cuales unen entre s\u00ed, los pares de segmentos (porque son dos) de cada d\u00edgito en paralelo. Recuerde utilizar todos en \u00e1nodo o c\u00e1todo com\u00fan.<\/p>\n<h3 style=\"color: #000080;\">Circuito de 1 d\u00edgito.<\/h3>\n<p style=\"text-align: justify;\">El circuito de montaje de encendido de un d\u00edgito, es muy simple, se muestra a continuaci\u00f3n y debajo el c\u00f3digo.<\/p>\n<div align=\"center\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/display-multiple-de-7-segmentos\/contador1digito\" rel=\"attachment wp-att-2634\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2634\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/contador1digito.jpg\" alt=\"contador1digito\" width=\"392\" height=\"517\" srcset=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/contador1digito.jpg 392w, https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/contador1digito-227x300.jpg 227w\" sizes=\"auto, (max-width: 392px) 100vw, 392px\" \/><\/a><\/div>\n<p style=\"text-align: justify;\">El c\u00f3digo es igual de sencillo, se ha incluido el Dp (pin digital point), por ese motivo se ha a\u00f1adido la octava resistencia. La secuencia enciende y apaga cada segmento y luego una secuencia de los 7 al tiempo. Por cierto, el display es un \u00e1nodo com\u00fan FND507 que ten\u00eda a mano.<\/p>\n<p style=\"text-align: justify;\">Encendido de 7 segmentos.<\/p>\n<pre lang=\"cpp\" file=\"download.txt\">\/\/ Creado por V. Garc\u00eda 26.02.2014\r\n\/\/\r\n\/\/ definimos los 7 segmentos y los asignamos a los pines\r\nint A = 2;\r\nint B = 3;\r\nint C = 4;\r\nint D = 5;\r\nint E = 6;\r\nint F = 7;\r\nint G = 8;\r\nint Dp = 9;\r\n\r\n\/\/ Configuramos los pines.\r\nvoid setup() {\r\n  pinMode (A, OUTPUT);\r\n  pinMode (B, OUTPUT);\r\n  pinMode (C, OUTPUT);\r\n  pinMode (D, OUTPUT);\r\n  pinMode (E, OUTPUT);\r\n  pinMode (G, OUTPUT);\r\n  pinMode (F, OUTPUT);\r\n  pinMode (Dp, OUTPUT);\r\n}\r\n\r\n\/\/ Y encendemos los segmentos.\r\nvoid loop() {\r\n digitalWrite(A, HIGH);\r\n delay(300);\r\n digitalWrite(A, LOW);\r\n delay(300);\r\n digitalWrite(B, HIGH);\r\n delay(300);\r\n digitalWrite(B, LOW);\r\n delay(300);\r\n digitalWrite(C, HIGH);\r\n delay(300);\r\n digitalWrite(C, LOW);\r\n delay(300);\r\n digitalWrite(D, HIGH);\r\n delay(300);\r\n digitalWrite(D, LOW);\r\n delay(300);\r\n digitalWrite(E, HIGH);\r\n delay(300);\r\n digitalWrite(E, LOW);\r\n delay(300);\r\n digitalWrite(F, HIGH);\r\n delay(300);\r\n digitalWrite(F, LOW);\r\n delay(300);\r\n digitalWrite(G, HIGH);\r\n delay(300);\r\n digitalWrite(G, LOW);\r\n delay(300);\r\n digitalWrite(Dp, HIGH);\r\n delay(300);\r\n digitalWrite(Dp, LOW);\r\n delay(600);\r\n\r\n digitalWrite(A, HIGH);\r\n digitalWrite(B, HIGH);\r\n digitalWrite(C, HIGH);\r\n digitalWrite(D, HIGH);\r\n digitalWrite(E, HIGH);\r\n digitalWrite(F, HIGH);\r\n digitalWrite(G, HIGH);\r\n delay(600);\r\n digitalWrite(A, LOW);\r\n digitalWrite(B, LOW);\r\n digitalWrite(C, LOW);\r\n digitalWrite(D, LOW);\r\n digitalWrite(E, LOW);\r\n digitalWrite(F, LOW);\r\n digitalWrite(G, LOW);\r\n delay(600);\r\n}<\/pre>\n<p style=\"text-align: justify;\">Por supuesto que este c\u00f3digo se puede reducir, sin embargo, he querido mostrarlo de esta forma para que los que se inician puedan seguirlo con mayor facilidad.<\/p>\n<div align=\"center\"><iframe loading=\"lazy\" width=\"480\" height=\"360\" title=\"Demo encendido de segmentos\" src=\"https:\/\/www.youtube.com\/embed\/8ApzsCdt0qY\"><\/iframe><\/div>\n<h3 style=\"color: #000080;\">Circuito de 2 d\u00edgitos.<\/h3>\n<p style=\"text-align: justify;\">El circuito se muestra a continuaci\u00f3n. Es muy sencillo y no creo necesario entrar a describir cada componente. Dos apuntes importantes:<\/p>\n<ul>\n<li style=\"text-align: justify;\">Este mismo circuito, con s\u00f3lo a\u00f1adir unas resistencias, nos sirve, para el resto de ejemplos que se describen.<\/li>\n<li style=\"text-align: justify;\">Los pines anal\u00f3gicos del Arduino (A0&#8230;A6), pueden tomarse como digitales, siguiendo el orden, A0 = A14; A1 = A15; &#8230; A6 = A19.<\/li>\n<\/ul>\n<div align=\"center\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/display-multiple-de-7-segmentos\/circuito2x7segmt\" rel=\"attachment wp-att-2645\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2645\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/circuito2x7segmt.jpg\" alt=\"circuito2x7segmt\" width=\"403\" height=\"441\" srcset=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/circuito2x7segmt.jpg 403w, https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/circuito2x7segmt-274x300.jpg 274w\" sizes=\"auto, (max-width: 403px) 100vw, 403px\" \/><\/a><\/div>\n<h3><span style=\"color: #000080;\">1<span style=\"font-size: xx-small;\"><sup>er<\/sup><\/span>. Ejemplo.<\/span><\/h3>\n<p style=\"text-align: justify;\">Esta es una primera versi\u00f3n y su correspondiente c\u00f3digo realizado con Arduino v.013 y v.023. El display utilizado para este caso es de c\u00e1todo com\u00fan (CC). Como de costumbre, puede seleccionar el c\u00f3digo y pegarlo en su editor d\u00e1ndole un nombre para guardarlo y su posterior ejecuci\u00f3n.<\/p>\n<h4 style=\"color: #000080;\">Contador con dos display de 7 segmentos.<\/h4>\n<pre lang=\"cpp\" file=\"download.txt\">\/\/\r\n\/\/ Doble Didplay siete-segmentos LED con botones\r\n\/\/ \r\n\/\/ Basado en un trabajo de Natalia Fargasch Norman\r\n\/\/ \r\n\/\/ \r\n\/\/ Common Catode digit 1 pin 10\r\n\/\/ Common Catode digit 2 pin 5\r\n\/\/\r\n\/\/ Modificado y mejorado 11.08.11\r\n\/\/ V. Garc\u00eda\r\n\/\/\r\n\/\/ Utiliza 2202 bytes con Arduino v0013\r\n\r\n\/\/ CA1 G F A B\r\n\/\/ | | | | | | -&gt; pines y segmentos de control\r\n\/\/ --------- ---------\r\n\/\/ | A | | A |\r\n\/\/ F| |B F| |B\r\n\/\/ |---G---| |---G---|\r\n\/\/ E| |C E| |C\r\n\/\/ | D | | D |\r\n\/\/ --------- ---------\r\n\/\/ | | | | | | -&gt; pines y segmentos de control\r\n\/\/ D DP E C CA2 \r\n\r\n\/\/ Composici\u00f3n de los digitos en Segmentos\r\n\/\/ 0 =&gt; -FEDCBA\r\n\/\/ 1 =&gt; ----BC-\r\n\/\/ 2 =&gt; G-ED-BA\r\n\/\/ 3 =&gt; G--DCBA\r\n\/\/ 4 =&gt; GF--CB-\r\n\/\/ 5 =&gt; GF-DC-A\r\n\/\/ 6 =&gt; GFEDC-A\r\n\/\/ 7 =&gt; ----CBA \r\n\/\/ 8 =&gt; GFEDCBA\r\n\/\/ 9 =&gt; GF-DCBA\r\n\r\n\/\/ Pines digitales usados Arduino para encender\r\n\/\/ los correspondientes segmentos LED del display\r\n#define A 2 \r\n#define B 3 \r\n#define C 4 \r\n#define D 5 \r\n#define E 6 \r\n#define F 7 \r\n#define G 8 \r\n\r\n\/\/ Pulsadoes boton conectados a pines 9 y 10\r\n#define BTN1 14\r\n#define BTN2 15\r\n#define led 13\r\n\/\/ Pines comunes de cada display de anodo comun\r\n#define CA1 9\r\n#define CA2 10\r\n\r\n\/\/ Pines para A B C D E F G, en secuencia\r\n\/\/ se pueden usar los que m\u00e1s interesen \r\nconst int segs[7] = { 2, 3, 4, 5, 6, 7, 8 }; \r\n\r\n\/\/ Segmentos que componen cada n\u00famero \r\n\/\/ Para CC.\r\nconst byte numbers[10] = { 0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, \r\n0b1101101, 0b1111101, 0b0000111, 0b1111111, 0b1101111};\r\n\/\/ Para CA. descomentar las 2 l\u00edneas que siguen.\r\n\/\/ const byte numbers[10] = { 0b1000000, 0b1111001, 0b0100100, 0b0110000, 0b0011001, 0b0010010,\r\n\/\/ 0b0000010, 0b1111000, 0b0000000, 0b0010000}; \r\n\r\nint digit1 = 0;\r\nint digit2 = 0;\r\n\r\nvoid setup() \r\n {\r\n   pinMode(A, OUTPUT);\r\n   pinMode(B, OUTPUT);\r\n   pinMode(C, OUTPUT);\r\n   pinMode(D, OUTPUT);\r\n   pinMode(E, OUTPUT);\r\n   pinMode(F, OUTPUT);\r\n   pinMode(G, OUTPUT);\r\n   pinMode(BTN1, INPUT); \r\n   pinMode(BTN2, INPUT);\r\n   digitalWrite(BTN1, HIGH); \/\/ activa RPA \r\n   digitalWrite(BTN2, HIGH); \/\/ activa RPA \r\n   pinMode(CA1, OUTPUT);\r\n   pinMode(CA2, OUTPUT);\r\n   pinMode(led, OUTPUT); \r\n\r\n \/\/ digit1 = 9; digit2 = 9;\r\n\r\n }\r\n\r\nvoid loop() \r\n{\r\n\/\/ chequea boton1. Incrementa\r\nint val1 = digitalRead(BTN1);\r\nif (val1 == LOW) \r\n { \r\n  if (digit2 &gt;= 9 &amp;&amp; digit1 &gt;= 9) \r\n   { \r\n    digit2 = 0;\r\n    digit1++;\r\n    digit1 %= 10; \r\n    if (digit1 &gt;=9)\r\n     {\r\n      digit2++;\r\n     } \r\n    } else if (digit1 &gt;= 9) \r\n    { \r\n     digit2++;\r\n     digit2 %= 10; \r\n    }\r\n    digit1++;\r\n    digit1 %= 10;\r\n    delay(10);\r\n  }\r\n\r\n\/\/ cheque boton2. Decrementa\r\nint val2 = digitalRead(BTN2);\r\nif (val2 == LOW) \r\n { \r\n if (digit1 &gt;= 0) \r\n  { \r\n  if (digit1 &lt; 0) \r\n   {\r\n    digit1 = 0; \r\n   }\r\n   digit1--;\r\n  } \r\n  if(digit1 &lt; 0)\r\n   { \r\n    digit1 = 9;\r\n    if (digit2 &lt; 0)\r\n     {\r\n      digit2 = 0;\r\n     }\r\n    digit2--;\r\n   }\r\n   if (digit2 &lt; 0)\r\n    {\r\n     digit2 = 9;\r\n    } \r\n  } \r\n\r\n\/\/ display numero\r\nunsigned long startTime = millis();\r\nfor (unsigned long elapsed=0; elapsed &lt; 300; elapsed = millis() - startTime) \r\n {\r\n  lightDigit1(numbers[digit1]);\r\n  delay(5);\r\n  lightDigit2(numbers[digit2]);\r\n  delay(5);\r\n }\r\n}\r\n\r\nvoid lightDigit1(byte number) \r\n {\r\n  digitalWrite(CA1, LOW);\r\n  digitalWrite(CA2, HIGH);\r\n  lightSegments(number);\r\n }\r\n\r\nvoid lightDigit2(byte number) \r\n {\r\n  digitalWrite(CA1, HIGH);\r\n  digitalWrite(CA2, LOW);\r\n  lightSegments(number);\r\n }\r\n\r\nvoid lightSegments(byte number)\r\n {\r\n  for (int i = 0; i &lt; 7; i++) \r\n   {\r\n    int bit = bitRead(number, i);\r\n    digitalWrite(segs[i], bit);\r\n   }\r\n }<\/pre>\n<h3 style=\"color: #000080;\">2\u00ba ejemplo.<\/h3>\n<p style=\"text-align: justify;\">En este segundo ejemplo, voy a utilizar otra forma de resolver el programa y adem\u00e1s aprovechando que dispongo de un display m\u00faltiple de 4 d\u00edgitos, har\u00e9 un contador de dos d\u00edgitos.<\/p>\n<p style=\"text-align: justify;\">El circuito electr\u00f3nico es similar al del ejemplo anterior, con unos pocos cambios, por lo que no lo mostrar\u00e9 aqu\u00ed. El c\u00f3digo se muestra a continuaci\u00f3n.<\/p>\n<h3 style=\"color: #000080;\">Contador 2 x 7 segmentos y 2 botones.<\/h3>\n<p><!-- file=\"download.txt\" --><\/p>\n<pre lang=\"cpp\" file=\"download.txt\">\/\/\r\n\/\/ Doble Didplay siete-segmentos LED con botones\r\n\/\/\r\n\/\/ Basado en un trabajo de Natalia Fargasch Norman\r\n\/\/ \r\n\/\/ \r\n\/\/ Common Catode digit 1 pin 10\r\n\/\/ Common Catode digit 2 pin 5\r\n\/\/\r\n\/\/ Modificado y mejorado 11.08.11\r\n\/\/ V. Garc\u00eda\r\n\/\/\r\n\/\/ Utiliza 2138 bytes con Arduino v0013\r\n\r\n\/\/\r\n\/\/ CA1 G F A B\r\n\/\/ | | | | | -&gt; pins and segments they control\r\n\/\/ --------- ---------\r\n\/\/ | A | | A |\r\n\/\/ F| |B F| |B\r\n\/\/ |---G---| |---G---|\r\n\/\/ E| |C E| |C\r\n\/\/ | D | | D |\r\n\/\/ --------- ---------\r\n\/\/ | | | | | -&gt; pins and segments they control\r\n\/\/ D DP E C CA2 \r\n\r\n\/\/ Composici\u00f3n de los digitos en Segmentos\r\n\/\/ 0 =&gt; -FEDCBA\r\n\/\/ 1 =&gt; ----BC-\r\n\/\/ 2 =&gt; G-ED-BA\r\n\/\/ 3 =&gt; G--DCBA\r\n\/\/ 4 =&gt; GF--CB-\r\n\/\/ 5 =&gt; GF-DC-A\r\n\/\/ 6 =&gt; GFEDC-A\r\n\/\/ 7 =&gt; ----CBA\r\n\/\/ 8 =&gt; GFEDCBA\r\n\/\/ 9 =&gt; GF-DCBA\r\n\r\n\/\/ Pines digitales usados Arduino para encender\r\n\/\/ los correspondientes segmentos LED del display\r\n#define A 2 \r\n#define B 3 \r\n#define C 4 \r\n#define D 5 \r\n#define E 6 \r\n#define F 7 \r\n#define G 8 \r\n\r\n\/\/ Pulsadoes boton conectados a pines 9 y 10\r\n#define BTN1 14\r\n#define BTN2 15\r\n#define led 13\r\n\/\/ Pines comunes de cada display de anodo comun\r\n#define CC1 12\r\n#define CC2 11\r\n\r\nint estadobtn1 = 0;\r\nint estadobtn2 = 0;\r\nint count = 0;\r\n\r\n\/\/ Pines para A B C D E F G, en secuencia\r\n\/\/ se pueden usar los que m\u00e1s interesen \r\nconst int segs[7] = { 2, 3, 4, 5, 6, 7, 8 }; \r\n\r\n\/\/ Segmentos que componen cada n\u00famero\r\nconst byte numbers[10] = { 0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, \r\n0b1101101, 0b1111101, 0b0000111, 0b1111111, 0b1101111};\r\n\r\nint digit1 = 0;\r\nint digit2 = 0;\r\n\r\nvoid setup() {\r\n  pinMode(A, OUTPUT);\r\n  pinMode(B, OUTPUT);\r\n  pinMode(C, OUTPUT);\r\n  pinMode(D, OUTPUT);\r\n  pinMode(E, OUTPUT);\r\n  pinMode(F, OUTPUT);\r\n  pinMode(G, OUTPUT);\r\n  pinMode(BTN1, INPUT); \r\n  pinMode(BTN2, INPUT);\r\n  digitalWrite(BTN1, HIGH); \/\/ activa RPA \r\n  digitalWrite(BTN2, HIGH); \/\/ activa RPA \r\n  pinMode(CC1, OUTPUT);\r\n  pinMode(CC2, OUTPUT);\r\n  pinMode(led, OUTPUT); \r\n \/\/ digit1 = 9; digit2 = 9; \/\/ para depurar\r\n}\r\n\r\nvoid loop() \r\n{\r\n\/\/ chequea boton1. Incrementa\r\nint val1 = digitalRead(BTN1);\r\nif (val1 == LOW)\r\n { \r\n  if (digit1 &gt;= 9 )     {      digit1 ++;     }     if (digit1 &gt; 9)\r\n    {\r\n     digit1 = 0;\r\n     digit2++;\r\n     if (digit2 &gt; 9)\r\n      {\r\n       digit2 = 0;\r\n      }\r\n    }\r\n }\r\n\r\n\/\/ cheque boton2. Decrementa\r\nint val2 = digitalRead(BTN2);\r\nif (val2 == LOW) \r\n { \r\n  if (digit1 &gt;= 0)\r\n   { \r\n    if (digit1 &lt; 0) \r\n     {\r\n      digit1 = 0; \r\n     }\r\n    digit1--;\r\n   } \r\n   if(digit1 &lt; 0)\r\n    { \r\n     digit1 = 9;\r\n     if (digit2 &lt; 0) \r\n      {\r\n       digit2 = 0;\r\n      }\r\n     digit2--;\r\n     }\r\n     if (digit2 &lt; 0) \r\n      {\r\n      digit2 = 9;\r\n      } \r\n } \r\n\r\n\/\/ display numero\r\nunsigned long startTime = millis();\r\n  for (unsigned long elapsed=0; elapsed &lt; 200; elapsed = millis() - startTime) {\r\n    lightDigit1(numbers[digit1]);\r\n    delay(5);\r\n    lightDigit2(numbers[digit2]);\r\n    delay(5);\r\n  }\r\n}\r\n\r\nvoid lightDigit1(byte number) {\r\n  digitalWrite(CC1, LOW);\r\n  digitalWrite(CC2, HIGH);\r\n  lightSegments(number);\r\n}\r\n\r\nvoid lightDigit2(byte number) {\r\n  digitalWrite(CC1, HIGH);\r\n  digitalWrite(CC2, LOW);\r\n  lightSegments(number);\r\n}\r\n\r\nvoid lightSegments(byte number) {\r\n  for (int i = 0; i &lt; 7; i++) {\r\n    int bit = bitRead(number, i);\r\n    digitalWrite(segs[i], bit);\r\n  }\r\n}<\/pre>\n<p style=\"text-align: justify;\">Este ejemplo, muestra un c\u00f3digo mejorado al representado en el primer ejemplo. Como puede apreciarse, he utilizado los mismos pines del Arduino, en cada ejemplo. Con esto, trato de minorar los errores de asignaci\u00f3n en los distintos listados de c\u00f3digo.<\/p>\n<h3 style=\"color: #00a080;\">Problemas a causa del multiplexado.<\/h3>\n<p style=\"text-align: justify;\"><em>El problema que se puede encontrar el programador, frente a una representaci\u00f3n por multiplexado, radica en los tiempos de muestreo de cada d\u00edgito, por este motivo, recomiendo que se tenga en cuenta, dir\u00eda, muy en cuenta, no utilizar o minimizar los delay(), ya que \u00e9stos, tienden a producir el efecto de \u00abparpadeo\u00bb que se aprecia en los d\u00edgitos.<\/em><\/p>\n<p style=\"text-align: justify;\"><em>En un multiplexado, siempre se producir\u00e1 un parpadeo, aunque \u00e9ste sea poco apreciable, cuantos m\u00e1s d\u00edgitos se muestren, m\u00e1s evidente se har\u00e1. Por ese motivo hay que reducir en lo posible los tiempos de muestreo.<\/em><\/p>\n<h3 style=\"color: #000080;\">3<sup>er<\/sup>. ejemplo.<\/h3>\n<p style=\"text-align: justify;\">Voy a presentar el c\u00f3digo de un contador de 3 d\u00edgitos en un display de 7 segmentos LED. El lector, puede apreciar las pocas diferencias que se presentan en este c\u00f3digo. Un punto a tener en en cuenta, se encuentra precisamente en la rutina de asignaci\u00f3n de encendido de cada d\u00edgito, representados por digit1, digit2 y digit3, con sus f\u00f3rmulas.<\/p>\n<div align=\"center\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/display-multiple-de-7-segmentos\/contador4x7_3\" rel=\"attachment wp-att-2647\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2647\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/contador4x7_3.jpg\" alt=\"contador4x7_3\" width=\"316\" height=\"349\" srcset=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/contador4x7_3.jpg 316w, https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/contador4x7_3-271x300.jpg 271w\" sizes=\"auto, (max-width: 316px) 100vw, 316px\" \/><\/a><\/div>\n<h3 style=\"color: #000080;\">Contador 3 displays de 7 segmentos.<\/h3>\n<p><!-- file=\"download.txt\" --><\/p>\n<pre lang=\"cpp\" file=\"download.txt\">\/\/ \r\n\/\/ Basado en un trabajo de: Natalia Fargasch Norman\r\n\/\/\r\n\/\/ Modificado y actualizado por Vins el 12.08.11 \r\n\/\/\r\n\/\/ Three seven-segment LED Display with buttons\r\n\/\/ Common Catode digit 1 \r\n\/\/ Common Catode digit 2 \r\n\r\n\/\/ CA1 G F A B\r\n\/\/ | | | | | -&gt; pins and segments they control\r\n\/\/ --------- ---------\r\n\/\/ | A | | A |\r\n\/\/ F| |B F| |B\r\n\/\/ |---G---| |---G---|\r\n\/\/ E| |C E| |C\r\n\/\/ | D | | D |\r\n\/\/ --------- ---------\r\n\/\/ | | | | | -&gt; pins and segments they control\r\n\/\/ D DP E C CA2 \r\n\/\/ Segments that make each number when lit:\r\n\/\/ 0 =&gt; -FEDCBA\r\n\/\/ 1 =&gt; ----BC-\r\n\/\/ 2 =&gt; G-ED-BA\r\n\/\/ 3 =&gt; G--DCBA\r\n\/\/ 4 =&gt; GF--CB-\r\n\/\/ 5 =&gt; GF-DC-A\r\n\/\/ 6 =&gt; GFEDC-A\r\n\/\/ 7 =&gt; ----CBA\r\n\/\/ 8 =&gt; GFEDCBA\r\n\/\/ 9 =&gt; GF-DCBA\r\n\/\/ Arduino digital pins used to light up\r\n\/\/ corresponding segments on the LED display\r\n#define A 2\r\n#define B 3\r\n#define C 4\r\n#define D 5\r\n#define E 6\r\n#define F 7\r\n#define G 8\r\n\/\/ Pushbuttons connected to pins 9 and 10\r\n#define BTN1 14\r\n#define BTN2 15\r\n#define led 13\r\n\r\n\/\/ Pins driving common anodes\r\n#define CA1 9\r\n#define CA2 10\r\n#define CA3 11\r\n\r\n\/\/ Pins for A B C D E F G, in sequence\r\nconst int segs[7] = { 2, 3, 4, 5, 6, 7, 8 };\r\n\r\n\/\/ Segments that make each number\r\nconst byte numbers[10] = { 0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, \r\n0b1101101, 0b1111101, 0b0000111, 0b1111111, 0b1101111};\r\nint estadobtn1 = 0;\r\nint estadobtn2 = 0;\r\nint digit1 = 0;\r\nint digit2 = 0;\r\nint digit3 = 0;\r\nint count = 0;\r\nint val;\r\nint val2;\r\n\r\nvoid setup() {\r\n  pinMode(A, OUTPUT);\r\n  pinMode(B, OUTPUT);\r\n  pinMode(C, OUTPUT);\r\n  pinMode(D, OUTPUT);\r\n  pinMode(E, OUTPUT);\r\n  pinMode(F, OUTPUT);\r\n  pinMode(G, OUTPUT);\r\n  pinMode(BTN1, INPUT);\r\n  pinMode(BTN2, INPUT);\r\n  pinMode(CA1, OUTPUT);\r\n  pinMode(CA2, OUTPUT);\r\n  pinMode(CA3, OUTPUT);\r\n  digitalWrite(BTN1, HIGH); \/\/ activa RPA \r\n  digitalWrite(BTN2, HIGH); \/\/ activa RPA \r\n  count = 0;\r\n}\r\nvoid loop() {\r\n  \/\/ incrementa\r\n  val = digitalRead(BTN1); \/\/ lee el valor de entrada y almac\u00e9nelo en val\r\n    if (val != estadobtn1) \/\/ el estado de bot\u00f3n ha cambiado!\r\n     {\r\n      if (val == LOW) \/\/ compruebe si el bot\u00f3n es presionado \r\n      {\r\n      count++;\r\n      count %= 1000;\r\n     } \r\n    }\r\n    estadobtn1=val;\r\n\r\n  \/\/ decrementa\r\n  val = digitalRead(BTN2); \/\/ lee el valor de entrada y almac\u00e9nelo en val\r\n   if (val != estadobtn2) \/\/ el estado de bot\u00f3n ha cambiado!\r\n   {\r\n    if (val == LOW) \/\/ compruebe si el bot\u00f3n es presionado \r\n    {\r\n     if (count == 0)\r\n      {\r\n      count=999;\r\n      } else\r\n      {\r\n      count--;\r\n      }\r\n    } \r\n   }\r\n  estadobtn2=val;\r\n\r\n  \/\/ display number\r\n    digit1=count \/ 100;\r\n    digit2=(count - (digit1*100)) \/ 10;\r\n    digit3=count % 10;\r\n  \/\/ \r\n    lightDigit1(numbers[digit1]);\r\n    delay(2);\r\n    lightDigit2(numbers[digit2]);\r\n    delay(2);\r\n    lightDigit3(numbers[digit3]);\r\n    delay(2);\r\n }\r\nvoid lightDigit1(byte number) {\r\n   digitalWrite(CA1, LOW);\r\n   digitalWrite(CA2, HIGH);\r\n   digitalWrite(CA3, HIGH);\r\n   lightSegments(number);\r\n }\r\nvoid lightDigit2(byte number) {\r\n   digitalWrite(CA1, HIGH);\r\n   digitalWrite(CA2, LOW);\r\n   digitalWrite(CA3, HIGH);\r\n   lightSegments(number);\r\n }\r\n\r\nvoid lightDigit3(byte number) {\r\n   digitalWrite(CA1, HIGH);\r\n   digitalWrite(CA2, HIGH);\r\n   digitalWrite(CA3, LOW);\r\n   lightSegments(number);\r\n }\r\n\r\nvoid lightSegments(byte number) {\r\n  for (int i = 0; i &lt; 7; i++) {\r\n    int bit = bitRead(number, i);\r\n    digitalWrite(segs[i], bit);\r\n   }\r\n }<\/pre>\n<p style=\"text-align: justify;\">Veamos la importancia que tiene la reducci\u00f3n de lo que yo llamo tiempos muertos, probemos a modificar estas l\u00edneas, simplemente, comentemos las que aqu\u00ed se muestran, compilemos y carguemos el programa en el Arduino:<\/p>\n<p><!-- file=\"download.txt\" --><\/p>\n<pre lang=\"cpp\" file=\"download.txt\">\/\/ incrementa + + + +\r\n   val = digitalRead(BTN1);  \/\/ lee el valor de entrada y almac\u00e9nalo en val\r\n   \/\/  delay(4);                     \/\/ 10 milisegundos son una buena cantidad de tiempo\r\n   \/\/  val2 = digitalRead(BTN1); \/\/ lee la entrada otra vez para comprobar saltos\r\n   \/\/  if (val == val2)             \/\/ asegurar que conseguimos 2 lecturas constantes\r\n   \/\/  { \r\n       if (val != estadobtn1)     \/\/ el estado de bot\u00f3n ha cambiado!\r\n       {\r\n         if (val == LOW)      <span style=\"color: #009900;\">    \/\/ compruebe si el bot\u00f3n es presionado     \r\n         {\r\n           count++;\r\n           count %= 1000;\r\n         }    \r\n       }\r\n       estadobtn1=val;\r\n   \/\/  }\r\n\r\n     \/\/ decrementa - - - -\r\n     val = digitalRead(BTN2);  \/\/ lee el valor de entrada y almacenalo en val \r\n   \/\/  delay(4);                     \/\/ 10 milisegundos son una buena cantidad de tiempo\r\n   \/\/  val2 = digitalRead(BTN2); \/\/ lee la entrada otra vez para comprobar saltos\r\n   \/\/  if (val == val2)             \/\/ asegurar que conseguimos 2 lecturas constantes\r\n   \/\/  {\r\n       if (val != estadobtn2)  \/\/ el estado de bot\u00f3n ha cambiado!\r\n       {\r\n         if (val == LOW)   \/\/ compruebe si el bot\u00f3n es presionado  \r\n         {\r\n           if (count == 0)\r\n           {\r\n              count=999;\r\n           } else \r\n           {\r\n             count--;\r\n           }\r\n         }    \r\n       }\r\n       estadobtn2=val;\r\n   \/\/  } <\/span><\/pre>\n<p style=\"text-align: justify;\">Habr\u00e1 comprobado que ahora el parpadeo no parece afectar a la normal visi\u00f3n del contador. A esto es, a lo que me refer\u00eda, con llevar cuidado al programar, evitando rutinas que tomen excesivo tiempo en tareas que retengan el normal desarrollo del microprocesador.<\/p>\n<p style=\"text-align: justify;\">Ahora, puede eliminar de su c\u00f3digo, las l\u00edneas que ha comentado, guarde el archivo, compile y cargue el programa en el Arduino y finalmente compruebe que la soluci\u00f3n es la esperada.<\/p>\n<h3 style=\"color: #000080;\">4\u00ba ejemplo.<\/h3>\n<p style=\"text-align: justify;\">En este ejemplo, vamos a utilizar los cuatro d\u00edgitos del encapsulado del display (es uno que ten\u00eda de una impresora). En este programa la tarea de multiplexar se dedica a cuatro displays, lo que puede llevar alg\u00fan problema si no se vigilan los tiempos. Si no utilizamos bien las rutinas, aparecer\u00e1n dos consecuencias, el parpadeo y una notable bajada de luminosidad de los d\u00edgitos.<\/p>\n<p style=\"text-align: justify;\">Veamos el listado del c\u00f3digo, estos listados est\u00e1n probados y sin duda funcionan como se espera de ellos.<\/p>\n<h4 style=\"color: #000080;\">Contador con 4 displays de 7 segmentos.<\/h4>\n<p><!-- file=\"download.txt\" --><\/p>\n<pre lang=\"cpp\" file=\"download.txt\" class=\"\">\/*\r\n*\r\n* Esta es la colaboraci\u00f3n que a \r\n* modificado y mejorado por Vins el 12.08.11 \r\n* \r\n* Four seven-segment LED Display with two buttons\r\n* Un bot\u00f3n incrementa la cuenta. Otro bot\u00f3n decrementa la cuenta.\r\n\r\n* Common Catode digit 1 pin 10\r\n* Common Catode digit 2 pin 5\r\n\r\n\/\/ CC1 A F CC3 CC2 B \r\n\/\/ | | | | | | -&gt; pins and segments they control\r\n\/\/ --------- --------- --------- ---------\r\n\/\/ | A | | A | | A | | A |\r\n\/\/ F| |B F| |B F| |B F| |B\r\n\/\/ |---G---| |---G---| |---G---| |---G---|\r\n\/\/ E| |C E| |C E| |C E| |C\r\n\/\/ | D | | D | | D | | D |\r\n\/\/ --------- --------- --------- ---------\r\n\/\/ | | | | | | -&gt; pins and segments they control\r\n\/\/ E D C G CC4 \r\n\r\n\/\/ Segments that make each number when lit:\r\n\/\/ 0 =&gt; -FEDCBA\r\n\/\/ 1 =&gt; ----BC-\r\n\/\/ 2 =&gt; G-ED-BA\r\n\/\/ 3 =&gt; G--DCBA\r\n\/\/ 4 =&gt; GF--CB-\r\n\/\/ 5 =&gt; GF-DC-A\r\n\/\/ 6 =&gt; GFEDC-A\r\n\/\/ 7 =&gt; ----CBA\r\n\/\/ 8 =&gt; GFEDCBA\r\n\/\/ 9 =&gt; GF-DCBA\r\n*\/\r\n\r\n\/\/ Arduino digital pins used to light up\r\n\/\/ corresponding segments on the LED display\r\n#define A 2\r\n#define B 3\r\n#define C 4\r\n#define D 5\r\n#define E 6\r\n#define F 7\r\n#define G 8\r\n\r\n\/\/ Pushbuttons connected to pins 9 and 10\r\n#define BTN1 14\r\n#define BTN2 15\r\n\r\n\/\/ Pins driving common anodes\r\n#define CC1 9\r\n#define CC2 10\r\n#define CC3 11\r\n#define CC4 12\r\n\/\/ Pins for A B C D E F G, in sequence\r\nconst int segs[7] = { 2, 3, 4, 5, 6, 7, 8 };\r\n\r\n\/\/ Segments that make each number\r\nconst byte numbers[10] = { 0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, 0b1101101, 0b1111101, 0b0000111, 0b1111111, 0b1101111};\r\n\r\nint estadobtn1 = 0;\r\nint estadobtn2 = 0;\r\nint digit1 = 0;\r\nint digit2 = 0;\r\nint digit3 = 0;\r\nint digit4 = 0;\r\nint count = 0;\r\nint val;\r\nint val2;\r\n\r\nvoid setup() {\r\n  pinMode(A, OUTPUT);\r\n  pinMode(B, OUTPUT);\r\n  pinMode(C, OUTPUT);\r\n  pinMode(D, OUTPUT);\r\n  pinMode(E, OUTPUT);\r\n  pinMode(F, OUTPUT);\r\n  pinMode(G, OUTPUT);\r\n  pinMode(BTN1, INPUT);\r\n  pinMode(BTN2, INPUT);\r\n  digitalWrite(BTN1, HIGH); \/\/ activa RPA \r\n  digitalWrite(BTN2, HIGH); \/\/ activa RPA \r\n  pinMode(CC1, OUTPUT);\r\n  pinMode(CC2, OUTPUT);\r\n  pinMode(CC3, OUTPUT);\r\n  pinMode(CC4, OUTPUT);\r\n  count = 0;\r\n}\r\n\r\nvoid loop() {\r\n  val = digitalRead(BTN1); \/\/ lee el valor de entrada y almac\u00e9nlo en val\r\n  if (val != estadobtn1) \/\/ el estado de bot\u00f3n ha cambiado!\r\n  {\r\n    if (val == LOW) \/\/ compruebe si el bot\u00f3n es presionado \r\n    {\r\n      count++;\r\n      count %= 10000;\r\n    } \r\n  }\r\n  estadobtn1=val;\r\n\r\n  val = digitalRead(BTN2); \/\/ lee el valor de entrada y almac\u00e9nlo en val\r\n  if (val != estadobtn2) \/\/ el estado de bot\u00f3n ha cambiado!\r\n  {\r\n    if (val == LOW) \/\/ compruebe si el bot\u00f3n es presionado \r\n    {\r\n      if (count == 0)\r\n    {\r\n      count=9999;\r\n    } else {\r\n      count--;\r\n      }\r\n    }\r\n    estadobtn2=val;\r\n  }\r\n\/\/ display number\r\ndigit1=count \/ 1000;\r\ndigit2=(count - (digit1 * 1000)) \/ 100;\r\ndigit3=(count - (digit1*1000) - (digit2*100)) \/ 10;\r\ndigit4=count % 10;\r\n\r\nlightDigit1(numbers[digit1]);\r\n  delay(2);\r\n  lightDigit2(numbers[digit2]);\r\n  delay(2);\r\n  lightDigit3(numbers[digit3]);\r\n  delay(2);\r\n  lightDigit4(numbers[digit4]);\r\n  delay(2);\r\n}\r\n\r\nvoid lightDigit1(byte number) {\r\n  digitalWrite(CC1, LOW);\r\n  digitalWrite(CC2, HIGH);\r\n  digitalWrite(CC3, HIGH);\r\n  digitalWrite(CC4, HIGH);\r\n  lightSegments(number);\r\n}\r\n\r\nvoid lightDigit2(byte number) {\r\n  digitalWrite(CC1, HIGH);\r\n  digitalWrite(CC2, LOW);\r\n  digitalWrite(CC3, HIGH);\r\n  digitalWrite(CC4, HIGH);\r\n  lightSegments(number);\r\n}\r\n\r\nvoid lightDigit3(byte number) {\r\n  digitalWrite(CC1, HIGH);\r\n  digitalWrite(CC2, HIGH);\r\n  digitalWrite(CC3, LOW);\r\n  digitalWrite(CC4, HIGH);\r\n  lightSegments(number);\r\n}\r\n\r\nvoid lightDigit4(byte number) {\r\n  digitalWrite(CC1, HIGH);\r\n  digitalWrite(CC2, HIGH);\r\n  digitalWrite(CC3, HIGH);\r\n  digitalWrite(CC4, LOW);\r\n  lightSegments(number);\r\n}\r\n\r\nvoid lightSegments(byte number) {\r\n  for (int i = 0; i &lt; 7; i++) {\r\n    int bit = bitRead(number, i);\r\n    digitalWrite(segs[i], bit);\r\n  }\r\n}<\/pre>\n<p style=\"text-align: justify;\">A dem\u00e1s de lo comentado, el punto delicado de este sistema de multiplexado est\u00e1 en la elecci\u00f3n correcta de la rutina de control de presentaci\u00f3n de d\u00edgitos, cuanto menor tiempo se utilice en comparaciones, retardos, etc. m\u00e1s r\u00e1pido se lograr\u00e1 la activaci\u00f3n del d\u00edgito a visualizar:<\/p>\n<pre style=\"margin-left: -6px;\">  \/\/ display number\r\n  digit1=count \/ 1000;\r\n  digit2=(count - (digit1 * 1000)) \/ 100;\r\n  digit3=(count - (digit1*1000) - (digit2*100)) \/ 10;\r\n  digit4=count % 10;<\/pre>\n<p style=\"text-align: justify;\">Esto es un peque\u00f1o v\u00eddeo de baja calidad que muestra el contador de 4 d\u00edgitos y 7 segmentos a LED, ciertamente no se ve con la calidad que hubiera deseado. Tambi\u00e9n puede descargar una versi\u00f3n, <a href=\"http:\/\/hispavila.com\/3ds\/atmega\/display_multiple_files\/4X7segmentos.mp4\">desde aqu\u00ed<\/a>.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/display-multiple-de-7-segmentos\/contador4x7seg\" rel=\"attachment wp-att-2653\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2653\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2014\/02\/contador4x7seg.jpg\" alt=\"contador4x7seg\" width=\"437\" height=\"325\" \/><\/a><\/p>\n<div align=\"center\"><iframe loading=\"lazy\" width=\"460\" height=\"320\" src=\"https:\/\/www.youtube.com\/embed\/Svvmkea8H9E\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/div>\n<p style=\"text-align: justify;\">Con estos ejemplos, he querido llenar un vac\u00edo que, hab\u00eda entre tantos ejemplos que se pueden encontrar en diferentes foros de Arduino. Realmente, en los foros se puede encontrar mucha colaboraci\u00f3n y en la web, muchos art\u00edculos que hablan de contadores, realizados con LCD. Sin embargo, no son muchos los que se inclinan por los displays de siete segmentos a LED. En la mayor\u00eda de los que se encuentran teorizan y hablan de como funcionan, pero que lo describan en espa\u00f1ol, hay pocos. Por ese motivo, me he tomado la tarea de introducir al interesado en este tema de la multiplexaci\u00f3n, en este caso, de unos d\u00edgitos. Tal vez le pueda ayudar a alguien en su trabajo.<\/p>\n<p style=\"text-align: justify;\">Como siempre, comentarios, criticas y sugerencias para mejorar este art\u00edculo, son bienvenidos y apreciados.<\/p>\n<p><span style=\"font-size: 14pt;\">Anexo.<\/span><br \/>\n<em><br \/>\n<span style=\"font-size: 10pt;\">2017-09-14 \u00a0Se modifica un error en listado &#8216;Contador 4 d\u00edgitos 7 segmentos&#8217;, dec\u00eda:<\/span><\/em><\/p>\n<ul>\n<li>\n<div id=\"crayon-59ba631e02a38451900012-149\" class=\"crayon-line\"><span style=\"font-size: 10pt;\"><em><span class=\"crayon-t\">void<\/span> <span class=\"crayon-e\">lightDigit3<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-t\">byte<\/span> <span class=\"crayon-v\">number<\/span><span class=\"crayon-sy\">)<\/span> <span class=\"crayon-sy\">{<\/span><\/em><\/span><\/div>\n<div id=\"crayon-59ba631e02a38451900012-150\" class=\"crayon-line crayon-striped-line\"><span style=\"font-size: 10pt;\"><em><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">digitalWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\" style=\"color: #ff0000;\">CA1<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">HIGH<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">; \u00a0<\/span><\/em><\/span><\/div>\n<div id=\"crayon-59ba631e02a38451900012-151\" class=\"crayon-line\"><span style=\"font-size: 10pt;\"><em><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">digitalWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">CC2<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">HIGH<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/em><\/span><\/div>\n<div id=\"crayon-59ba631e02a38451900012-152\" class=\"crayon-line crayon-striped-line\"><span style=\"font-size: 10pt;\"><em><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">digitalWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">CC3<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">LOW<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/em><\/span><\/div>\n<div id=\"crayon-59ba631e02a38451900012-153\" class=\"crayon-line\"><span style=\"font-size: 10pt;\"><em><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">digitalWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">CC4<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">HIGH<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/em><\/span><\/div>\n<div id=\"crayon-59ba631e02a38451900012-154\" class=\"crayon-line crayon-striped-line\"><span style=\"font-size: 10pt;\"><em><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">lightSegments<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">number<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/em><\/span><\/div>\n<div id=\"crayon-59ba631e02a38451900012-155\" class=\"crayon-line\"><span style=\"font-size: 10pt;\"><em><span class=\"crayon-sy\">}<br \/>\nPor:<\/span><\/em><\/span><\/div>\n<\/li>\n<li>\n<div id=\"crayon-59ba631e02a38451900012-149\" class=\"crayon-line\"><span style=\"font-size: 10pt;\"><em><span class=\"crayon-t\">void<\/span> <span class=\"crayon-e\">lightDigit3<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-t\">byte<\/span> <span class=\"crayon-v\">number<\/span><span class=\"crayon-sy\">)<\/span> <span class=\"crayon-sy\">{<\/span><\/em><\/span><\/div>\n<div id=\"crayon-59ba631e02a38451900012-150\" class=\"crayon-line crayon-striped-line\"><span style=\"font-size: 10pt;\"><em><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">digitalWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">CC1<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">HIGH<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/em><\/span><\/div>\n<div id=\"crayon-59ba631e02a38451900012-151\" class=\"crayon-line\"><span style=\"font-size: 10pt;\"><em><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">digitalWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">CC2<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">HIGH<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/em><\/span><\/div>\n<div id=\"crayon-59ba631e02a38451900012-152\" class=\"crayon-line crayon-striped-line\"><span style=\"font-size: 10pt;\"><em><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">digitalWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">CC3<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">LOW<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/em><\/span><\/div>\n<div id=\"crayon-59ba631e02a38451900012-153\" class=\"crayon-line\"><span style=\"font-size: 10pt;\"><em><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">digitalWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">CC4<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">HIGH<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/em><\/span><\/div>\n<div id=\"crayon-59ba631e02a38451900012-154\" class=\"crayon-line crayon-striped-line\"><span style=\"font-size: 10pt;\"><em><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">lightSegments<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">number<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/em><\/span><\/div>\n<div id=\"crayon-59ba631e02a38451900012-155\" class=\"crayon-line\"><span style=\"font-size: 10pt;\"><em><span class=\"crayon-sy\">}<\/span><\/em><\/span><\/div>\n<\/li>\n<\/ul>\n<p>Probados los programas con Arduino v.1.6.12 Pruebe a descargar las <a href=\"https:\/\/github.com\/esp8266\/Arduino#installing-with-boards-manager\" target=\"_blank\" rel=\"noopener noreferrer\">librer\u00edas desde aqu\u00ed<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PROLOGO. Quien no dispone en su caj\u00f3n desastre, de un conjunto de display a LED con dos, tres o cuatro d\u00edgitos. Este es el momento de reutilizar dicho display (multiplexado) en un contador cuya aplicaci\u00f3n puede mejorar una presentaci\u00f3n que ten\u00eda pendiente. En este art\u00edculo, veremos como aplicar c\u00f3digo a un display multiplexado y como [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":2627,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[22,355,15],"tags":[270,243,247,245],"class_list":["post-2625","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-display-multiple-de-7-segmentos","category-microcontroladores","tag-arduino","tag-display","tag-display-7-segmentos","tag-display-multiple"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts\/2625","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/comments?post=2625"}],"version-history":[{"count":42,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts\/2625\/revisions"}],"predecessor-version":[{"id":4816,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts\/2625\/revisions\/4816"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/media\/2627"}],"wp:attachment":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/media?parent=2625"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/categories?post=2625"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/tags?post=2625"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}