Red de conocimiento informático - Consumibles informáticos - Método para convertir música a base 16 y escribirla en un microcontrolador

Método para convertir música a base 16 y escribirla en un microcontrolador

Esto requiere que usted mismo convierta la fracción a datos hexadecimales:

Conocimientos relacionados:

1. Para generar un pulso de audio, solo necesita calcular el período de una frecuencia de audio (1. /frecuencia), y luego divida este período por 2, que es el tiempo de medio período. Utilice un temporizador para contar este tiempo de medio ciclo, invierta las E/S que emiten el pulso cada vez y luego repita este tiempo de medio ciclo para invertir las E/S de modo que pueda obtener esta frecuencia en el pin de E/S. pulso.

2. Utilice el temporizador interno del 8051 para trabajar en modo 1 contador y cambie los valores de conteo TH0 y TL0 para producir diferentes frecuencias.

3. Por ejemplo, la frecuencia es 523 Hz y su período es t = 1/523 = 1912 US. Entonces, siempre que el reloj del contador sea 956us/1us=956 y la E/S se invierta cada vez. 956 cuentas, estará bien. Obtenga el DO de rango medio (523 Hz).

La relación entre el valor del pulso de conteo y la frecuencia es la siguiente:

N=Fi÷2÷Fr N: Valor de conteo;

Fi: Temporización interna 1us una vez, entonces su frecuencia es 12 MHz;;

Fr: la frecuencia a generar;

4. El valor del conteo se calcula de la siguiente manera:

t. = 65536-N = 65536 -fi \2 \fr

Por ejemplo, suponiendo K=65536, f = 100000 = fi = 1 MHz, encuentre los recuentos de DO de graves (261 MHz), DO de rango medio (523 MHz ) y valor DO agudo (1046 MHz).

t = 65536-N = 65536-fi÷2÷Fr = 65536-1000000÷2÷Fr = 65536-500000/Fr

T de bajo DO=65536-500000/ 262=63627.

Para alto DO, T=65536-500000/523=64580.

Agudos DO t = 65536-500000/1047 = 65059.

5. La tabla comparativa de la frecuencia y valor de conteo t de cada nota en la tonalidad de C es la siguiente:

Tabla 1 Tabla comparativa de frecuencia de atención de C y valor de conteo T

Notas musicales

●1DO frecuencia (Hz) código de clave simple (valor T) frecuencia de nota (Hz) código de clave simple (valor T)

262 63628 #4FA# 740 64860

# 1DO # 277 63731 5SO 784 64898

Bajo 2RE

# 2RE # 294 63835 # 5SO # 831 64934

6LA 880 64968 in 311 63928

●3M 330 64021 # 6 932 64994

Bajo 4FA 349 64103 Medio 7SI 988 65030

# 4fa # 37064185Alto 1DO 1046 65058

●5so 392 64260 # 1do # 1109 65085

#5SO# 415 64331 altura 2re 1175110

●6la 440 64400 # 2RE # 1245 65134

#6 466 64463Alto 3M 1318 65157

Bajo 7SI 494 64524Alto 4FA 1397 65178.

reloj 1do 523 64580#4fa#1480 65198.

#1DO# 554 64633高5SO 1568 65217

2 Re 587 64684 # 5SO # 1661 65235.

#2RE# 622 64732 Alto 6LA 1760 65252

Zhong 3M 659 64777 #6 1865 65268

Medio 4FA 698 64820 Alto 1967 65283

Tabla 2 Comparación entre código de tiempo y código de tiempo

Código de tiempo, tipo de compás, código de tiempo y tipo de compás

1 1/4 de tiempo 1 1/8 de tiempo

2 2/4 tiempo 2 1/4 tiempo

3 y 3/4 tiempo 3 y 3/8 tiempo

4 1 tiempo 4 1/2 tiempo

5 1 y 1/4 tiempo 5 5/8

6 1 y 1/2 tiempo 6 3/4

8 2 tiempos 8 1

Uno 2 toma 1/2, el otro 1 toma 1/4.

C 3 tiempos C 1 y 1/2 tiempos.

F 3 y 3/4 tiempos

