int leds_unidad [10] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18};
int uni = 0,dec = 0, contador = 0;
int botonesanteriores = 0; // Variable usada para mantener el estado de los botones de la vuelta del while anterior
int botonesactual; // Variable usada para guardar el valor de los botones presionados en ese ciclo.
void main(void)
{
// Aca configuracion de pines/oscilador/etc
OSCCONbits.SCS = 11;
OSCCONbits.IRCF = 110;
ADCON1 = 0xF;
TRISA = 0x3;
TRISB = 0;
while(1)
{
// Multiplexado
if(PORTAbits.RA2)
{
// Aca entra si estaban activas las unidades en el anterior paso
PORTAbits.RA2 = 0; // Comun unidades las apago
PORTAbits.RA3 = 1; // Comun decenas las activo
PORTB = leds_unidad[dec];
}
else
{
// Aca entra si estaban activas las decenas en el anterior paso
PORTAbits.RA2 = 1; // Comun unidades las apago
PORTAbits.RA3 = 0; // Comun decenas las activo
PORTB = leds_unidad[uni];
}
// Botones
botonesactual = PORTA & 0x3; // Solo RA0 yRA1
if ( botonesanteriores != botonesactual)
{
//Algo cambio, entonces reviso
if(botonesactual == 0x01) // Solo RA0 presionado
{
contador++;
if(contador > 99) contador = 99;
}
if(botonesactual == 0x02) // Solo RA1 presionado
{
if(contador != 0) contador--;
contador--;
}
// Actualizo botones anteriores para la proxima vuelta
botonesanteriores = botonesactual;
// Actualizo uni y dec
dec = contador/10;
uni = contador%10;
}
// Delay de cada vuelta del loop
__delay_ms(20);
}
}