#include <16F877a.h>
#fuses XT,NOWDT,NOPUT,NOBROWNOUT,NOLVP,NOWRT
#use DELAY(CLOCK=20M)
#use fast_io(b)
#use fast_io(d)
int contador = 0;
void main()
{
set_tris_b(0xff);
set_tris_d(0x00);
output_d(0x00);
while(1)
{
if (input(pin_b0) == 1) //pulsante ha sido presionado
{
while ((input(pin_b0) == 1)); // espero a que el usuario deje de presionar el pulsante
switch (contador)
{
case 0: output_d(0b00000011); break;
case 1: output_d(0b00000100); break;
case 2: output_d(0b00001001); break;
case 3: output_d(0b00010000); break;
case 4: output_d(0b00100001); break;
case 5: output_d(0b01000000); break;
default:output_d(0b10000001); break;
}
contador++;
if (contador > 0x06) contador = 0x00;
}
}
}
void toggle()
{
if (input(pin_b0) == 1)
{
while (input(pin_b0) == 1)
delay_ms(10);
output_toggle(pin_d0);
}
}

img 2.png(167.25 kB, 1610x963 - visto 262 veces) 
img 2.png(167.25 kB, 1610x963 - visto 262 veces) si te fijas, al llegar a D7, D0 estan encendidos. pero al volver a empezar, cuando D1 se enciende, D0 tendria que estar apagado, al ser impar.