#include <reg52.h>
sbit BUZZ = P2^5;
unsigned int code NoteFrequ[] = { // Zhongyin 1-7 he Gaoyin 1-7 DuiYingPinLvLieBiao
523, 587, 659, 698, 784, 880, 988, //Zhongyin 1-7
1047, 1175, 1319, 1397, 1568, 1760, 1976 //Gaoyin 1-7
};
unsigned int code NoteReload[] = { //Zhongyin 1-7 he gaoyin 1-7
65536 - (11059200/12) / (262*2), //Diyin 1
65536 - (11059200/12) / (294*2), //2
65536 - (11059200/12) / (330*2), //3
65536 - (11059200/12) / (349*2), //4
65536 - (11059200/12) / (392*2), //5
65536 - (11059200/12) / (440*2), //6
65536 - (11059200/12) / (494*2), //7
65536 - (11059200/12) / (523*2), //Zhongyin 1
65536 - (11059200/12) / (587*2), //2
65536 - (11059200/12) / (659*2), //3
65536 - (11059200/12) / (698*2), //4
65536 - (11059200/12) / (784*2), //5
65536 - (11059200/12) / (880*2), //6
65536 - (11059200/12) / (988*2), //7
65536 - (11059200/12) / (1047*2), //Gaoyin 1
65536 - (11059200/12) / (1175*2), //2
65536 - (11059200/12) / (1319*2), //3
65536 - (11059200/12) / (1397*2), //4
65536 - (11059200/12) / (1568*2), //5
65536 - (11059200/12) / (1760*2), //6
65536 - (11059200/12) / (1976*2), //7
};
bit enable = 1;
bit tmrflag = 0;
unsigned char T0RH = 0xFF;
unsigned char T0RL = 0x00;
void PlayTwoTiger();
void main()
{
unsigned int i;
P0=0XFF;
EA = 1;
TMOD = 0x01;
TH0 = T0RH;
TL0 = T0RL;
ET0 = 1;
TR0 = 1;
while (1)
{
PlayTwoTiger();
for (i=0; i<40000; i++);
}
}
void PlayTwoTiger()
{
unsigned char beat;
unsigned char note;
unsigned int time = 0;
unsigned int beatTime = 0;
unsigned int soundTime = 0;
unsigned char code TwoTigerNote[] = {
1, 2, 3, 1, 1, 2, 3, 1, 3, 4, 5, 3, 4, 5,
5,6, 5,4, 3, 1, 5,6, 5,4, 3, 1, 1, 5, 1, 1, 5, 1,
};
unsigned char code TwoTigerBeat[] = {
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 8,
3,1, 3,1, 4, 4, 3,1, 3,1, 4, 4, 4, 4, 8, 4, 4, 8,
};
for (beat=0; beat<sizeof(TwoTigerNote); )
{
while (!tmrflag);
tmrflag = 0;
if (time == 0)
{
note = TwoTigerNote[beat] - 1;
T0RH = NoteReload[note] >> 8;
T0RL = NoteReload[note];
beatTime = (TwoTigerBeat[beat] * NoteFrequ[note]) >> 2;
soundTime = beatTime - (beatTime >> 2);
enable = 1;
time++;
}
else
{
if (time >= beatTime)
{
time = 0;
beat++;
}
else
{
time++;
if (time == soundTime)
{
enable = 0;
}
}
}
}
}
void InterruptTimer0() interrupt 1
{
TH0 = T0RH;
TL0 = T0RL;
tmrflag = 1;
if (enable)
BUZZ = ~BUZZ;
else
BUZZ = 1;
}
51单片机——《两只老虎》音乐
最新推荐文章于 2024-05-30 20:10:06 发布