Multiplexación Display de 7 Segmentos con PIC
4.7 (94.88%) 43 votes

En esta entrada aprenderás paso a paso a usar la Multiplexación del display 7 segmentos con PIC, que es una técnica muy común en electrónica digital que nos permite conectar multiples displays 7 segmentos a nuestro microcontrolador.

Multiplexar Display 7 Segmentos PIC C

En muchas ocasiones se requiere mostrar números en el display de más de un dígito, es decir, 2, 3, o 4 dígitos. En la entrada pasada vimos como usar un único 👉 display de 7 segmentos con PIC, en esta entrada vamos a generalizarlo para la cantidad de displays que queramos colocarle a nuestro proyecto. Quizas te pueda interesar como usar el 👉 display 7 segmentos con Arduino.

Notemos que si se pretende controlar cada display, se necesitan siete (7) líneas del microcontrolador por cada uno, esto ocuparía todas las líneas disponibles en cada puerto del microcontrolador, sin embargo existe una técnica llamada multiplexación que consiste en conectar a las mismas 7 líneas los 2,3 o 4 display e ir encendiendo uno a uno los display, a través de un transistor, tan rápidamente que parece encenderse todos al mismo tiempo.

Cualquier elemento que se encienda y apague con una frecuencia mayor a 25Hz es imperceptible para el ojo humano, éste lo verá encendido en todo momento.


Multiplexar 2 Display 7 Segmentos con PIC

A continuación vemos un esquematico para Multiplexar 2 Display 7 Segmentos con PIC, sin embargo lo podemos extender para el numero de displays que queramos, puedes usarlo para multiplexar 3 display de 7 segmentos con pic, para multiplexar 4 display de 7 segmentos con pic, etc.

Multiplexacion con display 7 segmentos

Nota: los segmentos de cada display van unidos entre sí, es decir a con a, b con b, hasta el g con g, por cada display adicional se necesita un transistor y sólo una línea más del microcontrolador. También es importante que entiendas que en el mercado ya venden displays de varios digitos, como el caso del display de 4 digitos.

displays 7 segmentos varios digitos

En este diagrama se asume que las unidades están en el display de la derecha y las decenas en el display de la izquierda.

A continuación veremos un ejemplo para multiplexar display 7 segmentos con PIC C, que muestra como multiplexar 2 display de 7 segmentos con PIC, pero el mismo ejemplo lo puedes usar para controlar 4 display 7 segmentos con PIC. La única diferencia es aumentar el numero de displays y repetir en la linea de código los mismo para las centenas y millares.

Display 7 Segmentos 2 Dígitos – Ejemplo

Realizar un temporizador con display de 7 segmentos de 0 a 99 que incremente cada segundo.

Multiplexación con PIC

A continuación te dejo el código para que lo puedas copiar y pegar en tu compilador y de esta manera puedas reproducirlo en tu computador. Recuerda que para ver el código solo debes compartir el contenido de este post. Gracias por apoyar la página.

Para descargar el programa y el esquema del proteus: 👉 7. Multiplexacion

En el ejemplo anterior se utilizan funciones, que son pequeños subprogramas que se pueden llamar desde el programa principal (MAIN). Se debe digitar antes del programa principal que es quien las llama.

Las dos funciones empleadas son: “MOSTRAR” que es una pequeña rutina que se encarga de hacer la multiplexación entre los dos displays. Y la otra funcion es “RET1SEG” que es una rutina de retardo de 1 segundo, que va llamando en todo momento a multiplexación para que de este modo mientras se está esperando a que el retardo de 1 segundo se cumpla, vaya mostrando el valor del temporizador actual.

Si la función no retorna ningún valor se pone la directiva VOID antes del nombre de la función indicando que no retorna ningún valor.

Si te sirvió de algo la información de la pagina, podrías invitarme a un café y ayudarme a seguir manteniendo en pie el sitio WEB. Solo cuesta $2USD y me ayudarías enormemente a seguir con mi trabajo. Muchas Gracias por tu visita.




Para Brasil

Se você está em Brasil pode utilizar o botão que está aqui em baixo, para realizar o convite em Reais.