Tabla 3 Configuración de tiempo de 1/4 de tiempo para cada tecla Configuración de tiempo de 1/4 de tiempo para cada tecla

Valores de afinación Valor de ajuste de retardo Retraso

Ajuste de 4/4 a 125 milisegundos y ajuste de 4/4 a 62 milisegundos.

Ajuste 3/4 187 milisegundos, ajuste 3/4 94 milisegundos.

Ajuste de 2/4 a 250 milisegundos y ajuste de 2/4 a 125 milisegundos.

Tiempo de retardo de 1/4 de tiempo = 187 ms.

Retraso: MOV R7, #02

D2: MOV R4, #187 y otros valores de retraso, simplemente cambie el valor aquí al valor correspondiente.

D3: MOV R3, No. 248

DJNZ R3, USD

DJNZ R4 D3

DJNZ R7

DJNZ R5, el valor del tiempo de retardo se coloca en R5 para determinar el tiempo.

Remojar en agua para suavizarla

Para crear música:

1. Primero encuentra las notas de la partitura y luego establece la secuencia de las mismas. Tabla de valores T.

2. Configure la tabla de valores T en TABLA1 y coloque el valor de recuento en "TABLA".

3. El código de notación (nota) es alto, el tiempo (número de tiempos) es 4 bajo y el código de tiempo de la nota se coloca en la "tabla" del programa.

Conocimientos relacionados:

Cada nota utiliza 1 byte. Los cuatro bits superiores del byte representan la altura de la nota y los cuatro bits inferiores representan el tiempo de la nota. La Tabla 2 muestra la comparación entre código de ritmo y código de ritmo. Si 1 tiempo es de 0,4 segundos y 1/4 de tiempo es de 0,1 segundos, puede obtener el tiempo del tiempo configurando el tiempo de retardo. Si 1/4 de tiempo es 1DELAY, entonces 1 tiempo debe ser 4DELAY, y así sucesivamente. Entonces, siempre que encuentre el tiempo DEALY de 1/4 de tiempo, los otros tiempos serán múltiplos de él. Consulte la Tabla 3 para conocer los ajustes de tiempo de 1/4 y 1/8 de tiempo.

Valores T de códigos espectrales simples con pronunciación espectral simple

5 Bass SO 1 64260

6 Bass LA 2 64400

7 Bajos TI 3 64524

1 Medios DO 4 64580

2 Medios RE 5 64684

3 Medios MI 3 64777

4 Alto FA 7 64820

5 Alto SO 8 64898

6 Pull-up 9 64968

7 Alto TI A 65030

1 Agudos DO B 65058

2 Anillo de Agudos C 65110

3 Agudos MI D 65157

4 Agudos FA E 65178

5 Agudos SO F 65217

Silencio 0

El número de tiempos en el código de tiempo

1 1/4 tiempos

2 y 2/4 tiempos

3 y 3/4 tiempos

4 1 tiempo

5 1 y 1/4 tiempos

6 1 y 1/2 Tiempo

8 2 tiempos

A 2 y 1/2 tiempos

C 3 tiempos

F 3 y 3/4 tiempos

Tabla 4 código de espectro simple, valor T y número de latidos correspondientes al espectro simple

#include "reg51.h "

#Definir uint entero sin signo

p>

#Definir carácter uchar sin firmar

uchar * table;

Código uint tabla 1[15]= { 64260, 64400, 64524, 64580 ,

64684,64777,64820,64898,

64968,65030,65058,65110,

65157,65178,65217};

