PICELECTRONICA
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

Manejo del Display de 7 Segmentos en CCS

Ir abajo

Manejo del Display de 7 Segmentos en CCS Empty Manejo del Display de 7 Segmentos en CCS

Mensaje  Somacruz Mar Abr 24, 2012 11:01 pm

Al usar PIC´s tarde o temprano nos encontramos con la necesidad de contar o medir ciertas condiciones, una forma habitual y economica de mostrar esos resultados es por medio de displays de 7 segmentos, en esta ocasion muestro la utilizacion de uno de estos dispositivos mostrando el ejemplo de un contador sencillo, a continuacion el diagrama:

Manejo del Display de 7 Segmentos en CCS Iv47GfNNbSite

El codigo:

Código:
//Contador 0 a 9
//Veremos el uso de un contador basico del 0 al 9
// y por primera vez empezaremos a usar operadores
//PIC: 16f628
//Compilador CCS
//Autor:Soma
///////////////////////////////////////////////////
//
//Forma de conectar los pines al Display de 7 seg
//
//PIN_B0--a
//PIN_B1--b
//PIN_B2--c
//PIN_B3--d
//PIN_B4--e
//PIN_B5--f
//PIN_B6--g
////////////////////////////////////////////////////


#include <16f628a.h>            //PIC a utilizar         
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP//Ordenes para el compilador
#use delay (clock=4000000)//Fosc=4Mhz
/////////////////////
//Programa Principal
/////////////////////
void main(void)
{
char i=0;   //contador para tabla 7 seg
int tab7seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};//7seg hex 0-9

do{          //bucle...
   output_b(tab7seg[i]);//muestra por portb digito 7 segmentos
   delay_ms(1000);      
i++;  //incremento contador para visualizar siguiente digito
if(i>9)  //¿ya se ha mostrado el digito 9?
{
i=0;//SI -> vuelve a empezar(digito 0)
}                                       
}while(TRUE);//Bucle infinito         
}


Empezamos con char i=0; esta variable empezara con un valor de 0, este sera nuestro contador Very Happy

int tab7seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67}; en la variable int "guardamos" los numeros q se mostraran en nuestro digito, estos a su vez estan ingresados en forma "hexadecimal"

output_b(tab7seg[i]) Mostramos por el PORTB la tabla de 7 segmentos

i++; incremento en la variable llamada "i"

if(i>9)
i=0; Esto es un sentencia de control, establece una condicion si es cierta se continua con el codigo; i es mayor que 9?? si??, entonces i=0 , i vuelve a tener el valor de 0

Espero que haya sido entendible saludos Smile
Somacruz
Somacruz
Administrador
Administrador

Mensajes : 23
Fecha de inscripción : 20/04/2012
Edad : 41

http://solopic.wordpress.com

Volver arriba Ir abajo

Manejo del Display de 7 Segmentos en CCS Empty Contador BCD con boton

Mensaje  Somacruz Jue Abr 26, 2012 12:26 am

Este ejemplo es parecido al anterior solo que en este caso "guardaremos" en la variable int los numeros en formato "binario" que corresponden del 0 al 9 por lo cual ahora solo ocuparemos 4 terminales del PORTB del PIC, esta configuracion es ventajosa ya que nos ahorra muchos pines los cuales podemos ocupar en botones u otra cosa, en RA0 he colocado un boton del tipo push y por medio de codigo generamos el antirebote aqui el diagrama:

Manejo del Display de 7 Segmentos en CCS Ibw2vEyujmThcT

Aqui va el codigo:
Código:
/////////////////////////////////////////////////////
//Contador BCD de 0 a 9 con boton para incremento
//PIC: 16f628a
//Compilador CCS
//Autor Soma
//25/04/2012
////////////////////////////////////////////////////
// Conexiones:
//A0 -  Push           
//B0 - a
//B1 - b
//B2 - c
//B3 - d
////////////////////////////////////////////////////
//BCD:
//d c b a  Numero
//0 0 0 0  -  0
//0 0 0 1  -  1
//0 0 1 0  -  2
//0 0 1 1  -  3
//0 1 0 0  -  4
//0 1 0 1  -  5
//0 1 1 0  -  6
//0 1 1 1  -  7
//1 0 0 0  -  8
//1 0 0 1  -  9
//////////////////////////////////////////////////

#include <16f628a.h>                  
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      
#use delay (clock=4000000)//Fosc=4Mhz

//////////////////////////      
//Programa Principal
//////////////////////////
void main(void)
{
char i=0;   //Contador
int tabBCD[10]={0b0000,0b0001,0b0010,0b0011,0b0100,0b0101,0b0110,0b0111,0b1000,0b1001};   //Numeros Binarios del 0 al 9
      
               
   disable_interrupts(GLOBAL);//todas las interrupciones desactivadas
   
output_b(tabBCD[i]);   

for(;;){//Bucle Infinito
   if(!input(PIN_A0))//Se pulso boton?
   {
   delay_ms(180);//SI--Retardo para rebotes
   i++;   //Incremento en la variable i
   if(i>9)      //Ya se ha mostrado el digito 9?
   i=0;         //SI, se inicia a 0 otra vez
   output_b(tabBCD[i]); //muestra por portb numeros binarios
}         
}      
}



Nota: Colocado un decodificador BCD 7448 y corregido el diagrama para q sea mas entendible, el delay del antirrebote lo subi a 180ms, en la practica me dio mejores resultados saludos Very Happy


Última edición por Somacruz el Dom Abr 29, 2012 11:53 pm, editado 1 vez (Razón : Corregido codigo)
Somacruz
Somacruz
Administrador
Administrador

Mensajes : 23
Fecha de inscripción : 20/04/2012
Edad : 41

http://solopic.wordpress.com

Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.