Laboratorio 16: Proyecto Pastillero - Parte B

Laboratorio 05: Manejo de Un Display de 7 Segmentos Multiplexado

CURSO DE PROGRAMACIÓN DE MICROCONTROLADORES PIC
PARTE A: Programación de Microcontroladores PIC de MICROCHIP.
MANEJO DE UN DISPLAY DE 7 SEGMENTOS MULTIPLEXADO
 
CAPACIDAD TERMINAL
  • Utilizar al microcontrolador en aplicaciones de control electrónico.
  • Desarrollar y ejecutar programas en un microcontrolador PIC.
  • Programar y configurar interfaces básicas del microcontrolador.
COMPETENCIA ESPECIFICA DE LA SESION
  • Conocer el Display de 7 segmentos y su funcionamiento.
  • Conocer las técnicas de multiplexación.
CONTENIDOS A TRATAR
  • Display 7 segmentos.
  • Multiplexación de datos.
RESULTADOS
  • Diseñan y optimizan sistemas y procesos para cumplir con las condiciones establecidas y gestionando adecuadamente los recursos materiales y humanos.
MATERIALES Y EQUIPO
  • CCS Compiler instalado.
  • Entrenador de PICS
  • PIC16F877A
  • Guía de Laboratorio. El trabajo se desarrolla de manera GRUPAL.
  • PC con Software de simulación.
DIAGRAMA ESQUEMÁTICO:


CÓDIGO DE PROGRAMACIÓN EN PIC C COMPILER

// NOMBRE: JHOJAN ANDRES LERMA ACHOMA
#INCLUDE <16F877A.H>
#USE DELAY(CLOCK=4000000) //Cristal externo 4MHz
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP

Byte CONST display[10]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
#BYTE PORTB= 6
#BYTE PORTC= 7
#DEFINE TUNI PORTC,0 //Definición de variables
#DEFINE TDEC PORTC,1 //Definición de variables

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_B (0); //El puerto B esta configurado como salida
   SET_TRIS_C (0); // El puerto C esta configurado como salida
   CONT = 0; //la variable CONT se inicializa con cero
   WHILE (TRUE) //Haga por siempre
   {
      CONT = 0;

      WHILE (CONT < 100) //mientras la variable CONT es menor que 100
      {
         RET1SEG (); //Llama la rutina RET1SEG
         CONT++; //Incrementa la variable CONT
      }
   }
}

VIDEO EXPLICATIVO:


RETO DE LA SEMANA:

Agregar dos pulsadores, uno para incrementar cuenta y otro para decrementar cuenta:

Tip: Utilizar la función IF en lugar de WHILE


OBSERVACIONES
  • No es necesario modificar la parte de la multiplexación para lograr el reto de la semana. 
  • La multiplexación se entiende mejor al realizar la simulación en el software Proteus. 
  • Para realizar un ciclo continuo en el contador se uso un condicional if.
  • Gracias al uso del condicional for pude colocar cualquier número como inicio de la cuenta que este dentro del rango de 0 a 99.
  • Se puede visualizar el código cuando se le esta dando uso dentro del software Proteus.
CONCLUSIONES
  • Hay varias formas de realizar diversas acciones al programar con el software CCS C Compiler.
  • Logré realizar todo lo pedido en el laboratorio con éxito.
  • Entendí con mayor profundidad de lo que es capaz el PIC 16F877A.
  • La multiplexación consiste en encender y apagar los displays a una alta velocidad para dar la ilusión de que todos están encendidos al mismo tiempo.

Comentarios