c51 tiene un problema al activar el timbre para reproducir música. El problema está clasificado en la categoría incorrecta. Compruébelo desde el siguiente enlace.
Tengo un programa en C de la canción Happy Birthday para tu referencia. Oscilador de cristal 5,3M, salida P1.1
.
#include
#define uchar unsigned char
#define uint unsigned int
sbit BEEP=P1^ 1;
//La tabla de frecuencias de notas de la canción Feliz cumpleaños, diferentes frecuencias están determinadas por diferentes retrasos
código uchar SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,
212,212,106,126,159,169,190,119,119,126,159,142,159,0};
//Tabla de ritmos de la canción de Feliz Cumpleaños, el ritmo determina la duración de reproducción de cada nota
código uchar SONG_LONG[]={9,3,12, 12 ,12,24,9,3,12,12,12,24,
9,3,12,12,12,12,12,9,3,12,12,12,24 , 0};
//Retraso
void DelayMS(uint x)
{
uchar t;
while(x--)
for(t=0;t<120;t++);
}
//Función de reproducción
void PlayMusic()
{uint i=0,j,k;
while(SONG_LONG[i]!=0||SONG_TONE[i]!=0 )
{ //Toca cada nota, SONG_LONG es la duración del tiempo
for(j=0;j { BEEP=~BEEP; //La tabla de retardo SONG_TONE determina la frecuencia de cada nota for(k=0;k } DelayMS(300); i++; } } void main() { BEEP=0; mientras(1) { PlayMusic(); //Reproducir Feliz Cumpleaños DelayMS(300); //Pausar por un período de tiempo después de reproducir } }