音乐盒Word格式文档下载.docx
- 文档编号:19575638
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:21
- 大小:207.57KB
音乐盒Word格式文档下载.docx
《音乐盒Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《音乐盒Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
1.FairyTale"
"
2.LoveTransfer"
3.GirlWithWing"
"
4.TheSameSong"
5.TwoButterfly"
6.CoralSea"
};
charcodesinger[][12]={"
Guangliang"
Chenyixun"
Rongzuer"
Liuchang"
Panglong"
Zhoujielun"
ucharcodelamp[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//以下为播放音乐的设置
#defineSYSTEM_OSC12000000
#defineSOUND_SPACE4/5
uintcodeFreTab[12]={262,277,294,311,330,349,369,392,415,440,466,494};
//原始频率表
ucharcodeSignTab[7]={0,2,4,5,7,9,11};
//1~7在频率表中的位置
ucharcodeLengthTab[7]={1,2,4,8,16,32,64};
ucharSound_Temp_TH0,Sound_Temp_TL0;
//音符定时器初值暂存
ucharSound_Temp_TH1,Sound_Temp_TL1;
//音长定时器初值暂存
bitstop;
/***********************延时函数(单位ms)**************************/
voiddelay(uintz)
{
uintx;
uchary;
for(x=z;
x>
0;
x--)
for(y=112;
y>
y--);
}
/***********************************************************
******************LCD1602驱动程序******************
************************************************************/
忙检测
voidLCD1602_check_busy()
LCD1602_DATA=0xff;
LCD1602_RS=0;
LCD1602_RW=1;
LCD1602_EN=1;
while(LCD1602_DATA&
0x80);
LCD1602_EN=0;
/**********************************************************
写指令
voidLCD1602_write_cmd(ucharcmd)
LCD1602_check_busy();
LCD1602_RW=0;
LCD1602_DATA=cmd;
_nop_();
写数据
*************************************************************/
voidLCD1602_write_data(uchardat)
LCD1602_RS=1;
LCD1602_DATA=dat;
1602初始化
voidLCD1602_init()
LCD1602_write_cmd(0x38);
//8位数据,双列显示,5*7字形
LCD1602_write_cmd(0x0c);
//开显示,关光标,光标不闪烁
LCD1602_write_cmd(0x01);
//清屏
/************************************************************
设置显示坐标
voidLCD1602_set_postion(ucharx,uchary)
if(!
y)
LCD1602_write_cmd(0x80+x);
elseif(y)
LCD1602_write_cmd(0xc0+x);
指定位置写字符
voidLCD1602_write_char(ucharx,uchary,ucharchardata)
LCD1602_set_postion(x,y);
LCD1602_write_data(chardata);
指定位置写字符串
voidLCD1602_write_string(ucharx,uchary,uchar*string)
while((*string)!
='
\0'
)
{
LCD1602_write_data(*string);
string++;
}
/********************************************************************
************播放音乐函数************
********************************************************************/
voidInitialSound()
{
BeepIO=0;
Sound_Temp_TH1=(65535-(1/1200)*SYSTEM_OSC)/256;
//计算TL1应装入的初值(10ms的初装值)
Sound_Temp_TL1=(65535-(1/1200)*SYSTEM_OSC)%256;
//计算TH1应装入的初值
TH1=Sound_Temp_TH1;
TL1=Sound_Temp_TL1;
TMOD|=0x11;
ET0=1;
ET1=0;
TR0=0;
TR1=0;
EA=1;
voidBeepTimer0()interrupt1//音符发生中断
if(esc==0)
{
delay(5);
if(esc==0)
stop=1;
while(!
esc);
////////////////
BeepIO=!
BeepIO;
TH0=Sound_Temp_TH0;
TL0=Sound_Temp_TL0;
//**************************************************************************
voidPlay(unsignedchar*Sound,unsignedcharSignature,unsignedOctachord,unsignedintSpeed)
unsignedintNewFreTab[12];
//新的频率表
unsignedchari,j;
unsignedintPoint,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength;
unsignedcharTone,Length,SL,SH,SM,SLen,XG,FD;
for(i=0;
i<
12;
i++)//根据调号及升降八度来生成新的频率表
j=i+Signature;
if(j>
11)
j=j-12;
NewFreTab[i]=FreTab[j]*2;
else
NewFreTab[i]=FreTab[j];
if(Octachord==1)
NewFreTab[i]>
>
=2;
elseif(Octachord==3)
NewFreTab[i]<
<
}
SoundLength=0;
while(Sound[SoundLength]!
=0x00)//计算歌曲长度
SoundLength+=2;
Point=0;
Tone=Sound[Point];
Length=Sound[Point+1];
//读出第一个音符和它时时值
LDiv0=12000/Speed;
//算出1分音符的长度(几个10ms)
LDiv4=LDiv0/4;
//算出4分音符的长度
LDiv4=LDiv4-LDiv4*SOUND_SPACE;
//普通音最长间隔标准
TR1=1;
while(Point<
SoundLength)
SL=Tone%10;
//计算出音符
SM=Tone/10%10;
//计算出高低音
SH=Tone/100;
//计算出是否升半
CurrentFre=NewFreTab[SignTab[SL-1]+SH];
//查出对应音符的频率
if(SL!
=0)
if(SM==1)CurrentFre>
=2;
//低音
if(SM==3)CurrentFre<
//高音
Temp_T=65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);
//计算计数器初值
Sound_Temp_TH0=Temp_T/256;
Sound_Temp_TL0=Temp_T%256;
TL0=Sound_Temp_TL0+12;
//加12是对中断延时的补偿
SLen=LengthTab[Length%10];
//算出是几分音符
XG=Length/10%10;
//算出音符类型(0普通1连音2顿音)
FD=Length/100;
LDiv=LDiv0/SLen;
//算出连音音符演奏的长度(多少个10ms)
if(FD==1)
LDiv=LDiv+LDiv/2;
if(XG!
=1)
if(XG==0)//算出普通音符的演奏长度
if(SLen<
=4)
LDiv1=LDiv-LDiv4;
LDiv1=LDiv*SOUND_SPACE;
LDiv1=LDiv/2;
//算出顿音的演奏长度
LDiv1=LDiv;
if(SL==0)LDiv1=0;
LDiv2=LDiv-LDiv1;
//算出不发音的长度
if(SL!
TR0=1;
for(i=LDiv1;
i>
i--)//发规定长度的音
while(TF1==0);
TF1=0;
if(LDiv2!
TR0=0;
BeepIO=0;
for(i=LDiv2;
i--)//音符间的间隔
////////////////
if(stop)
Point=SoundLength;
///////////////
Point+=2;
Tone=Sound[Point];
Length=Sound[Point+1];
///////////////
stop=0;
BeepIO=1;
ET0=0;
EA=0;
//////////////
//歌曲《童话》
ucharcodefairy_tale[]={0x0F,0x67,0x19,0x03,0x18,0x03,0x17,0x02,0x17,0x03,
0x18,0x04,0x17,0x0E,0x17,0x02,0x17,0x03,0x18,0x03,
0x17,0x03,0x18,0x03,0x17,0x03,0x16,0x04,0x15,0x18,
0x15,0x03,0x17,0x03,0x19,0x03,0x1A,0x02,0x1A,0x03,
0x1A,0x04,0x19,0x0E,0x19,0x03,0x16,0x03,0x16,0x03,
0x18,0x04,0x17,0x0E,0x17,0x15,0x15,0x03,0x17,0x03,
0x19,0x03,0x1A,0x02,0x1A,0x03,0x1A,0x04,0x19,0x0E,
0x19,0x03,0x16,0x03,0x16,0x03,0x18,0x03,0x17,0x03,
0x18,0x03,0x17,0x03,0x16,0x04,0x15,0x0E,0x15,0x02,
0x16,0x03,0x17,0x03,0x10,0x02,0x10,0x03,0x15,0x03,
0x15,0x02,0x11,0x02,0x15,0x14,0x16,0x03,0x17,0x03,
0x10,0x02,0x10,0x03,0x15,0x03,0x15,0x0D,0x11,0x03,
0x11,0x0D,0x15,0x03,0x15,0x00,0x00,0x00};
//爱情呼叫转移
ucharcodelove_transfer[]={0x0F,0x03,0x10,0x03,0x15,0x03,0x16,0x03,0x15,0x03,
0x16,0x03,0x17,0x0D,0x17,0x03,0x17,0x0D,0x17,0x03,
0x17,0x03,0x16,0x03,0x15,0x03,0x16,0x03,0x17,0x0D,
0x17,0x03,0x17,0x0D,0x17,0x03,0x17,0x03,0x16,0x03,
0x15,0x03,0x16,0x67,0x15,0x0E,0x15,0x03,0x10,0x03,
0x15,0x67,0x16,0x0E,0x16,0x03,0x17,0x03,0x17,0x66,
0x0F,0x03,0x10,0x03,0x15,0x03,0x16,0x03,0x15,0x03,
0x16,0x03,0x15,0x0D,0x15,0x03,0x19,0x03,0x19,0x03,
0x17,0x03,0x16,0x03,0x17,0x03,0x16,0x03,0x15,0x0D,
0x15,0x03,0x17,0x0D,0x17,0x03,0x17,0x03,0x16,0x03,
0x15,0x03,0x16,0x67,0x16,0x0E,0x16,0x03,0x16,0x03,
0x16,0x67,0x15,0x0E,0x15,0x03,0x10,0x03,0x16,0x66,
0x16,0x03,0x17,0x0D,0x17,0x03,0x19,0x0D,0x19,0x03,
0x17,0x03,0x1A,0x0D,0x1A,0x03,0x17,0x03,0x16,0x03,
0x15,0x67,0x16,0x0E,0x16,0x03,0x17,0x03,0x19,0x66,
0x16,0x03,0x15,0x0D,0x15,0x03,0x1A,0x0D,0x1A,0x03,
0x19,0x03,0x17,0x03,0x17,0x03,0x16,0x03,0x15,0x0D,
0x16,0x67,0x15,0x0E,0x15,0x03,0x10,0x03,0x15,0x66,
0x15,0x03,0x1F,0x03,0x1B,0x03,0x1F,0x03,0x1A,0x03,
0x1F,0x67,0x1A,0x0E,0x1A,0x03,0x19,0x03,0x1A,0x03,
0x19,0x03,0x17,0x03,0x16,0x03,0x17,0x03,0x19,0x03,
0x1A,0x03,0x19,0x0D,0x19,0x03,0x19,0x03,0x1A,0x03,
0x19,0x03,0x1A,0x67,0x1A,0x0E,0x1A,0x03,0x1A,0x03,
0x1A,0x67,0x19,0x0E,0x19,0x03,0x1A,0x03,0x19,0x03,
0x17,0x0D,0x17,0x16,0x15,0x03,0x16,0x03,0x17,0x03,
0x19,0x03,0x17,0x03,0x16,0x03,0x15,0x0D,0x15,0x03,
0x15,0x03,0x16,0x03,0x17,0x03,0x1A,0x03,0x17,0x03,
0x16,0x03,0x15,0x0D,0x15,0x03,0x15,0x03,0x15,0x03,
0x15,0x03,0x1F,0x67,0x1F,0x0E,0x1F,0x03,0x1F,0x03,
0x1F,0x67,0x1A,0x0E,0x1A,0x03,0x1F,0x03,0x1A,0x66,
0x19,0x0D,0x19,0x03,0x15,0x03,0x1F,0x03,0x1B,0x03,
0x1F,0x03,0x1B,0x03,0x1A,0x03,0x19,0x03,0x1A,0x03,
0x15,0x03,0x16,0x03,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 音乐盒