基于51单片机的音乐盒播放器设计
设计主要包含Proteus仿真+程序代码+设计报告+原理图+讲解视频
一、开发环境
仿真图版本:proteus7.8以上
程序代码:KEIL4/KEIL5
设计编号:B017
二、主要功能
1、设置4个按键:上一首、下一首、播放、停止;
2、内置10首音乐,使用LCD12864显示歌曲名字;
3、指示出按键选定的音乐,播放过程通过LED指示;
4、内置歌曲为:荷塘月色、一剪梅、花心、红尘情歌、铃儿响叮当、两只老虎、千年等一回、青花瓷、时间煮雨、照花台。
架构:

AT89C51可以替换为AT89C52,实物可以换作STC89C51,STC89C52
本资料下载链接(可点击):
KEY_B017 基于51单片机的八音盒10首歌
链接: https://pan.baidu.com/s/1vdKudnuLyLfgFoA1nVhoAA?pwd=ihgq
提取码: ihgq
三、仿真设计
打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。


四、程序代码
工程文件使用Keil4/keil5打开,编译产生hex加载到对应的单片机中。

//===================================================
//主函数
void main()
{
TMOD=0X01;//定时器0,工作方式1。
TH0=0XFC; //定时1ms
TL0=0X18;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
while (1)
{
led=!TR0;
if(!TR0)
{
if(!k1)//上一首
{
beep=1;delay(1000);
if(gequ>0)
gequ--;
else
gequ=9;
num=0;
disp();
while(!k1);
}
if(!k2)//下一首
{
beep=1;delay(1000);
if(gequ<9)
gequ++;
else
gequ=0;
num=0;
disp();
while(!k2);
}
}
if(!k3)//播放
{
TR0=1;
}
if(!k4)//停止
{
TR0=0;beep=1;
num=0;
}
}
}
//定时器0中断
void Timer0() interrupt 1
{
TH0=a; //给定时器赋初值
TL0=b;
switch(gequ)
{
case 0:
if(gequ1[num]!=0)
beep=!beep;
if(times<first)//节拍数未到,计数+1
times++; //计时
else
{
times=0; //节拍清零
num+=2; //下一个音符
if(gequ1[num]==0xff) //结束
{
num=0;
TR0=0;//关闭定时器
beep=1;
}
a=(65536-music[gequ1[num]])/256; //设置初值
b=(65536-music[gequ1[num]])%256;
first=gequ1[num+1]*pai16[gequ1[num]];
}
break;
case 1:
if(gequ2[num]!=0)
beep=!beep;
if(times<first)//节拍数未到,计数+1
times++; //计时
else
{
times=0; //节拍清零
num+=2; //下一个音符
if(gequ2[num]==0xff) //结束
{
num=0;
TR0=0;//关闭定时器
beep=1;
}
a=(65536-music[gequ2[num]])/256; //设置初值
b=(65536-music[gequ2[num]])%256;
first=gequ2[num+1]*pai16[gequ2[num]];
}
break;
case 2:
if(gequ3[num]!=0)
beep=!beep;
if(times<first)//节拍数未到,计数+1
times++; //计时
else
{
times=0; //节拍清零
num+=2; //下一个音符
if(gequ3[num]==0xff) //结束
{
num=0;
TR0=0;//关闭定时器
beep=1;
}
a=(65536-music[gequ3[num]])/256; //设置初值
b=(65536-music[gequ3[num]])%256;
first=gequ3[num+1]*pai16[gequ3[num]];
}
break;
case 3:
if(gequ4[num]!=0)
beep=!beep;
if(times<first)//节拍数未到,计数+1
times++; //计时
else
{
times=0; //节拍清零
num+=2; //下一个音符
if(gequ4[num]==0xff) //结束
{
num=0;
TR0=0;//关闭定时器
beep=1;
}
a=(65536-music[gequ4[num]])/256; //设置初值
b=(65536-music[gequ4[num]])%256;
first=gequ4[num+1]*pai16[gequ4[num]];
}
break;
case 4:
if(gequ5[num]!=0)
beep=!beep;
if(times<first)//节拍数未到,计数+1
times++; //计时
else
{
times=0; //节拍清零
num+=2; //下一个音符
if(gequ5[num]==0xff) //结束
{
num=0;
TR0=0;//关闭定时器
beep=1;
}
a=(65536-music[gequ5[num]])/256; //设置初值
b=(65536-music[gequ5[num]])%256;
first=gequ5[num+1]*pai16[gequ5[num]];
}
break;
case 5:
if(gequ6[num]!=0)
beep=!beep;
if(times<first)//节拍数未到,计数+1
times++; //计时
else
{
times=0; //节拍清零
num+=2; //下一个音符
if(gequ6[num]==0xff) //结束
{
num=0;
TR0=0;//关闭定时器
beep=1;
}
a=(65536-music[gequ6[num]])/256; //设置初值
b=(65536-music[gequ6[num]])%256;
first=gequ6[num+1]*pai16[gequ6[num]];
}
break;
case 6:
if(gequ7[num]!=0)
beep=!beep;
if(times<first)//节拍数未到,计数+1
times++; //计时
else
{
times=0; //节拍清零
num+=2; //下一个音符
if(gequ7[num]==0xff) //结束
{
num=0;
TR0=0;//关闭定时器
beep=1;
}
a=(65536-music[gequ7[num]])/256; //设置初值
b=(65536-music[gequ7[num]])%256;
first=gequ7[num+1]*pai16[gequ7[num]];
}
break;
case 7:
if(gequ8[num]!=0)
beep=!beep;
if(times<first)//节拍数未到,计数+1
times++; //计时
else
{
times=0; //节拍清零
num+=2; //下一个音符
if(gequ8[num]==0xff) //结束
{
num=0;
TR0=0;//关闭定时器
beep=1;
}
a=(65536-music[gequ8[num]])/256; //设置初值
b=(65536-music[gequ8[num]])%256;
first=gequ8[num+1]*pai16[gequ8[num]];
}
break;
case 8:
if(gequ9[num]!=0)
beep=!beep;
if(times<first)//节拍数未到,计数+1
times++; //计时
else
{
times=0; //节拍清零
num+=2; //下一个音符
if(gequ9[num]==0xff) //结束
{
num=0;
TR0=0;//关闭定时器
beep=1;
}
a=(65536-music[gequ9[num]])/256; //设置初值
b=(65536-music[gequ9[num]])%256;
first=gequ9[num+1]*pai16[gequ9[num]];
}
break;
case 9:
if(gequ10[num]!=0)
beep=!beep;
if(times<first)//节拍数未到,计数+1
times++; //计时
else
{
times=0; //节拍清零
num+=2; //下一个音符
if(gequ10[num]==0xff) //结束
{
num=0;
TR0=0;//关闭定时器
beep=1;
}
a=(65536-music[gequ10[num]])/256; //设置初值
b=(65536-music[gequ10[num]])%256;
first=gequ10[num+1]*pai16[gequ10[num]];
}
}
}

五、视频讲解
主要包括仿真运行讲解。
六、原理图

元器件清单:

七、设计报告

八、资料清单&&下载链接

本资料下载链接(可点击):
链接: https://pan.baidu.com/s/1vdKudnuLyLfgFoA1nVhoAA?pwd=ihgq
提取码: ihgq
更多资源 点击下方链接:
7281

被折叠的 条评论
为什么被折叠?



