Manejo del Display de 7 Segmentos en CCS
PICELECTRONICA :: Inicio :: Microcontroladores :: Microchip :: CCS
Página 1 de 1.
Manejo del Display de 7 Segmentos en CCS
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:
El codigo:
Empezamos con char i=0; esta variable empezara con un valor de 0, este sera nuestro contador
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
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
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
Contador BCD con boton
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:
Aqui va el codigo:
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
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
Última edición por Somacruz el Dom Abr 29, 2012 11:53 pm, editado 1 vez (Razón : Corregido codigo)
Temas similares
» Manejo de LCD 20x4
» MANEJO DEL C.I. 74HC164 Y DISPLAY
» PIC Y DISPLAY A.C.-MANEJO BASICO
» Manejo de Leds en CCS
» Manejo de LCD 16x2
» MANEJO DEL C.I. 74HC164 Y DISPLAY
» PIC Y DISPLAY A.C.-MANEJO BASICO
» Manejo de Leds en CCS
» Manejo de LCD 16x2
PICELECTRONICA :: Inicio :: Microcontroladores :: Microchip :: CCS
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.