MICROCONTROLADORES
LABORATORIO 03
Programación con Display de 7 Segmentos
- 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.
2. Competencia Específica de la Sesión
Entrenador de PICS
PIC16F877A
4. Fundamento Teórico
4.1 TIPOS DE VARIABLES
5.Desarrollo de tareas indicadas en el laboratorio
- Conocer el Display de 7 segmentos y su funcionamiento.
- Conocer las técnicas de multiplexación.
- Programar HMI para juego de encestar.

4.1 TIPOS DE VARIABLES
- NÚMEROS ENTEROS (INT)
- Las variables de tipo entero o int son aquellas que almacenan un número (ya sea positivo o negativo) no decimal. Debido a que cuando creamos una variable reservamos memoria para ella, cada tipo de variable reservará más o menos memoria para representar el dato que almacenarán. Dicho esto, en el caso de variables de tipo int sólo podemos almacenar números que estén dentro del rango -2^31 y 2^31 - 1. Si intentamos almacenar un número que esté fuera de ese rango nos dará un error de compilación o de ejecución.
- NÚMEROS ENTEROS GRANDES (LONG)
- Las variables de tipo entero grandes o long son aquellas que almacenan un número (ya sea positivo o negativo) no decimal. Las variables de tipo long almacenan números que están dentro del rango -2^63 y 2^63 - 1. Si intentamos almacenar un número que esté fuera de ese rango nos dará un error de compilación o de ejecución. Para representar que un número es de tipo long, añadimos una L al final del número
- NÚMEROS DECIMALES (DOUBLE Y FLOAT)
- Si en lugar de números enteros queremos almacenar números decimales, tenemos dos tipos:
- FLOAT: Las variables de tipo float o flotante son aquellos números en precisión simple de 32 bytes en el estándar IEEE 754. Para indicar que un número es de tipo flotante ponemos un punto para separar la parte entera del número de la parte decimal.
- DOUBLE: Las variables de tipo double o doble son aquellos números en precisión doble de 64 bytes en el estándar IEEE 754. Para indicar que un número es de tipo flotante ponemos un punto para separar la parte entera del número de la parte decimal.
- Si por algún motivo necesitamos especificar si un número es flotante o doble basta con añadir una letra f o d al final del número tal y como vemos en el siguiente código:
- double x = 3.2d;
- float y = 4.8f;
- Añadir que en caso de querer representar números grandes es mejor usar double en lugar de float ya que a la hora de operar con ellos puede producirse errores de aproximación y llevarnos a confusiones innecesarias. Su valor por defecto si no lo inicializamos es 0.0d para double y 0.0f para float. Existen dos tipos básicos más para representar números: short y byte. Estos tipos sólo almacenan números de tipo entero similar a como sucede con las variables de tipo int. No obstante, los rangos de valores que pueden almacenar son mucho más pequeños (byte: -128, 127 short: -32768, 32767) y sólo se suelen usar cuando la reserva de memoria tiene que estar muy controlada para el perfecto funcionamiento de un programa.
- SÍMBOLOS O CARACTERES (CHAR)
- Ya hemos hablado de los números, pero ¿qué sucede con las letras o símbolos? Podríamos usar variables de tipo int para almacenarlas, pero al hacer eso en lugar de guardar el símbolo como tal, se almacenaría su correspondiente valor en formato decimal en ASCII y tendríamos que manualmente interpretar dicho número para pasarlo a su correspondiente símbolo si quisiéramos por ejemplo imprimirlo por consola. Para evitar esto, tenemos las variables de tipo char :
- char a = 'a';
- char b = 'b';
- En este caso hemos creado dos variables de tipo char; una para el símbolo "a" y otra para el símbolo "b". Notar que para referirnos a un símbolo como tal, tenemos que rodearlo con comillas simples '‘. Su valor por defecto si no lo inicializamos es '\u0000'.
- CADENAS DE TEXTO (STRING)
- Hemos solucionado el problema de almacenar en memoria símbolos individuales. Supongamos que queremos trabajar con secuencias de símbolos o cadenas de texto. Con lo visto hasta ahora tendríamos que crear tantas variables de tipo char como letras tenga la cadena. Un ejemplo rápido, si quisiéramos representar el Quijote con variables char tendríamos un total aproximadamente de 2059005 letras en él contando las letras repetidas. Resulta inviable crear tantas variables de tipo char, ¿verdad? Sin ir tan lejos, para la palabra "perro" tendríamos que crear 5 variables. Para solucionar esto, Java nos facilita el trabajo al definir una clase llamada String la cual representa la secuencia o el vector de símbolos que componen una palabra, una frase, un párrafo, etc. Siguiendo el código del ejemplo:
- String perro = "perro";
- String gato = "gato";
- Perro y gato son variables de tipo String las cuales almacenan las cadenas "perro" y "gato" respectivamente. El trabajar así con los símbolos facilita mucho el manejo de cadenas. Su valor por defecto si no lo inicializamos es null . El valor null es el usado en Java para indicar que un Objeto no está inicializado y por tanto no se puede usar.
- CONSTANTES (FINAL)
- Supongamos que tenemos un tipo de dato el cual nunca y por ningún motivo cambiará su valor. Por ejemplo, el número PI (3.14159265358979323846…). Para indicar que una variable tomará siempre el mismo valor y no se podrá modificar, es decir, es constante usamos la palabra reservada final escribiéndola antes del tipo de la variable:
- final double NUMERO_PI = Math.PI; // 3.14
- final int CERO = 0;
- Si intentamos modificar el valor de una constante nos dará error de compilación. Nota: Por cuestiones de buena práctica, se suelen escribir las variables en minúscula y las constantes en mayúsculas. Si el nombre de la variable es compuesto, es decir, tiene más de una palabra, la primera letra de las siguientes palabras se escribe en mayúsculas. En el caso de las constantes, se escribe un guion bajo (_) entre palabra y palabra. Por ejemplo, NUMERO_PI para la constante y numero-cuentas para la variable.
- ARRAYS O VECTORES
- Los arrays o vectores son listas donde cada elemento es una variable de un tipo específico con su valor correspondiente. Los arrays no pueden almacenar tipos de variables distintos (realmente eso no es cierto, pero con lo explicado hasta la fecha hay que asumir que sí de modo que lo correcto sería decir "no deberían almacenar tipos de variables distintos"). Existen tres maneras a lo sumo de definir un array:
- String[] paises = {"España", "Italia", "Portugal"};
- String[] animales = new String[] {"perro", "vaca", "gato", "mono"};
- String[] objetos = new String[3];
- Se tiene un sistema con 2 pulsadores (D0, D1) de entrada y 3 displays de salida, además de un zumbador en el pin E1. Programe según lo siguiente:
- Se tiene la siguiente programación para lo indicado
- Al empezar el programa, se debe mostrar el número 500
- Al presionar D0, el número mostrado se debe incrementar en 5 unidades, además debe sonar un pitido.
- Al presionar D1, el número mostrado debe disminuir 5 unidades pero de 1 en 1 cada segundo.
- Si el número llega a ser mayor a 600, debe sonar 3 pitidos
- Cabe destacar que en la programación creada se introdujo que si nuestro dato era mayor a 600 entonces se debe emitir 3 pitidos por parte del buzzer, pero que en esta oportunidad será representado por el parpadeo de un LED.
7. OBSERVACIONES Y RECOMENDACIONES
OBSERVACIONES
- Se observó, que al realizar la respectiva simulación en el programa PROTEUS se tuvo que modificar el valor de el delay declarado al inicio de nuestra programación, esto se hizo con fines de poder tener una mejor apreciación de lo que se quiere mostrar.
- Se observó, que en la programación brindada por el docente ya estaba inscrito la función referente a la funcionalidad de un buzzer para emitir así pitidos según como se continúe o introduzca nuevas condiciones a la programación, cabe mencionar que el buzzer en la placa entrenadora se encontraba debajo de la pantalla LCD 2 x 16.
- Se observó, que debido al error que se obtenía al simular la placa entrenadora en nuestro software PROTEUS se optó por adecuar otro componente que nos puede hacer una representación similar por lo cual se eligió un LED.
- Se observó, que para lograr que al accionar nuestro pulsador con entrada D1 consiga descender 5 unidades pero de 1 en 1 cada segundo era necesario declarar una nueva variable que se utilizaría dentro de la función FOR.
- Se observó que al nosotros haber declarado como valor a superar 600 al presionar el pulsador D1 una vez que el valor ya es superado el descuento siempre va a empezar desde 600, se recalca que esto sucede solo si se pasa el valor establecido.
RECOMENDACIONES
- Se recomienda que para evitar tener el error más conocido en el software CCS C Compiler al crear una nueva carpeta copiemos la librería del pic a usar en nuestro caso es el PIC 16F877A.
- Para cuando se requiera ejecutar diferentes acciones como en el caso de nuestro pulsador que tenía que reducir 5 unidades pero de 1 en 1 cada segundo se recomienda usar la función FOR.
- Se recomienda que para poder tener nuestro dato a mostrar según la programación de forma estática o permanente en el software PROTEUS, separar cada uno de los display y seguir la misma lógica de conexión solo que en este caso será para cada uno que se utilice.
8. BIBLIOGRAFÍA
- Marin, Francisco (2007) Diseño basado en microcontroladores. Málaga: Universidad de Málaga. (004.16/M26D)
- Pereira, Fabio (2007) Microcontroladores PIC. Sao Paulo:s.n. (005.13/P43)
- José María Angulo Usátegui [y otros]. (2007) Electrónica digital y microprogramable .Madrid: Thomson. (621.381/A37/I)
9. INTEGRANTE
Condori Ortíz, Daniel Agustín C5 - A






