///////////////////////////////////////////////////////////////////////////////
// //
// Driver file for Display7segmentos multiplexado por 4 //
// //
// Function : ToDisplay(valor); //
// Return : none //
// //
// By Alberto Andres Robledo Sánchez, Alumno: UTN-FRRE //
// www.chacoelecnor.com.ar //
// //
// CONEXIÓN //
// A->RC6,B->RC5,C->RC4,D->RC3,E->RC2,F->RC1,G->RC0 , DP->RC7 //
// TRANSITOR1->RB1, TRANS2->RB2, TRANS3->RB3 , TRANS4->RB4 //
///////////////////////////////////////////////////////////////////////////////
#use fast_io(B)
#use fast_io(C)
#DEFINE Q1 PIN_B1 // transistor 1
#DEFINE Q2 PIN_B2 // transistor 2
#DEFINE Q3 PIN_B3 // transistor 3
#DEFINE Q4 PIN_B4 // transistor 4
#DEFINE punto PIN_C7 // punto decimal
#BYTE salida=0x07 // puerto C
//************************************************************************************
struct digitos_separados { // variables en bcd de unidad,decena,centena
int unidad, decena, centena, cifraco;
} digito;
//************************************************************************************
struct mis_datos { // variables de datos de entrada y salida
int16 dato1, dato2, resultado;
} numeros;
//************************************************************************************
void separar_digitos(){ // separa resultado en unidad, decena y centena
int16 temp;
digito.unidad=0;
digito.decena=0;
digito.centena=0;
temp=numeros.resultado;
while(temp>=100){
temp-=100;
digito.centena++;
}
while(temp>=10){
temp-=10;
digito.decena++;
}
digito.unidad=temp;
}
//************************************************************************************
void mostrar(){ // multiplexa en tres display 7-seg anodo común
int const bcd_7seg[10]= {0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x73};
int contador;
output_low(Q1);
output_low(Q2);
output_low(Q3);
//output_low(punto);
for(contador=0;contador<11;contador++){
salida=bcd_7seg[digito.unidad]; // muestra unidad
output_high(Q1);
output_high(punto);
delay_ms(5);
output_low(Q1);
output_low(punto);
delay_cycles(4);
salida=bcd_7seg[digito.decena]; // muestra decena
output_high(Q2);
delay_ms(5);
output_low(Q2);
delay_cycles(4);
salida=bcd_7seg[digito.centena]; // muestra centena
output_high(Q3);
delay_ms(5);
output_low(Q3);
delay_cycles(4);
salida=bcd_7seg[digito.cifraco]; // muestra cifraco
output_high(Q4);
delay_ms(5);
output_low(Q4);
delay_cycles(4);
}
}
void ToDisplay (float value)
{
int16 a;
float cifra;
a=(int16)value;
cifra=value-(float)a;
digito.cifraco=(int)((10.0*cifra)+0.5);
set_tris_b(0x0); // puertob=salida
set_tris_c(0x0); // puertoc=salida
numeros.resultado=(int16)(value);
separar_digitos();
mostrar();
}