#define F_CPU 1000000UL
#include <avr/io.h>
#include <avr/interrupt.h>

int dig = 0;

int digs[10];

void init_io(void);
void init_int(void);

void init_io(void)
{
  DDRB = (1<< PB0)|(1<< PB1)|(1<< PB2)|(1<< PB3)|(1<< PB4)|(1<< PB5)|(1<< PB6);
  PORTB=~digs[dig];
  DDRD = (0 << PD2)|(0 << PD6);
}

void init_int(void)
{
  GIMSK=(1<<INT0);
  MCUCR=(1<<ISC00)|(1<<ISC01);  
  sei();
}

SIGNAL(INT0_vect) {   
  cli();
  if((PIND & (1 << PD6)) == 0){
    dig++;
    if(dig>9){
      dig=0;
    }
  }else{
    dig--;
    if(dig<0){
      dig=9;
    }
  }
  PORTB=~digs[dig];
  sei();
}

int main(void)
{
  init_io();
  init_int();

  digs[0] = 0x77;
  digs[1] = 0x14;
  digs[2] = 0x3B;
  digs[3] = 0x3E;
  digs[4] = 0x5C;
  digs[5] = 0x6E;
  digs[6] = 0x6F;
  digs[7] = 0x34;
  digs[8] = 0xFF;
  digs[9] = 0x7E;

  while(1){};
}