音乐播放器程序源代码及注释.docx
- 文档编号:4565621
- 上传时间:2022-12-06
- 格式:DOCX
- 页数:10
- 大小:17KB
音乐播放器程序源代码及注释.docx
《音乐播放器程序源代码及注释.docx》由会员分享,可在线阅读,更多相关《音乐播放器程序源代码及注释.docx(10页珍藏版)》请在冰豆网上搜索。
音乐播放器程序源代码及注释
音乐播放器程序源代码及注释:
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitduan=P2^6;
sbitkey1=P3^2;//按key1可切换花样
sbitkey2=P3^3;//按key2可切换歌曲
sbitfm=P2^4;//蜂鸣器连续的IO口
sbitP30=P3^0;//矩阵键盘的一列
ucharcodehuayang1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,
0xfd,0xfb,0xf7,0xef,0xdf,0xbf};//花样1
ucharcodehuayang2[]={0x7f,0xfe,0xbf,0xfd,0xdf,0xfb,0xef,0xf7,
0xef,0xfb,0xdf,0xfd,0xbf,0xfe};//花样2
ucharcodehuayang3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x0,
0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};
charcodehuayang4[]={0x55,0xaa,0xcc,0x33,0x99,0x66,0x0f,0xf0};
ucharcount1;//花样标志
ucharcount2;//歌曲标志
uchartimeh,timel,i;
//编程规则:
字节高位是简谱,低位是持续时间,
//代表多少个十六分音符
//1-7代表中央C调,8-E代表高八度,0代表停顿
//最后的0是结束标志
ucharcodeqnzl[]={//千年之恋
0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0x08,
//前奏
0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,
//竹林的灯火到过的沙漠
0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,
//七色的国度不断飘逸风中
0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,
//有一种神秘灰色的旋涡
0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,
//将我卷入了迷雾中
0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,
//看不清的双手
0x31,0x51,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7C,0x02,
//一朵花传来谁经过的温柔
0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,
//穿越千年的伤痛
0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,
//只为求一个结果
0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,
//你留下的轮廓指引我
0x42,0x63,0x83,0x83,0x91,0x91,
//黑夜中不寂寞
0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,
//穿越千年的哀愁
0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,
//是你在尽头等我
0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,
//最美丽的感动会值得
0x42,0x82,0x88,0x02,0x74,0x93,0x89,0xff//结束标志
//用一生守候
};
ucharcodejmszl[]={//寂寞沙洲冷
0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,
//自你走后心憔悴
0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14,
//白色油桐风中纷飞
0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0x08,0x28,
//落花似人有情这个季节
0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52,
//河畔的风放肆拼命地吹
0x51,0x51,0x31,0x32,0x31,0x32,0x81,0x72,0x63,
//不断拨弄离人的眼泪
0x62,0x71,0x81,0x72,0x61,0x61,0x52,0x31,0x21,0x32,0x51,0x54,
//那样浓烈的爱再也无法给
0x22,0x12,0x11,0x12,0x11,0x12,0x12,0x14,0x26,0x32,0x26,
//伤感一夜一夜
0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,
//当记忆的线缠绕过往支离破碎
0x02,0x32,0x81,0x81,0x81,0x81,0x62,0x52,0x34,
//是慌乱占据了心扉
0x31,0x81,0x81,0x81,0x61,0x91,0x82,
//有花儿伴着蝴蝶
0x51,0x51,0x51,0x51,0x31,0x61,0x53,
//孤雁可以双飞
0x21,0x11,0x21,0x11,0x22,0x11,0x21,0x26,
//夜深人静独徘徊
0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x52,
//当幸福恋人寄来红色分享喜悦
0x31,0x31,0x81,0x81,0x81,0x61,0x91,0x81,0x61,0x31,0x56,
//闭上双眼难过头也不敢回
0x32,0x32,0x81,0x81,0x81,0x81,0x91,0x81,0x61,0x81,0x61,0x51,0x31,0x51,0x34,
//仍然捡尽寒枝不肯安歇微带着后悔
0x21,0x31,0x51,0x31,0x21,0x11,0x61,0x21,0x16,
//寂寞沙洲我该思念谁
0xff};
ucharcodecuzhi[]={
0xff,0xff,//占位
0xFC,0x8E,//中央C调1-7
0xFC,0xED,
0xFD,0x43,
0xFD,0x6A,
0xFD,0xB3,
0xFD,0xF3,
0xFE,0x2D,
0xFE,0x47,//高八度1-7
0xFE,0x76,
0xFE,0xA1,
0xFE,0xC7,
0xFE,0xD9,
0xFE,0xF9,
0xFF,0x16
};
ucharyinyue[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x0,0x0};
//将音调转化为对应的LED样式
voiddelay1(uintz);//延时1MS
voiddelay(uintz);//延时165MS,即十六分音符
voidsong();
voidbeep();//蜂鸣器叫一声
main()
{ucharx;
count1=0;//流水灯无花样
count2=1;//唱第一首歌
P30=0;//选取矩阵键盘的一列
EA=1;//开总中断
EX0=1;//开外部中断0
IT0=1;//外部中断0下降沿触发方式
EX1=1;//开外部中断1
IT1=1;//外部中断1下降沿触发方式
TMOD=0x01;//定时器0工作在方式1
TH0=0;
TL0=0;
ET0=1;
while
(1)
{
if(count1!
=0)
{
switch(count1)
{
case1:
for(x=0;x<14;x++)
{
duan=1;
P1=huayang1[x];
beep();
delay1(300);
duan=0;
if(count1!
=1)
break;
}
break;
case2:
for(x=0;x<14;x++)
{
duan=1;
P1=huayang2[x];
beep();
delay1(300);
duan=0;
if(count1!
=2)
break;
}
break;
case3:
for(x=0;x<16;x++)
{
duan=1;
P1=huayang3[x];
beep();
delay1(300);
duan=0;
if(count1!
=3)
break;
}
break;
case4:
for(x=0;x<8;x++)
{
duan=1;
P1=huayang4[x];
beep();
delay1(300);
duan=0;
if(count1!
=4)
break;
}
break;
}
}
else
{
song();
delay1(1000);
}
}
}
voidint0()interrupt0
{
EA=0;//关总中断
delay1
(1);//去抖
if(key1==0)
{
count2=0;//不让蜂鸣器唱歌
TR0=0;
count1++;
if(count1==5)
count1=1;
}
EA=1;//开总中断
}
voidint1()interrupt2
{
EA=0;//关总中断
delay1
(1);//去抖
if(key2==0)
{
count1=0;//流水灯无花样
TR0=1;
i=0;//从头开始唱
count2++;
if(count2==3)
count2=1;
}
EA=1;//开总中断
}
voidtimer0()interrupt1//用于产生各种音调
{
TH0=timeh;
TL0=timel;
fm=~fm;
}
voidsong()
{
uinttemp;
ucharjp;//jp是简谱
i=0;
while
(1)
{if(count2==0)
{
break;
}
if(count2==1)//选曲
temp=qnzl[i];
if(count2==2)
temp=jmszl[i];
if(temp==0xff)
break;
jp=temp/16;//取数的高4位
duan=1;
P1=yinyue[jp];
duan=0;
if(jp!
=0)
{
timeh=cuzhi[jp*2];
timel=cuzhi[jp*2+1];
}
else
{
TR0=0;
fm=1;//关蜂鸣器
}
delay(temp%16);//取数的低4位
TR0=0;//唱完一个音停10MS
fm=1;
delay1(10);
TR0=1;
i++;
}
TR0=0;
fm=1;
}
voiddelay(uintz)//延时165MS,即十六分音符
{uintx,y;
for(x=z;x>0;x--)
for(y=19000;y>0;y--);
}
voiddelay1(uintz)//延时1MS
{uintx,y;
for(x=z;x>0;x--)
for(y=112;y>0;y--);
}
voidbeep()//蜂鸣器叫一声
{uchari;
for(i=0;i<50;i++)
{fm=~fm;
delay1
(1);
}
fm=1;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 音乐 播放 程序 源代码 注释