Red de conocimiento informático - Conocimiento sistemático - Buscamos expertos: diseño de timbre musical basado en MCU, incluido el programa C completo.

Buscamos expertos: diseño de timbre musical basado en MCU, incluido el programa C completo.

#include //Archivo de encabezado que contiene 52 definiciones de registros de microcontrolador

sbit sound=P3^7 //Definir el bit de sonido como P3.7

p>

unsigned int C; //Almacena la constante de tiempo del temporizador

// La siguiente es la macro de audio de tonos medios definida en lenguaje C

#define dao 523 //Definir macro "dao".

#define xi 987 //Defina la macro "xi" como la frecuencia del centro "7", 523 Hz

/************** ** ******************************

Función: 1 unidad de retardo, 200ms

*******************************************/

retraso nulo()

{

carácter sin firmar i,j

for(i=0;i<250;i++)

for(j=0;j<250;j++)

}

/****************** ****** **********************

Función Función:

***** ************ *************** *******************/

void main(void)

{

unsigned char i,j

//La siguiente es la canción "Two Tigers"

unsigned int code f[]={dao ,re,mi,dao, // Cada línea corresponde a la nota de un compás

dao,re,mi,

mi,fa,sao,

mi ,fa,sao,

sao,la,sao,fa,mi,dao,

sao,la ,sao,fa,mi,dao,

dao,sao,dao,

dao,sao,dao,

0xff};

// La siguiente es la partitura de tiempo simple de cada nota

// "4" corresponde a 4 unidades de retraso, "2" corresponde a 2 unidades de retraso, "1" corresponde a 1 unidad de retraso

// "1" corresponde a 1 unidad de tiempo de retardo.

código de carácter sin firmar JP[ ]={2,2,2,2,

2,2,2,2,

2,2,3 ,

2,2,3,

1,2,2, 1,2,2,

1,2,2,2,1, 2,2,

2,2,2,

2,2,2,

2,2,2,

2,2,2,

2,2,2,

};

EA=1; // Permitir interrupción del temporizador T0

TMOD=0x00; // Usar el modo 1 del temporizador T0 (contador de 13 bits)

while(1) // Bucle infinito

{

i=0; // Comienza a tocar desde la primera nota f[0]

while(f[i]!

C= 460830/f[i];

TH0=(8192-C)/32; // Se puede demostrar que este es el método para asignar el valor inicial a los 8 bits superiores de los 13 bits. contador TH0

TL0=(8192-C)%32;

TL0=(8192-C)%32 //Se puede demostrar que este es el valor inicial asignado a los 8 bits inferiores del método TL0 del contador de 13 bits

TL0=(8192-C)%32

TR0=1 //inicia el temporizador T0

<; p> for(j=0;j

delay(); //retraso por 1 unidad de tiempo

TR0=0; //apaga el temporizador T0

i++; //reproduce la siguiente nota

}

}

}

}

/************************************ ************ *************

Función: Interrumpir la subrutina de servicio del temporizador T0

** ********** **************************************** ********/

void Time0(void ) interrupción 1 uso 1

{ <

sonido=!sound; nivel de salida del pin P3.7 para formar una onda cuadrada

TH0=(8192-C)/32 // Se puede demostrar que este es el método de asignación alta de 8 bits del de 13 bits; contador TH0

TL0=(8192-C)%32;

TL0=(8192-C)%32 //Se puede demostrar que este es el método de asignación inicial. valor a los 5 bits inferiores del contador de 13 bits TL0

p>

}