	#include <avr/io.h>
 	#include <avr/signal.h>
	#include <avr/interrupt.h>
    #include <avr/delay.h>

#define F_CPU 8000000UL; // кварц 8 MHz
unsigned long adc[4];
int fbin[4], fbin1;
volatile unsigned char k;
unsigned char s,d,o,n,digit_s,digit_d;
unsigned char digit[10] =
{
    0xFC, 0x60, 0xDA, 0xF2, 0x66,
	 0xB6,0xBE, 0xE0, 0xFE, 0xF6 
};  


ISR(TIMER0_OVF_vect) // прерывание по переполнению таймера Т0
{
TCCR0=0x00;
s=0;
d=0;
o=0;
//***************BCD*****************				
	fbin1=fbin[k];
	{
	fbin[k]=fbin[k]-100;
	while (fbin[k]>=0)
	{s++;
	 fbin[k]=fbin[k]-100;
	}
	fbin[k]=fbin[k]+100;
	

	fbin[k]=fbin[k]-10;
	while (fbin[k]>=0)
	{d++;
	 fbin[k]=fbin[k]-10;
	}
	fbin[k]=fbin[k]+10;
	

	fbin[k]=fbin[k]-1;
	while (fbin[k]>=0)
	{o++;
	 fbin[k]=fbin[k]-1;
	}
	fbin[k]=fbin[k]+1;
	} 
fbin[k]=fbin1;
//***********************************

DDRB=0b11110111;				// настройка портов D,В на вывод
DDRD=0xFF;
switch(k)// растановка точек после десятка и сотни и вывод номера канала на диод
	{
	case 0x00: PORTB=0b10000111;digit_s=digit[s]; digit_d=digit[d]; break;
	case 0x01: PORTB=0b01000111;digit_s=digit[s]; digit_d=digit[d]; break;
	case 0x02: PORTB=0b00100111;digit_s=digit[s]+0x01; digit_d=digit[d]; break;
	case 0x03: PORTB=0b00010111;digit_s=digit[s]; digit_d=digit[d]+0x01; break;
	default: break;
	}
	_delay_ms(100);
//************** 7 сегментник***************
	PORTB=0b00000110;
	PORTD=digit_s;
	_delay_ms(100);
	PORTB=0b00000101;
	PORTD=digit_d;
	_delay_ms(100);
	PORTB=0b00000011;
	PORTD=digit[o];
    _delay_ms(100);
//*******************************************
TCCR0=0x03;
}


ISR (ADC_vect)
{
adc[n]=ADCW;
switch(n) // преобразование согласно номера канала, переход к 0 каналу после 4-го
	{
	case 0x00: fbin[n]=adc[n]*1000/1024; n++; ADMUX=ADMUX+1; break;
	case 0x01: fbin[n]=adc[n]*1000/1024; n++; ADMUX=ADMUX+1; break;
	case 0x02: fbin[n]=adc[n]*100*5/1024;n++; ADMUX=ADMUX+1; break;
	case 0x03: fbin[n]=adc[n]*10*5*6/1024;n=0;ADMUX=0b01000000; break;
	default: break;
	}
ADCSRA=0xFF;
}


int main(void)
{
sei();
ADMUX=0b01000000;
TIMSK |= 1<<TOIE0;
TCCR0=0x03;
DDRD=0x00;
DDRB=0b11110111;	
ADCSRA=0xFF;
k=0;
n=0;
while (1)
{
		
if 		(((!(PINB & (1<<PB3))))); 			 //опрос кнопки		
{
      _delay_us(20);				
      if (((!(PINB & (1<<PB3)))))  k++;		//антибребезг
      else k=k ;
      }
      if  (k<4)  k=k;
     else k=0;
sei();
};
}

