#include <p30f4011.h>
#include "HIBlib.h"

_FOSC(CSW_FSCM_OFF & EC_PLL16);
_FWDT(WDT_OFF);
_FBORPOR(MCLR_EN & PBOR_OFF & PWRT_OFF);
_FGS(CODE_PROT_OFF);

#define MIB 160
#define FA1 135
#define SOL 127
#define LAB 120
#define LA 113
#define SIB 107
#define SI 101
#define DO 95
#define RE 85
#define MI8b 80
#define MI8 75
#define SOL8 63
#define FAS8 67
#define FA8 71

#define NEGRA 30
#define BLANC NEGRA*2
#define SEMICORXEA NEGRA/4 
#define CORXEA NEGRA/2 
#define PUNTET NEGRA*3/4 
#define MITJ NEGRA/4 

const static unsigned char durada[] = { NEGRA, PUNTET, MITJ, NEGRA, PUNTET,
					MITJ, BLANCA, NEGRA, PUNTET, MITJ,
					NEGRA, PUNTET, MITJ, BLANC, NEGRA,
					PUNTET, MITJ, NEGRA, PUNTET, MITJ, 
					SEMICORXEA, SEMICORXEA, CORXEA,
					CORXEA, CORXEA, NEGRA, PUNTET,
					SEMICORXEA, SEMICORXEA, SEMICORXEA,
					CORXEA, CORXEA, CORXEA, NEGRA };

const static unsigned char notes[] = { SOL, MIb, SIb, SOL, MIb, SIb, SOL, RE,
				       MI8b, SIb, FA1, MIb, SIb, SOL, SOL8,
				       SOL, SOL, SOL8, FAS8, FA8, MI8, MI8b,
				       MI8, DO, LAb, RE, DO, SI, SIb, LA,
				       SIb, DO, MIb, FA, 0}

int main(void)
{
    U1MODE = 0;
    IOConfig(); 

    unsigned char n_notes = 0, i = 0;

    while (notes[n_notes] != 0) {
	    n_notes++;
    }

    for(i = 0; i < n_notes; i++) {
	    BuzzerPlay(durada[i] notes[i]);
	    Delay15ms();
    }
    
    return 0;
}

    
/*
  BuzzerPlay(20, 10);     // 20 periods of 0.2ms (5KHz)
  BuzzerPlay(20, 20);     // 20 periods of 0.4ms (2.5KHz)
  BuzzerPlay(20, 30);     // 20 periods of 0.6ms (1.6KHz)
  BuzzerPlay(20, 40);     // 20 periods of 0.8ms (1.25KHz)
  BuzzerPlay(20, 50);     // 20 periods of 1ms (1KHz)
  BuzzerPlay(20, 60);     // 20 periods of 1.2ms (833Hz)
  BuzzerPlay(20, 70);     // 20 periods of 1.4ms (714Hz)
  BuzzerPlay(20, 80);     // 20 periods of 1.6ms (625Hz)
  BuzzerPlay(20, 90);     // 20 periods of 1.8ms (555Hz)
  BuzzerPlay(20, 100);    // 20 periods of 2.0ms (500Hz)
  BuzzerPlay(20, 110);    // 20 periods of 2.2ms (454Hz)
  BuzzerPlay(20, 120);    // 20 periods of 2.4ms (416Hz)
*/