Código uchar CANCIÓN [ ]={

//1 Amor tardío

//0

0x08, 0x08,

//1

0x02, 0x12, 0x42, 0x62, 0x52, 0x42, 0x21, 11,

0x18, 0x18,

0x02, 0x22, 0x42, 0x82, 0x92, 0x82, 0x61, 0x51, 0x42,

0x58, 0x58,

//2

0x66, 0x51, 0x61, 0x84, 0x62, 0x82,

0x52, 0x62, 0x42, 0x52, 0x28,

0x52, 0x42, 0x52, 0x62, 0x94, 0x81, 0x91, 0x81, 0x61,

0x1C, 0x12, 0x82,

//3

0x68, 0x02, 0x92, 0x82, 0x42,

0x5C, 0x12, 0x62,

0x58, 0x02, 0x42, 0x51, 0x41, 0x22,

0x4C, 0x62, 0x52,

//4

0x66, 0x82, 0x92, 0x82, 0x61, 0x51, 0x41, 0x51,

0x6C, 0x52, 0x62,

0x53, 0x63, 0x52, 0x42, 0x42, 0x22,

0x1C, 0x12, 0x22,

//5

0x42, 0x44, 0x51, 0x61, 0x82, 0x84, 0x61, 0x81,

0x96, 0x82 , 0x66, 0x51, 0x61,

0x56, 0x42, 0x22, 0x42, 0x82, 0x62,

0x5C, 0x62, 0x52,

//

6

0x66, 0x82, 0x92, 0x82, 0x61, 0x51, 0x41, 0x51,

0x6C, 0x52, 0x62,

0x56, 0x62, 0x52, 0x42, 0x42, 0x22,

0x1C, 0x12, 0x22,

//7

0x42, 0x44, 0x51, 0x61, 0x82, 0x84, 0x61, 0x81,

0x96, 0x82, 0x66, 0x51, 0x61,

0x56, 0x62, 0x92, 0x82, 0x62, 0x52,

0x4C, 0x62, 0x61 , 0x81,

//8

0x9C, 0x81, 0x91, 0x81, 0x61,

0x6C, 0x82, 0x62,

0x56, 0x42, 0x24, 0x42, 0x52,

0x6C, 0x62, 0x61, 0x81,

//9

0x9C, 0xB2, 0x92,

p>

0x8C, 0x82, 0x92,

0xB2, 0xB2, 0xB2, 0x92, 0xD4, 0xC1, 0xD1, 0xC1, 0xB1,

0xCC, 0xB2, 0xB1, 0xC1,

//A

0xDC, 0xD2, 0xC1, 0xB1,

0x9C, 0x92, 0x91, 0xC1,

0x92, 0x84, 0x92, 0x82, 0x62, 0x51, 0x61, 0x51, 0x41,

0x48, 0x48,

//B

0x42 , 0x41, 0x51, 0x66, 0x82, 0x91, 0xB1,

0x92, 0x86, 0x88,

0x42, 0x41, 0x51, 0x66, 0x42, 0x41, 0x51,

0x22, 0x16, 0x18,

0x86, 0x62, 0x58,

//C

0x83, 0x91, 0x62, 0x82, 0x58,

0x52, 0x62, 0x52, 0x42, 0x22, 0x12, 0x62, 0x52,

0x4C, 0x62, 0x52,

//6

0x66, 0x82, 0x92, 0x82, 0x61, 0x51, 0x41, 0x51,

0x6C, 0x52, 0x62,

0x56, 0x62, 0x52, 0x42, 0x42, 0x22 ,

0x1C, 0x12, 0x22,

//7

0x42, 0x44, 0x51, 0x61, 0x82, 0x84, 0x61, 0x81,

0x96, 0x82, 0x66, 0x51, 0x61,

0x56, 0x62, 0x92, 0x82, 0x62, 0x52,

0x4C, 0x62, 0x61, 0x81,

//8

0x9C, 0x81, 0x91, 0x81, 0x61,

0x6C, 0x82, 0x62,

0x56, 0x42, 0x24 , 0x42, 0x52,

0x6C, 0x62, 0x61, 0x81,

//9

0x9C, 0xB2, 0x92,

0x8C, 0x82, 0x92,

0xB2, 0xB2, 0xB2, 0x92, 0xD4, 0xC1, 0xD1, 0xC1, 0xB1,

0xCC, 0xB2, 0xB1, 0xC1,

//A<

/p>

0xDC, 0xD2, 0xC1, 0xB1,

0x9C, 0x92, 0x91, 0xC1,

0x92, 0x84, 0x92, 0x82, 0x62, 0x51, 0x61, 0x51, 0x41,

0x4C, 0x62, 0x61, 0x81,

//8

0x9C, 0x81, 0x91, 0x81, 0x61,

0x6C, 0x82, 0x62,

0x56, 0x42, 0x24, 0x42, 0x52,

0x6C, 0x62, 0x61, 0x81,

// 9

0x9C, 0xB2, 0x92,

0x8C, 0x82, 0x92,

0xB2, 0xB2, 0xB2, 0x92, 0xD4, 0xC1, 0xD1, 0xC1, 0xB1,

0xCC, 0xB2, 0xB1, 0xC1,

//A

0xDC, 0xD2, 0xC1, 0xB1,

0x9C , 0x92, 0x91, 0xC1,

0x92, 0x84, 0x92, 0x82, 0x62, 0x51, 0x61, 0x51, 0x41,

0x4C, 0x62, 0x61, 0x81,

//D

0x66, 0x51, 0x61, 0x86, 0x61, 0x81,

0x52, 0x62, 0x52, 0x42, 0x28,

0x82, 0x91, 0x01, 0x62, 0x11, 0x52, 0x11, 0x01, 0x62, 0x54,

0x48, 0x48, 0x 00};

