Sei sulla pagina 1di 6

Contador de 0-99 con 2 Displays de 7 Segmentos

Contador de 0-99 con 2 displays de 7 Segmentos


Descripcin
El programa incrementara el valor de una variable, la cual se mostrara a travs de un par de displays de 7 segmentos, los cuales se controlaran de manera multiplexada, uno a la vez, a una velocidad que el ojo no alcance a detectar el cambio y perciba ambos displays encendidos a la vez.

Diagrama Esquemtico

Materiales
2 Displays 7 segmentos 7 Resistencias de 220 Ohms 2 Resistencias de 10 kOhms 2 Transistores de pequea seal 1 Microcontrolador ATmega8 Programador USBasp V3.0

Introduccin
Display 7 segmentos
El display de 7 segmentos es un dispositivo que nos sirve para mostrar nmeros o caracteres, los cuales se visualizan al activar o desactivar los LEDs que este tiene, esto se hace conectando el comn a la tierra y voltaje en el segmento que deseemos activar (en caso de ser ctodo comn).

Para poder representar los nmeros con el display, es necesario generar la tabla que nos dar el valor que ser necesario para generar el numero deseado.

Num PB6/A PB5/B PB4/C PB3/D PB2/E PB1/F PB0/G HEX


0 1 2 3 4 5 6 7 8 9 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 0 1 1 0 1 1 1 0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1 0 1 1 0 0 1 1 1 1 1 0 1 1 7E 30 6D 79 33 5B 5F 70 7F 7B

Por ejemplo, se puede observar que para hacer un cero se busca que enciendan todos los segmentos menos el g (pin 10 del display el cual va conectado al PB0 del Micro), con esa informacin del numero, tendremos el valor que tomara el puerto para mostrar el numero deseado a travs del display. Para controlar dos displays a la vez, se har uso de un par de transistores, en este caso conmutaran entre uno y otro, mientras los displays estn conectados al mismo puerto del micro. Primero se mostrara las decenas mientras se desactiva el display de las unidades y despus de una fraccin de tiempo, se activa el de la unidad y se desactiva el de las decenas y el micro manda el valor de la

unidad. Esto se repite determinadas veces a alta velocidad para dar la impresin de que siempre se encuentran prendidos los dos displays. Para activar y desactivar los displays se les pondr un transistor a modo de swhitch el cual se conectara del colector al comn del display, y este controlara el display activndolo o desactivndolo desde la base.

Para este caso el transistor se est usando como un swhitch, eso es que se est trabajando en las regiones de corte y saturacin, lo que nos dice que al pasar una corriente en la base, el transistor se comporta como un interruptor que se abre o se cierra.

Programa en C
#include <avr/io.h> #include <util/delay.h> int contador=0; int unidades, decenas,i; int numeros[10]={0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B, 0x5F, 0x70, 0x7F, 0x7B}; int mostrar(int numero){ unidades=numero%10; decenas =numero/10; for(i=0;i<20;i++){ PORTD=0x02; PORTB=numeros[unidades]; _delay_ms(5); PORTD=0x01; PORTB=numeros[decenas]; _delay_ms(5); } return 0; } //Se activa el transistor de las unidades //Se asigna al PORTB la variable numero en la posicin unidades

//Se declara un vector de longitud 10 que contenga los //valores obtenidos de la tabla, acomodados en orden //Segn su posicin del 0 al 9

//Creamos una funcin de tipo entero //Al dividir un valor entre 10 el residuo nos da las unidades //Se obtiene la decena dividiendo el numero entre 10

//Se activa el transistor de las decenas //Se asigna al PORTB la variable numero en la posicin decenas

int main(void){ DDRB=0xFF; DDRD=0x03; while(1){

//Inicio del programa

mostrar(contador); contador++; if (contador > 99) contador=0; } }

//Llamar a la funcin mostrar, mandando la variable contador //Incrementar el valor de la variable contador //Si llega a 99, que tome el valor de 0

Detalles del programa


int numeros[10]={0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B, 0x5F, 0x70, 0x7F, 0x7B}; Aqu se est declarando un vector de tipo entero, el cual le indicamos la longitud del mismo, el cual tiene 10 datos, se acomodaron conforme a que la posicin del vector corresponde al nmero que representa ese valor en el display, en el caso del 3 el cual es el 0x79 (previamente obtenido en la tabla), podemos ver que se encuentra en la tercera posicin. int mostrar(int numero){ Una funcin se declara como "tipo de dato" "nombre de la funcin" ( "tipo de dato" "nombre de entrada"), en este caso la funcin obtendr la unidad y la decena de cualquier numero entre 0-99 y mandara el dato para mostrarlo en el display. unidades=numero%10; decenas =numero/10; Operacin para obtener separar un numero entre su unidad y decena. Por ejemplo el 45, si lo dividimos entre 10, esto es 45/10 = 4 (recuerde que como son variables de tipo entero es solo 4 y no 4.5), y con el operador mod (de modulo) "%" el resultado es 45%10 = 5. Gracias a esto tenemos en una variable el numero 4 y en otra el numero 5.

PORTB=numeros[unidades]; Al puerto B se le asigna el valor que tenga el vector nmeros en la posicin unidades, si tomamos el ejemplo anterior, unidades vala 5, si vamos al vector nmeros y vemos la quinta posicin, veremos un 0x5B la cual corresponde al nmero 5 en la tabla, esto es, que al mostrarlo por el puerto B aparecer el 5 en el display. mostrar(contador); Aqu se manda a llamar a la funcin mostrar, a la cual se le manda el valor de la variable contador, el cual puede ser un numero del 0-99, al llamar la funcin, esta ejecutara todas las instrucciones que se encuentren dentro de la misma, al terminar regresara y continuara con la siguiente instruccin.

Potrebbero piacerti anche