#include <avr/io.h>
#define F_CPU 1000000L
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <stdlib.h>
#include <avr/eeprom.h>

uint8_t EEMEM memory[6];

uint8_t i1, i2, j1, j2, k1, k2;
int sr1 = -1;
int sr2 = -1;

int go [10] =
{
	0b11000000,
	0b11111001,
	0b10100100,
	0b10110000,
	0b10011001,
	0b10010010,
	0b10000010,
	0b11111000,
	0b10000000,
	0b10010000,
};

int main(void)
{		
    i1 = eeprom_read_byte (&memory[0]);
 	j1 = eeprom_read_byte (&memory[1]);
 	k1 = eeprom_read_byte (&memory[2]);
 	i2 = eeprom_read_byte (&memory[3]);
 	j2 = eeprom_read_byte (&memory[4]);
 	k2 = eeprom_read_byte (&memory[5]);

	DDRA = 0b00000000;//   
	PORTA = 0b00001111;//    
	// SPI 
	DDRB |= ((1<<PB0)|(1<<PB1)|(1<<PB2)); // SPI  
	PORTB &= ~((1<<PB0)|(1<<PB1)|(1<<PB2)); // 
		/*  SPI   ,    fck/128 */
	SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);
		
	 while (1)
	 {
		if (!(PINA & (1<<PINA2)) && (PINA & (1<<PINA3)))
		{
			if (sr1 != i1)
			{
				sr1 = i1;
			/*    */
			SPDR = go[i1];
			/*     */
			while(!(SPSR & (1<<SPIF)));
			SPDR = go[j1];
			/*     */
			while(!(SPSR & (1<<SPIF)));
			SPDR = go[k1];
			/*     */
			while(!(SPSR & (1<<SPIF)));
			}
		}
		if (!(PINA & ((1<<PINA2) | (1<<PINA3))))
		{
			if (sr2 != i2)
			{
				sr2 = i2;
			/*    */
			SPDR = go[i2];
			/*     */
			while(!(SPSR & (1<<SPIF)));
			SPDR = go[j2];
			/*     */
			while(!(SPSR & (1<<SPIF)));
			SPDR = go[k2];
			/*     */
			while(!(SPSR & (1<<SPIF)));
			}
		}
		if (!(PINA & (1<<PINA0)) && (PINA & (1<<PINA1)))
		{
			 _delay_ms(200);
			 if (!(PINA & (1<<PINA0)))
			 {
				 i1++;
				 eeprom_update_byte (&memory[0], i1);
				 if (i1 > 9)
				 {
					 i1 = 0;
					 j1++;
					 eeprom_update_byte (&memory[1], j1);
					 if (j1 > 9)
					 {
						 j1 = 0;
						 k1++;
						 eeprom_update_byte (&memory[2], k1);
					 }
				 }
			 }
			 while (!(PINA & (1<<PINA0)));
		}
		if (!(PINA & ((1<<PINA1) | (1<<PINA0))))
		{
			_delay_ms(200);
			if (!(PINA & (1<<PINA0)))
			{
                i2++;
				eeprom_update_byte (&memory[3], i2);
				if (i2 > 9)
				{
					i2 = 0;
					j2++;
					eeprom_update_byte (&memory[4], j2);
					if (j2 > 9)
					{
						j2 = 0;
						k2++;
						eeprom_update_byte (&memory[5], k2);
					}
				}
			}
			while (!(PINA & (1<<PINA0)));
		}
	}	
}