Esta entrada tiene 3 comentarios

  1. me explico mejor disculpe que le responda hasta ahorita, ya vi el video e intento realizar una comvinacion de los 2 del primero el final con el contacto y del segundo pero no hallo como realizar el multiplexado con el pulsador

    osea me explico estoy haciendo un contador sumador y que resta con una pantalla led de 2 digitos necesito que cada vez que entra alguien(que se oprime el pulsador 1) suba un digito, y cuando salga alguien (que se oprime el pulsador 2) reste un digito, cuando se oprime el pulsador 3 resetee el conteo

    tambien hice este
    pero este solo funciona con un digito, no entendi bien lo del multiplexaje a la final hablas de dos formulas pero no se como funcionan, lo que entendi es que mostrar es la que muestra los dos digitos, y la conrec da un retardo que no entendi, pero para colocarle un pulsador para que este suba un solo digito tira error e invierte como se ve la pantalla(osea los leds que deberian prender permanecen apagados y los que estan apagados permanecen prendidos)

    #INCLUDE
    #FUSES XT,NOLVP,NOWDT,PUT
    #USE DELAY(CLOCK=4000000)
    Byte CONST display[10]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
    #DEFINE SWENTRADA PORTC,0
    #DEFINE SWSALIDA PORTC,1
    #DEFINE SWRESET PORTC,3
    #DEFINE LEDENTRADA PORTD,0
    #DEFINE LEDSALIDA PORTD,1
    #DEFINE TUNI PORTA,0 //Definición de variables
    #DEFINE TDEC PORTA,1 //Definición de variables
    #BYTE PORTA = 5
    #BYTE PORTB = 6
    #BYTE PORTC = 7
    #BYTE PORTD = 8

    INT CONT; //Declarar la variable CONT como
    //un entero, es decir de 8 bits
    LONG CONTRET; //Declarar la variable CONTRET
    //como long, es decir de 16 bits

    VOID MOSTRAR( ) //Rutina mostrar
    {
    INT UNI,DEC; //Declarar las variables UNI, DEC
    //como un entero, es decir de 8bits
    DEC=CONT/10;
    UNI=CONT%10;
    PORTB=(DISPLAY[UNI]); //Muestra lo que hay en unidades
    //en el display
    BIT_SET (TUNI); //Enciende el display de unidades
    DELAY_MS(1); //Retardo de 1 milisegundos
    BIT_CLEAR(TUNI); //Apaga el display de unidades
    PORTB=(DISPLAY[DEC]); //Muestra lo que hay en unidades
    //en el display
    BIT_SET (TDEC); //Enciende el display de decenas
    DELAY_MS(1); //Retardo de 1 milisegundos
    BIT_CLEAR(TDEC); //Apaga el display de decenas

    }

    VOID RET1SEG() //Rutina RET1SEG
    {
    CONTRET=500; //Cargue con 500 la variable CONTRET
    WHILE (CONTRET>0) //Mientras que la variable CONTRET sea mayor que cero
    {
    MOSTRAR(); //Llamar la rutina MOSTRAR
    CONTRET–; // Decremente la variable CONTRET
    }
    }

    void main (){
    SET_TRIS_A(0B00000000);
    SET_TRIS_B(0B00000000);
    SET_TRIS_C(0B11111111);
    SET_TRIS_D(0B00000000);
    CONT=0;
    while(TRUE) // Haga por siempre
    {
    if(BIT_TEST(SWENTRADA)) // Si SW esta activado
    {
    BIT_SET(LEDENTRADA); // Active el led
    DELAY_MS(200);
    while(BIT_TEST(SWENTRADA));
    CONT++;
    PORTB= display[CONT];
    if (CONT==10)
    {
    CONT=0;
    }
    else // Sino, es decir si SW esta desactivado
    {
    BIT_CLEAR(LEDENTRADA); // Apagar led
    }
    }

    if(BIT_TEST(SWSALIDA)) // Si SW esta activado
    {
    BIT_SET(LEDSALIDA); // Active el led
    DELAY_MS(200);
    while(BIT_TEST(SWENTRADA));
    CONT–;
    PORTB= display[CONT];
    if (CONT<0)
    {
    CONT=0;
    }
    }
    else // Sino, es decir si SW esta desactivado
    {
    BIT_CLEAR(LEDSALIDA); // Apagar led
    }

    }
    }

    estoy confundido si puedes dar una pequeña explicacion de como se usaria un pulsador como tal para que este sume 1 digito

    1. Cristopher es lo siguiente: Si quieres usar un pulsador para hacer el conteo, debes saber que este es un dispositivo mecanico el cual genera un rebote (Un ruido) que puede generar conflicto. En esta entrada te enseño como colocar pulsadores en el PIC y justamente la misma entrada explica un poco lo que quieres hacer solo que con un único Display: Display con Pulsador (Click aca).

      Aqui puedes ver todas las entradas que hay en la pagina de microcontroladores (Click Aca)

      Ahora como vas a usar 2 displays, debes hacer una multiplexación. Lo que quiere decir que vas a conectar los 2 displays en un UNICO puerto, (El Puerto B) por ejemplo y con dos transistores los vas a encender y apagar. Entonces por el puerto B mandas el numero de las unidades osea que con el transistor unicamente enciendes el display de las unidades, luego apagas este display y mandas por el puerto B el numero de las decenas y con el otro transistor prendes el display de las decenas. La clave es que como prendes y apagas los displays a una velocidad muy elevada, el ojo humano no lo percibe y piensa que ve los dos displays encendidos al tiempo.

      En resumen, basicamente debes juntar el código de la entrada del pulsador y la entrada de la multiplexación. Cuando presiones los botones debes ir almacenando la cuenta en una variable que va a ser tu contador y luego debes mostrarla en el display, con la funcion MOSTRAR();

      Saludos

  2. Muy bueno migo

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Cerrar menú