#include
#define uchar unsigned char
#define uint unsigned int
uchar Count; p>
p>
sbit Speak =P1^2; //Pin de control del zumbador
/*La siguiente matriz es el código de nota*/
código de carácter sin firmar SONG[] = { //Te deseo paz
0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,
0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,
0x20,0x80,0x2b ,0x20,0x26 ,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10, 0x26,0x60, 0x40,0x10,0x39,0x10,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10 ,0x2b,0x10 ,
0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,
0x20,0x10 ,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,
0x20,0x20,0x20,0x40,0x26, 0x20,0x2b, 0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,
0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30 ,0x60,0x39 ,0x10,0x30,0x10,
0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,
0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,
0x30,0x20, 0x1c,0x20, 0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,
0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20 ,0x2b,0x40 ,0x40,0x10,0x40,0x10,0x20,0x10,
0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,
/ /En la carretera no elijas a Yehua
0x30,0x1C,0x10,0x20,0x40,
0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C,
0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20 ,0x30,0x1C,0x10,0x18,0x20,
0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,
0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
0x20,0x2B, 0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18 ,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,
0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30, 0x1C,0x10,0x20,
0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F,
0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,
0x30,0x1C,0x10,0x18,0x20 ,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,
0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C, 0x10,0x18,0x40,0x1C,0x20,0x20,
0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00,
};
/************************************ ***********************************
* Nombre: Time0_Init()
* Función: Inicialización del temporizador, el tiempo de sincronización se puede calcular mediante el software en el CD, oscilador de cristal 11.0592MZ, 10 ms
* Entrada: Ninguna
* Salida: Ninguna
*************************************** ********* *************************/
void Time0_Init()
{
TMOD = 0x01;
IE = 0x82;
TH0 = 0xDC;
TL0 = 0x00 p>
}
/************************************ *********** **********************
* Nombre: Time0_Int()
>
* Función: interrupción del temporizador, el conteo aumenta en uno durante la interrupción
* Entrada: Ninguna
* Salida: Ninguna
*** * ************************************************* ** *****************/
void Time0_Int() interrupción 1
{
TH0 = 0xDC;
TL0 = 0x00;
Count++; //Agrega 1 a la longitud
}
/***** *** ************************************************* **** *********
* Nombre: Delay_xMs()
* Función: Subrutina de retardo Después de la depuración del software, el programa de retardo medido es de aproximadamente 55us.
* Entrada: x
* Salida: Ninguna
******************** . ** ************************************************* *** /
void Delay_xMs(uint x)
{
uint i,j;
for(i=0; i { para(j=0; j<3; j++); } } /****************************************** ****** ************************* * Nombre: Play_Song() * Función: Reproducir timbre Programa de control * Entrada: i (Elige qué canción reproducir, 0 es "Te deseo paz", 1 es "No recojas las flores silvestres al borde de la carretera" * Salida: Ninguna ************************************ *********** *******************************/ nulo Play_Song(uchar i) { uchar Temp1,Temp2; uint Addr; Count = 0; contador de interrupciones a 0 Addr = i * 217; while(1) { Temp1 = SONG[Addr++]; if (Temp1 == 0xFF) / /rest { TR0 = 0; Delay_xMs(100); p> } else if (Temp1 == 0x00) //Símbolo de fin de canción { return; } else { Temp2 = SONG[Addr++]; TR0 = 1; mientras (1) { Hablar = ~Hablar; Retardo_ xMs(Temp1); if(Temp2 == Contar) { Contar = 0; romper; } } } } } /***** ************************************************** * ************* * Nombre: Main() * Función: Función principal * Entrada: Ninguna * Salida: Ninguna ******************************** *************************************/ void Principal () { Time0_Init(); // Inicialización de interrupción del temporizador 0 while(1) { Play_Song(0); //Play_Song(0) es para desearte paz Play_Song(1) es para las flores silvestres al borde del camino, por favor no las cortes } }