【自学嵌入式:51单片机】用51单片机+蜂鸣器播放《忘れてやらない》前奏
如题,跟着江科大学了一下,浅浅卖弄一下,让AI分析简谱,得出了一个音符应该是多少ms,一个四分之一拍是多少ms,其他和江科大蜂鸣器那节课的教学内容差不多,程序和开发板电路在后文会提到。
实现效果
具体见https://www.bilibili.com/video/BV17i81znEPh
开发板电路



程序
#include <REGX52.H>
#define SPEED 326
sbit beep = P2^5;
void Delay(unsigned int xms) //@11.0592MHz
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
unsigned int code FreqTable[]={
63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,
64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,
65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283,
0
};
unsigned char code Music[] = {
11, 16, 15, 11, 13, 11, 13, 8, 9, 10,
11, 16, 15, 11, 13, 11, 13, 16, 20,
11, 16, 15, 11, 13, 11, 13, 8, 9, 10,
11, 16, 15, 11, 13, 11, 13, 16, 20,
23, 16, 23, 16, 23, 16, 23, 25,
23, 16, 23, 16, 23, 20, 18, 16,
23, 16, 23, 16, 23, 16, 23, 25, 27, 24, 20, 18, 16,
13, 16, 18, 20, 16, 25, 20, 18, 16,
20, 23, 25, 28, 25, 32, 30, 28, 33, 32, 33, 35, 32, 30, 28
};
unsigned char code Pai[] = {
2, 2, 2, 2, 2, 2, 2, 2, 2, 4,
2, 2, 2, 2, 2, 2, 2, 2, 4,
2, 2, 2, 2, 2, 2, 2, 2, 2, 4,
2, 2, 2, 2, 2, 2, 2, 2, 4,
2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4,
2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 4
};
unsigned char MusicSelect = 0;
unsigned char MusicLen = 91;
unsigned char FreqSelect = 0;
//初始化定时器0
void initTimer0()
{
TMOD=0x01;
TL0 = FreqTable[FreqSelect]%256;
TH0 = FreqTable[FreqSelect]/256; //设置定时初值
EA = 1; //允许中断
ET0 = 1; //允许定时器0中断
TR0 = 1; //定时器0开始工作
}
void timer0() interrupt 1
{
if(FreqTable[FreqSelect])
{
TL0 = FreqTable[FreqSelect]%256;
TH0 = FreqTable[FreqSelect]/256;
if(FreqSelect != 255)
{
beep = !beep;
}
else
{
beep = 1;
}
}
}
void main()
{
initTimer0();
while(1)
{
FreqSelect = Music[MusicSelect];
Delay(SPEED / 4 * Pai[MusicSelect]);
MusicSelect++;
if(MusicSelect < MusicLen)
{
//隔断每个音符
TR0 = 0;
Delay(20);
TR0 = 1;
}
else
{
TR0 = 0;
Delay(10000);
MusicSelect=0;
}
}
}
浙公网安备 33010602011771号