#include <tiny2313.h>
#include <delay.h>

int sec,min,hour;
unsigned char cur_dig=0;

#define digit1 PORTD.0      /*Час*/
#define digit2 PORTD.1      /*мин*/
#define digit3 PORTD.2      /*сек*/

interrupt [TIM0_OVF] void timer0_ovf_isr(void){
  TCNT0=0x00;
  PORTB=0xFF;
  switch (cur_dig){
    case 0:{digit1=0; digit2=1; digit3=1;PORTB=~hour; break;};
    case 1:{digit1=1; digit2=0; digit3=1;PORTB=~min;  break;};
    case 2:{digit1=1; digit2=1; digit3=0;PORTB=~sec;  break;};
  }
  if(++cur_dig==3){cur_dig=0;}
}

interrupt [TIM1_OVF] void timer1_ovf_isr(void) {
  if(++sec==60){
    sec=0;
    if(++min==60){
      min=0;
      if(++hour==24){
       hour=0;
      }
    }
  }
}


void main(void)
{
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

PORTA=0x07;
DDRA=0x00;

PORTB=0x00;
DDRB=0xFF;

PORTD=0x60;
DDRD=0x17;

TCCR0A=0x00; 
TCCR0B=0x02; 
TCNT0=0x00; 
OCR0A=0x00; 
OCR0B=0x00; 

TCCR1A=0x00; 
TCCR1B=0x05; 
TCNT1H=0x98; 
TCNT1L=0x99; 
ICR1H=0x00; 
ICR1L=0x00; 
OCR1AH=0x00; 
OCR1AL=0x00; 
OCR1BH=0x00; 
OCR1BL=0x00; 

OCR1BH=0x00; 
OCR1BL=0x00; 

GIMSK=0x00; 
MCUCR=0x00; 

TIMSK=0x82; 
USICR=0x00; 

ACSR=0x80;

  #asm("sei");

  while (1){
    if(PIND.6==0){//час
      delay_ms(20);
      if(PIND.6==0){    
        hour++;
        delay_ms(150);
      }
    }
    if(PIND.5==0){//мин
      delay_ms(20);
      if(PIND.5==0){    
        min++;
        delay_ms(150);
      }
    }
    if((PIND.5==0)&&(PIND.6==0)){//сброс
      delay_ms(20);
      if((PIND.5==0)&&(PIND.6==0)){
        sec=0;  
        min=0;
        hour=0;
        delay_ms(150);
      }
    }
  }
}
