0% encontró este documento útil (0 votos)
290 vistas3 páginas

Código para Reproducción de Notas Musicales

Este documento contiene el código para reproducir melodías musicales almacenadas en un arreglo utilizando un microcontrolador PIC. Define funciones para reproducir y guardar notas musicales presionando teclas, y reproduce la melodía almacenada al presionar otra tecla. Almacena las frecuencias de las notas musicales en un arreglo y usa retardos para generar las frecuencias al activar un altavoz.

Cargado por

Dana
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
290 vistas3 páginas

Código para Reproducción de Notas Musicales

Este documento contiene el código para reproducir melodías musicales almacenadas en un arreglo utilizando un microcontrolador PIC. Define funciones para reproducir y guardar notas musicales presionando teclas, y reproduce la melodía almacenada al presionar otra tecla. Almacena las frecuencias de las notas musicales en un arreglo y usa retardos para generar las frecuencias al activar un altavoz.

Cargado por

Dana
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

#include <16f877.

h>
#fuses HS,NOPROTECT,
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#org 0x1F00, 0x1FFF void loader16F877(void) {}
#fuses HS,NOPROTECT
#use delay(clock=20000000)

#define Speaker PIN_B0


#define nDO 0 // DO
#define nRE 1 // RE
#define nMI 2 // MI
#define nFA 3 // FA
#define nSOL 4 // SOL
#define nLA 5 // LA
#define nSI 6 // SI

int16 FreqNota[8]={ // retardos entre estado alto


// y bajo para generar las notas
15289, // DO
13620, // RE
12134, // MI
11453, // FA
10204, // SOL
9090, // LA
8099 // SI
};

int grabacion[8]; //declaracion de variables


int i=0;
char var1;
void Reproducir();
void Play(int nota,int octava,int16 duracion);

void main(){

for(i=0;i<8;i++){ //guarda las notas tecleadas


grabacion[i]=-1; //
}
i=0;
while(1){
var1=getchar();
switch (var1){
case '1': //tecla de clasa nota musical
Play(nDO,6,500);
grabacion[i]=0;
i=i+1;
break;
case '2':
Play(nRE,6,500);
grabacion[i]=1;
i=i+1;
break;
case '3':
Play(nMI,6,500);
grabacion[i]=2;
i=i+1;
break;
case '4':
Play(nFA,6,500);
grabacion[i]=3;
i=i+1;
break;
case '5':
Play(nSOL,6,500);
grabacion[i]=4;
i=i+1;
break;
case '6':
Play(nLA,6,500);
grabacion[i]=5;
i=i+1;
break;
case '7':
Play(nSI,6,500);
grabacion[i]=6;
i=i+1;
break;
case '8':
Reproducir();
break;
default:
i=i;
break;
}
}
}

void Reproducir(){ //reproduce la melodia tecleada


for(i=0;i<8;i++){
if(grabacion[i]==-1){
}
else{
Play(grabacion[i],6,500);
delay_ms(50);
}
}
for(i=0;i<8;i++){
grabacion[i]=-1;
}
i=0;
}

void Play(int nota, int octava, int16 duracion){


int16 fn;

int16 mS_Transcurridos=0; // Contadores necesarios


// para controlar la duración
int16 CiclosL=0; // Contandor de uS

fn=FreqNota[nota]; // Define los retardos para generar


// la frecuencia de cada nota
fn>>=(octava); // Adapta la frecuencia a la octava actual
// haciendo una rotación
// a la derecha por octava
do{

output_high(Speaker); // Genera la frecuancia


delay_us(fn); // con los retardos mientras
CiclosL+=(fn); // aumenta el contador de
// ciclos transcurridos
output_low(Speaker); // en dos partes para repartir el
delay_us(fn); // trabajo entre estado alto y bajo.
CiclosL+=(fn); //
CiclosL+=25; // Compensador.

while(CiclosL>999){ // Se queda en el bucle mientras CiclosL


// sea menor a 1000 (1 mS)
CiclosL-=1000; // Le resta 1000 a CiclosL
mS_Transcurridos++; // y le suma 1 a mS_Transcurridos.
CiclosL+=25; // Compensador.
}
}
while (duracion>mS_Transcurridos); // Repite el bucle hasta que haya
// pasado el tiempo indicado.
}

También podría gustarte