📄 song.c
字号:
#include<reg51.h>
sbit Beep=P3^0;
unsigned int code MusicFrequency[]={0xF88C,0xF95B,0xFA15,0xFA67,0xFB04,0xFB90,0xFC0C,
0xFC44,0xFCAC,0xFD09,0xFD34,0xFD82,0xFDC8,0xFE06,
0xFE22,0xFE56,0xFE85,0xFE9A,0xFEC1,0xFEE4,0xFF03};
/***************************************************************************
音乐简谱输入,三个数字决定一个音,第一个为音调。输入范围:1-7,
第二个为音调高低。输入范围:0-2,(0低音,1中音,2高音)
第三个为音长。输入范围:1-8,(音长为n*1/4节)
****************************************************************************/
unsigned char code song[]={5,0,2,5,0,2,6,0,4,5,0,4,1,1,4,7,0,8,5,0,2,5,0,2,
6,0,4,5,0,4,2,1,4,1,1,8,5,0,2,5,0,2,5,1,4,3,1,4,1,1,4,
7,0,4,6,0,4,4,1,2,4,1,2,3,1,4,1,1,4,2,1,4,1,1,8,0,0,0};
unsigned int SongFreqValue;
void Init(void)
{
IE = 0x82;
TMOD = 0x01;
TR0=1;
}
void irsTime0() interrupt 1
{
Beep=~Beep;
TH0=SongFreqValue/256;
TL0=SongFreqValue%256;
}
void delay1ms(unsigned int count)
{
unsigned int i;
while(count--)
{
for(i=0;i<100;i++);
}
}
void delay1beat(unsigned char number)
{
while(number--)
{
delay1ms(125);
}
}
void main(void)
{
unsigned char i=0;//音乐位置
unsigned char musicTone=0;//音调
unsigned char musicHiLi=0;//音调高低
unsigned char musicLong=0;//音节长度,以1/4节拍为一个单位(125ms)
Init();
while(1)
{
for(i=0;;i++)
{
musicTone=song[i*3];
musicHiLi=song[i*3+1];
musicLong=song[i*3+2];
if(musicTone==0) break;
SongFreqValue=MusicFrequency[musicTone+musicHiLi*7];
delay1beat(musicLong);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -