Ejemplos básicos de PIC en C - Decodificador de Binario a Decimal

Ejemplos básicos de PIC en C - Decodificador de Binario a Decimal

Biblioman

3/20/20093 min read

Código

/*Decodificador de binario a decimal, mostrando los resultados en un display de siete segmentos.
autor: biblioman

www.aquihayapuntes.com*/

# include <16F84A.h>
# use delay(clock=4000000)
# fuses XT,NOWDT
# byte puerto_b=06 //Dirección del puerto B
# byte puerto_a=05 //Dirección del puerto A

void main() {

set_tris_b(0x00); //Configuro la puerta B como salida y RA0, RA1, RA2, RA3 y RA4 como
set_tris_a(0x1F); //entradas aunque por defecto ya están configuradas como entradas

puerto_b=0; //inicializo todos los bits de la puerta B a cero

while(true) //bucle infinito
{
if (input(PIN_A0)==false && input(PIN_A1)==false&& input(PIN_A2)==false)
{
puerto_b=0b0111111; //configura los bits de la puerta B
}
if (input(PIN_A0)==true && input(PIN_A1)==false&& input(PIN_A2)==false)
{
puerto_b=0b00000110;
}
if (input(PIN_A0)==false && input(PIN_A1)==true&& input(PIN_A2)==false)
{
puerto_b=0b01011011;
}
if (input(PIN_A0)==true && input(PIN_A1)==true&& input(PIN_A2)==false)
{
puerto_b=0b01001111;
}
if (input(PIN_A0)==false && input(PIN_A1)==false&& input(PIN_A2)==true)
{
puerto_b=0b01100110;
}
if (input(PIN_A0)==true && input(PIN_A1)==false&& input(PIN_A2)==true)
{
puerto_b=0b01101101;
}
if (input(PIN_A0)==false && input(PIN_A1)==true&& input(PIN_A2)==true)
{
puerto_b=0b01011110;
}
if (input(PIN_A0)==true && input(PIN_A1)==true&& input(PIN_A2)==true)
{
puerto_b=0b00000111;
}
}
}

CIRCUITO:

Comentario:

Circuito sencillo que hace las funciones de un decodificador de binario a decimal de un dígito y muestra los resultados en un display de siete segmentos de cátodo común, lo que quiere decir que el PIC debe proporcionar valores positivos en su salida de la puerta B.

La relación entre las patillas del display y el valor de las letras de cada segmento es la siguiente:

luego se puede hacer una pequeña tabla de verdad donde se muestre por cada combinación en la entrada que patillas del PIC se tienen que activar:

La lógica del programa lo único que hace es chequear el estado de las entradas, en este caso representadas por los interruptores A0, A1 y A2 y activar el conjunto de patillas correspondientes en el PIC que alimentarán los ánodos del display.

Código más optimizado:

/*-------------------------------------------------------------------*\
| DECODIFICAOR BINARIO A DECIMAL. Utilizando switch()|
| Autor: biblioman www.aquihayapuntes.com |
\*-------------------------------------------------------------------*/
#include <16F84A.h>
#use delay(clock=4000000)
#fuses XT,NOWDT
#byte puerto_b=06 //Dirección del puerto B
#byte puerto_a=05 //Dirección del puerto A

void main()
{
int entrada;
set_tris_b(0x00); //Configuro la puerta B como salida
set_tris_a(0x1F); //Configuro RA0, RA1, RA2, RA3 y RA4 como
//entradas aunque por defecto ya están
//configuradas como entradas

puerto_b=0; //inicializo todos los bits de la puerta B a cero

while(true) //bucle infinito
{
entrada= puerto_a;//asigno a la variable entera entrada el valor
//actual del puerto A
switch(entrada){

case 0:
puerto_b=0b0111111;
break;
case 1:
puerto_b=0b00000110;
break;
case 2:
puerto_b=0b01011011;
break;
case 3:
puerto_b=0b01001111;
break;
case 4:
puerto_b=0b01100110;
break;
case 5:
puerto_b=0b01101101;
break;
case 6:
puerto_b=0b01111101;
break;
case 7:
puerto_b=0b00000111;
break;
}
}
}