#include <avr/io.h>
#include <util/delay.h>

#define SPK PB3

#define  c     958		// 261 Hz
#define  d     850		// 294 Hz
#define  e     760		// 329 Hz
#define  f     716		// 349 Hz
#define  g     638		// 392 Hz
#define  a     568		// 440 Hz
#define  b     507		// 493 Hz
#define  C     478		// 523 Hz

void playKey(int key)
{	
	switch(key)
	{
		case c:
			for(int i=key; i>0; i--)
			{	
				PORTB |=(1<<SPK);
				_delay_us(261);
				PORTB &= ~(1 << SPK);
				_delay_us(261);
			}
		break;
		case d:
			for(int i=key; i>0; i--)
			{	
				PORTB |=(1<<SPK);
				_delay_us(294);
				PORTB &= ~(1 << SPK);
				_delay_us(294);
			}
		break;
		case e:
			for(int i=key; i>0; i--)
			{	
				PORTB |=(1<<SPK);
				_delay_us(329);
				PORTB &= ~(1 << SPK);
				_delay_us(329);
			}
		break;
		case f:
			for(int i=key; i>0; i--)
			{	
				PORTB |=(1<<SPK);
				_delay_us(349);
				PORTB &= ~(1 << SPK);
				_delay_us(349);
			}
		break;
		case g:
			for(int i=key; i>0; i--)
			{	
				PORTB |=(1<<SPK);
				_delay_us(392);
				PORTB &= ~(1 << SPK);
				_delay_us(392);
			}
		break;
		case a:
			for(int i=key; i>0; i--)
			{	
				PORTB |=(1<<SPK);
				_delay_us(440);
				PORTB &= ~(1 << SPK);
				_delay_us(440);
			}
		break;
		case b:
			for(int i=key; i>0; i--)
			{	
				PORTB |=(1<<SPK);
				_delay_us(493);
				PORTB &= ~(1 << SPK);
				_delay_us(493);
			}
		break;
		case C:
			for(int i=key; i>0; i--)
			{	
				PORTB |=(1<<SPK);
				_delay_us(523);
				PORTB &= ~(1 << SPK);
				_delay_us(523);
			}
		break;
	}	
}
int main(void)
{
	//Set pin 4 of PORTB to outputs
	DDRB |=(1<<SPK) ;	

    while(1)
    {	
		playKey(g);
		playKey(c);
		playKey(c);
		playKey(d);
		playKey(c);
		playKey(b);
		playKey(a);
		playKey(a);
		playKey(a);
		playKey(d);
		playKey(d);
		playKey(e);
		playKey(d);
		playKey(c);
		playKey(b);
		playKey(g);
		playKey(g);
		
		playKey(e);
		playKey(e);
		playKey(f);
		playKey(e);
		playKey(d);
		playKey(c);
		playKey(a);
		playKey(g);
		playKey(g);
		playKey(a);
		playKey(d);
		playKey(b);
		playKey(c);
		playKey(g);
		
		playKey(c);
		playKey(c);
		playKey(c);
		playKey(b);
		playKey(b);
		playKey(c);
		playKey(b);
		playKey(a);
		playKey(g);
		playKey(d);
		
		playKey(e);
		playKey(d);
		playKey(c);
		playKey(g);
		playKey(g);
		playKey(g);
		playKey(g);
		playKey(a);
		playKey(d);
		playKey(b);
		playKey(c);
		
		_delay_ms(2000);
    }
}