uchar ljsz

uchar jpm

uchar yfm

uchar t0 = 0;

uint I = 0

sbit altavoz=p1^0;

uint k;

void Delay1()

{

for(k = 0; k & lt20000;k++); /p>

}

luz vacía ( )

{ uchar t;

for(t = 0; t & lt10;t++)

p>

{

P2 = 0x ff;

retraso 1();

P2 = 0x 00; 1();

}

}

void Lignt1()

{

P2 = 0x aa ;

retraso 1();

P2 = 0x

retraso 1(); p>Retraso no válido (uchar t0)//Retraso

{

while(t0-)//Determina el ritmo.

lignt 1();

}

Retraso no válido 2(uchar w0)//retraso

{

while(w0-)//Determina el ritmo.

lignt();

}

void T0Int() interrupción 1//Temporizador 0

{

TL0 = ljsz

TH0 = hjsz

Altavoz=! Altavoz;

}

void ExtInt0() interrupción 0//INT0

{

If (t0 & gt10)

t0 = 0;

I = 0;

Interruptor (t+)

{

Caso 0: Tabla = song;break; //Selecciona la canción de 1.

Caso 1: TABLE = canción 1; Pausa; //Selecciona la segunda canción.

Caso 2: TABLE = SONG2 Break //Selecciona la tercera canción.

Caso 3: TABLE = SONG3 Break //Selecciona la cuarta canción.

Caso 4: TABLE = canción 4; Pausa; //Selecciona la 5ta canción.

Caso 5: TABLE = canción 5; Pausa; //Selecciona la sexta canción.

Caso 6: TABLE = canción 6; Pausa; //Selecciona la 7ma canción.

Caso 7: TABLE = canción 7; Pausa; //Selecciona la octava canción.

Caso 8: TABLE = canción 8; Pausa; //Selecciona la novena canción.

Caso 9: TABLA = canción 9; Pausa; //Selecciona la canción 10.

}

}

canción nula ing()//programa de pronunciación

{

I = 0 ;

mientras(tabla[i])

{

jpm = TABLA[I]& amp 0x0f//valor de tiempo

>yfm =(TABLE[I]>>0x 04)&0x0f//Valor del espectro simple

If(yfm) //El espectro simple es 1, toma el valor de conteo.

{

yfm = yfm-1;

hjsz = (uchar)(tabla 1[yfm]& gt; & gt0x 08); El byte alto del valor de conteo

TH0 = hjsz

ljsz =(uchar)(table 1[yfm]); //Obtiene el byte bajo del valor de conteo

TL0 = ljsz

TR0 = 1; //Inicia el temporizador 0

}

De lo contrario TR0 = 0 //La notación es 0, no; pronunciado.

Retraso (jpm); // retraso del tiempo

i++;

}

}

Administrador no válido (No válido)

{

TMOD = 0x 01; //Establece el temporizador 0 en el modo 1.

TCON = 0x 01; //Interrupción externa INT0, activada por el flanco descendente

IE = 0x83 //Activar interrupción (INT0, temporizador 0)

IP = 0x00//Establecer prioridad de interrupción

TABLE = SONG0

while(1)

{

lignt();

song ing(); //Llamar al programa de pronunciación

TR0 = 0; //Detener el temporizador 0

retraso 2(1);

TABLE = SONG0

canción ing();

}

}