Método para convertir música a base 16 y escribirla en un microcontrolador
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 p>
# 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>
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, p>
//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();
}
}