#include //Ajout de la bibliotheque mega8535 #include //Ajout de la bibliotheque delay #define Mi1 189 //189 est défini comme la note Mi1 #define Fa1 178 //178 est défini comme la note Fa1 #define Fad1 168 //168 est défini comme la note Fad1 #define Sol1 158 //158 est défini comme la note Sol1 #define Sold1 150 //150 est défini comme la note Sold1 #define La1 141 //141 est défini comme la note La1 #define Lad1 133 //133 est défini comme la note Lad1 #define Si1 126 //126 est défini comme la note Si1 #define Do1 118 //118 est défini comme la note Do1 #define Dod1 112 //112 est défini comme la note Dod1 #define Re1 105 //105 est défini comme la note Re1 #define Red1 99 //99 est défini comme la note Red1 #define Mi2 94 //94 est défini comme la note Mi2 #define Fa2 88 //88 est défini comme la note Fa2 #define Fad2 83 //83 est défini comme la note Fad2 #define Sol2 79 //79 est défini comme la note Sol2 #define Sold2 74 //74 est défini comme la note Sold2 #define La2 70 //70 est défini comme la note La2 #define Lad2 66 //66 est défini comme la note Lad2 #define Si2 62 //62 est défini comme la note Si2 #define Do2 59 //59 est défini comme la note Do2 #define Dod2 55 //55 est défini comme la note Dod2 #define Re2 52 //52 est défini comme la note Re2 #define Red2 49 //49 est défini comme la note Red2 #define Note OCR2 //OCR2 est défini comme note #define noire 250 //2000 est défini comme noire interrupt[EXT_INT0] void Detection(void); //Prototype de l'interruption externe 0 "Detection" void Pause(int duree); //Prototype de la fonction "Pause" void Proto_Note(int note_a_faire, int attente); //Prototype de la fonction "Proto_Note" void Init_reg(void); //Prototype de la fonction "Init_reg" void Corde_1(void); //Prototype de la fonction "Corde_1" void Corde_2(void); //Prototype de la fonction "Corde_2" void Corde_3(void); //Prototype de la fonction "Corde_3" void Corde_4(void); //Prototype de la fonction "Corde_4" void Scrutation(int temp1, int temp2); //Prototype de la fonction "Scrutation" int Corde = 0, Frete_Scr = 0, Corde_Scr = 0; //Définition des variables Corde, Frete_scr, Corde_Scr void main(void) //Début de la fonction "Main" { Init_reg(); //Utilisation de la Fonction "Init_reg" TCCR2 = 0x00; //Mise à 0 du registre TCCR2 while(1) //Tant que 1 { //Alors if(Corde == 1 && PINB.0 == 1) //Si la variable Corde est egale a 1 et si La broche 0 du port B est egale a 1 { //Alors Corde_1(); //Utilisation de la fonction Corde_1 Corde = 0; //Corde est egale a 0 } else if(Corde == 2 && PINB.1 == 1) //Sinon si la variable Corde est egale a 2 et si La broche 1 du port B est egale a 1 { //alors Corde_2(); //Utilisation de la fonction Corde_2 Corde = 0; //Corde est egale a 0 } else if(Corde == 3 && PINB.3 == 1) //Sinon si la variable Corde est egale a 3 et si La broche 3 du port B est egale a 1 { //alors Corde_3(); //Utilisation de la fonction Corde_3 Corde = 0; //Corde est egale a 0 } else if(Corde == 4 && PINB.4 == 1) //Sinon si la variable Corde est egale a 2 et si La broche 4 du port B est egale a 1 { //alors Corde_4(); //Utilisation de la fonction Corde_4 Corde = 0; //Corde est egale a 0 } else //Sinon TCCR2 = 0x00; //Mise a 0 du Regsitre TCCR2 } //Fin de tant que 1 } //Fin de la Fonction Main interrupt[EXT_INT0] void Detection(void) //Définition de la fonction interruption externe 0 "Detection" { //Début de la fonction if(PINB.0==0) //Si la Broche 0 du Port B est egale a 0 Corde = 1; //Corde est agale a 1 if(PINB.1==0) //Si la Broche 1 du Port B est egale a 0 Corde = 2; //Corde est agale a 2 if(PINB.3==0) //Si la Broche 3 du Port B est egale a 0 Corde = 3; //Corde est agale a 3 if(PINB.4==0) //Si la Broche 4 du Port B est egale a 0 Corde = 4; //Corde est agale a 4 delay_ms(15); //Scrutation(Frete_Scr, Corde_Scr); //Utilisation de la fonction Scrutation, avec pour paramètre Frete_Scr et Corde_Scr= } //Fin de la fonction void Pause(int duree) //Définition de la fonction "Pause" { //Début de la fonction TCCR2 = 0x00; //Mise a 0 du registre TCCR2 delay_ms(duree); //Attente TCCR2 = 0x9E; //Mise a 0x9E du registre TCCR2 } //Fin de la fonction void Proto_Note(int note_a_faire, int attente) //Définition de la fonction "Proto_Note" { //Début de la fonction TCCR2 = 0x9E; //Mise a 0x9E du registre TCCR2 Note = note_a_faire; //La variable Note est egale a la variable note_a_faire delay_ms(attente); //Attente Pause(10); //Utilisation de la Fonction Pause } //Fin de la fonction void Init_reg(void) //Définition de la fonction "Init_reg" { //Début de la fonction DDRA = 0x00; //Definition du Port A en Entrée PORTA = 0x00; //Sans resistance de Tirage DDRB = 0x00; //Definition du Port B en Entrée PORTB = 0x00; //Sans resistance de Tirage DDRC = 0x00; //Definition du Port C en Entrée PORTC = 0x00; //Sans resistance de Tirage DDRD=0x80; //Définition du Port D en Entrée sauf la broche 7 en Sortie PORTD=0x00; //Sans resistance de Tirage MCUCR = 0x02; //Definition du registre MCUCR (detection sur Front descendant) GIFR |= 0x40; //Definition du registre GIFR (interruption) GICR |= 0x40; //Definition du registre GICR (interruption) SREG.7 = 1; //Definition du registre SREG (autorisation de l'interruption) } //Fin de la fonction void Scrutation(int temp1, int temp2) //Définition de la fonction "Scrutation" { //Début de la fonction DDRC = 0xFF; //Definition du PORTC en en Sortie PORTC = 0x0F; //Mise a 0 du PORTC DDRA = 0x00; //Définition du PORTA en Entrée PORTA = 0x00; //Sans résistance de Tirage temp1 = PINA; //Stocker La Valeur du PortA dans la variable temp1 DDRC = 0x0F; //Définition du PORTC en Entrée PORTC = 0x0F; //Sans résistance de Tirage DDRA = 0xFF; //Définition du PORTA en Sortie PORTA = temp1; //Mettre la valeur de la varialbe temp1 dans le PortA temp2 = PINC; //Stocker La Valeur du PortC dans la variable temp2 } //Fin de la fonction void Corde_1(void) //Définition de la fonction interruption externe 0 "Detection" { //Début de la fonction Scrutation(Frete_Scr, Corde_Scr); if(PINC.7 == 0) //Si temps2 est egale 0x80 { //Alors if(PINA.7 == 0) //Si temps1 est egale 0x01 Proto_Note(Do1,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Do1 else if(PINA.6 == 0) //Sinon si temps1 est egale 0x02 Proto_Note(Si1,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Si1 else if(PINA.5 == 0) //Sinon si temps1 est egale 0x04 Proto_Note(Lad1,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Lad1 else if(PINA.4 == 0) //Sinon si temps1 est egale 0x08 Proto_Note(La1,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note La1 else if(PINA.3 == 0) //Sinon si temps1 est egale 0x10 Proto_Note(Sold1,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Sold1 else if(PINA.2 == 0) //Sinon si temps1 est egale 0x20 Proto_Note(Sol1,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Sol1 else if(PINA.1 == 0) //Sinon si temps1 est egale 0x40 Proto_Note(Fad1,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Fad1 else if(PINA.0 == 0) //Sinon si temps1 est egale 0x80 Proto_Note(Fa1,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Fa1 } else //Sinon { Proto_Note(Mi1,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Mi1 } } //Fin de la fonction void Corde_2(void) //Définition de la fonction interruption externe 0 "Detection" { Scrutation(Frete_Scr, Corde_Scr); //Début de la fonction if(PINC.6 == 0) //Si temps2 est egale 0x40 { //Alors if(PINA.7 == 0) //Si temps1 est egale 0x01 Proto_Note(Fa2,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Fa2 else if(PINA.6 == 0) //Sinon si temps1 est egale 0x02 Proto_Note(Mi2,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Mi2 else if(PINA.5 == 0) //Sinon si temps1 est egale 0x04 Proto_Note(Red1,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Red1 else if(PINA.4 == 0) //Sinon si temps1 est egale 0x08 Proto_Note(Re1,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Re1 else if(PINA.3 == 0) //Sinon si temps1 est egale 0x10 Proto_Note(Dod1,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Dod1 else if(PINA.2 == 0) //Sinon si temps1 est egale 0x20 Proto_Note(Do1,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Do1 else if(PINA.1 == 0) //Sinon si temps1 est egale 0x40 Proto_Note(Si1,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Si1 else if(PINA.0 == 0) //Sinon si temps1 est egale 0x80 Proto_Note(Lad1,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Lad1 } else //Sinon { Proto_Note(La1,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note La1 } } //Fin de la fonction void Corde_3(void) //Définition de la fonction interruption externe 0 "Detection" { //Début de la fonction Scrutation(Frete_Scr, Corde_Scr); if(PINA.5 == 0) //Si temps2 est egale 0x20 { //Alors if(PINA.7 == 0) //Si temps1 est egale 0x01 Proto_Note(Lad2,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Lad2 else if(PINA.6 == 0) //Sinon si temps1 est egale 0x02 Proto_Note(La2,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note La2 else if(PINA.5 == 0) //Sinon si temps1 est egale 0x04 Proto_Note(Sold2,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Sold2 else if(PINA.4 == 0) //Sinon si temps1 est egale 0x08 Proto_Note(Sol2,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Sol2 else if(PINA.3 == 0) //Sinon si temps1 est egale 0x10 Proto_Note(Fad2,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Fad2 else if(PINA.2 == 0) //Sinon si temps1 est egale 0x20 Proto_Note(Fa2,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Fa2 else if(PINA.1 == 0) //Sinon si temps1 est egale 0x40 Proto_Note(Mi2,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Mi2 else if(PINA.0 == 0) //Sinon si temps1 est egale 0x80 Proto_Note(Red1,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Red1 } else //Sinon { Proto_Note(Re1,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Re1 } } //Fin de la fonction void Corde_4(void) //Définition de la fonction interruption externe 0 "Detection" { //Début de la fonction Scrutation(Frete_Scr, Corde_Scr); if(PINA.4 == 0) //Si temps2 est egale 0x10 { //Alors if(PINA.7 == 0) //Si temps1 est egale 0x01 Proto_Note(Red2,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Red2 else if(PINA.6 == 0) //Sinon si temps1 est egale 0x02 Proto_Note(Re2,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Re2 else if(PINA.5 == 0) //Sinon si temps1 est egale 0x04 Proto_Note(Dod2,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Dod2 else if(PINA.4 == 0) //Sinon si temps1 est egale 0x08 Proto_Note(Do2,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Do2 else if(PINA.3 == 0) //Sinon si temps1 est egale 0x10 Proto_Note(Si2,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Si2 else if(PINA.2 == 0) //Sinon si temps1 est egale 0x20 Proto_Note(Lad2,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Lad2 else if(PINA.1 == 0) //Sinon si temps1 est egale 0x40 Proto_Note(La2,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note La2 else if(PINA.0 == 0) //Sinon si temps1 est egale 0x80 Proto_Note(Sold2,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Sold2 } else //Sinon { Proto_Note(Sol2,noire); //Alors lancer la fonction Proto_Note de la durée d'une noire et de la note Sol2 } } //Fin de la fonction