Para convertir de binari a bcd les dejo este ejemplo basico. Todos estos emplillos han sido simulados con exito en PROTEUS 7.4 y Virtual BreadBoard, ademas de probados fisicamente.
/*********************************************************************
* *
* Compilador para la tarjeta basada en microcontrolador Atmega328P *
* ARDUINO UNO *
* *
* NOMBRE : bin2bcd.c *
* OBJETIVO: Diseñar un contador de 0 - 59 con salida por los pines *
* 0 - 6 de la tarjeta ARDUINO UNO. La salida se mostrara *
* en display de 7 segmentos. El tiempo por cuenta sera de *
* 500 ms aprox. *
* *
* AUTOR : agauss *
* *
*********************************************************************/
int dato[] = {0,1,2,3,4,5,6};
void setup()
{
int i;
for(i=0;i<7;i++)
pinMode(dato[i],OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
}
void loop()
{
int i,j;
int udato,cdato,xdato;
for(cdato=0;cdato<6;cdato++)
{
for(udato=0;udato<10;udato++)
{
for(j=0;j<20;j++)
{
xdato = bin2bcd(cdato);
for(i=0;i<7;i++)
{
if(((xdato>>i)&1)==1)
digitalWrite(dato[i],HIGH);
else
digitalWrite(dato[i],LOW);
}
digitalWrite(7,HIGH);
delay(10);
digitalWrite(7,LOW);
xdato = bin2bcd(udato);
for(i=0;i<7;i++)
{
if(((xdato>>i)&1)==1)
digitalWrite(dato[i],HIGH);
else
digitalWrite(dato[i],LOW);
}
digitalWrite(8,HIGH);
delay(10);
digitalWrite(8,LOW);
}
}
}
}
int bin2bcd(int xdato)
{
switch (xdato)
{
case 0:
{
xdato = 0x3F;
break;
}
case 1:
{
xdato = 0x06;
break;
}
case 2:
{
xdato = 0x5B;
break;
}
case 3:
{
xdato = 0x4F;
break;
}
case 4:
{
xdato = 0x66;
break;
}
case 5:
{
xdato = 0x6D;
break;
}
case 6:
{
xdato = 0x7D;
break;
}
case 7:
{
xdato = 0x07;
break;
}
case 8:
{
xdato = 0x7F;
break;
}
case 9:
{
xdato = 0x6F;
break;
}
default:
break;
}
return(xdato);
}
saludos...