数字音乐盒设计说明.docx
《数字音乐盒设计说明.docx》由会员分享,可在线阅读,更多相关《数字音乐盒设计说明.docx(35页珍藏版)》请在冰豆网上搜索。
数字音乐盒设计说明
文理学院
综合课程设计
(一)
IntegratedCurriculumDesign
(1)
所在院系
信息工程系
专业名称
电子信息工程
班级
1001
题目
数字音乐盒设计
指导教师
成员
完成时间
2012.12.28
一、设计任务及要求:
设计任务:
设计一个数字音乐盒程序。
要求:
预写3个曲子
可以实现播放/暂停、上一曲/下一曲功能
有开机欢迎词,播放曲目时LCD屏幕上显示曲目名称
指导教师签名:
2012年12月28日
二、指导教师评语:
指导教师签名:
2012年12月28日
三、成绩
验收盖章
2012年12月28日
数字音乐盒的设计
1设计目的
(1)熟悉用于单片机C语言的一些用法。
(2)掌握单片机的基本功能。
(3)了解程序是如何控制硬件。
2设计思路
音乐部分用控制I/O口高低电平变化的快慢来改变发出音符的频率(即不同唱名的音)
按键部分利用中断来控制播放/暂停、上曲/下曲功能
3设计过程
3.1方案论证
该程序总体分为三个部分:
音乐部分、按键部分、显示部分。
音乐部分实现不用频率不同节拍的音构成完整曲目;
按键部分实现播放/暂停(key1)、上曲/下曲功能;(key2/key3)
显示部分实现开机问候语和曲目播放中曲名的显示;
3.2程序设计
音符部分:
while(x{
speaker=1;
delayus(uintb);
speaker=0;
delayus(uintb)
}
x=0;
按键部分(播放/暂停)
voidkeyscan()
{
if(key1==0)
{
delayms(10);
if(key1==0)
{
ET0=~ET0;//通过控制中断开关ET0来实现播放暂停
}
}
上一曲/下一曲部分
}
voidT0_time()interrupt1
{
LCD部分程序(显示歌曲状态为暂停)
while
(1)
{if(key1==0)
{
delayms(10);
if(key1==0)
}
LCD 部分程序
break;
}
}
voidINT0_time()interrupt0
{
keyscan();
}
按键部分(上曲/下曲)
{
key1部分
if(key2==0)
{
delayms(10);
if(key2==0)
{
n--;
if(n==0)
n=3;}}
if(key3==0)
{
delayms(10);
if(key3==0)
{
n++;
if(n==4)
n=1;}}
}
while(x{
speaker=1;
delayus(uintb);
if(n!
=c)//c填的是曲目序号
break;
speaker=0;
delayus(uintb);
if(n!
=c)
break;
}
4程序调试与结果分析
4.1程序调试
在程序没有写完之前,如果前面声明了子函数,但是后面没有用到的话,会出现警告。
只有程序写完整了警告才会不再出现;还有其中key=1和key==1的意义不同,编译之后系统也判为警告,但实际上只能写作key==1,写程序时应注意。
4.2结果分析
在程序只完成了音乐部分和按键部分时(即没有加入显示部分时),用proteus仿真时反应速度较理想。
在加入显示部分后,播放第一曲时按下“下一曲”键会过几秒才调到第二曲;播放曲目时按下“播放/暂停”键大概超过半秒才会暂停,而从暂停到继续播放时快速点击按键即可。
上述情况仍存在,但不影响音乐盒基本功能。
5设计体会
通过这次对数字音乐盒的设计与制作,我大概明白了设计一个具有一定功能的产品的部分基本步骤,了解到自己才刚起步,还有许多东西等着我去学习,我会在不断学习与实践中累积经验,向更高的目标迈进。
参考文献(至少5篇)
[1]新概念51单片机C语言教程(郭天祥著)
[2]互联网.baidu.
[3]老师、同学的指导
附件
完整程序(分段显示程序)
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable[]="WELCOME";
ucharcodetable1[]="THEMUSICBOX";
ucharcodetable2[]="STATE:
ON";
ucharcodetable3[]="STATE:
STOP";
ucharcodetable4[]="";
ucharcodetable5[]="MUSICNO.1";
ucharcodetable6[]="MUSICNO.2";
ucharcodetable7[]="MUSICNO.3";
sbitspeaker=P2^7;
sbitkey1=P2^0;
sbitkey2=P2^1;
sbitkey3=P2^2;
sbitlcden=P3^4;
sbitlcdrs=P3^5;
ucharx,a,n=1,num,f,;
uinty;
voiddelayus(uint);
voiddelayms(uint);
voidmusicalnotea(uchar,uint);
voidmusicalnoteb(uchar,uint);
voidmusicalnotec(uchar,uint);
voidwrite_(uchar)
{
lcdrs=0;
P1=;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
voidwrite_data(uchardate)
{
lcdrs=1;
P1=date;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
voidclean2()
{
write_(0x80+0x40);
for(num=0;num<16;num++)
{
write_data(table4[num]);
delayms(5);
}
}
voidclean1()
{
write_(0x80);
for(num=0;num<16;num++)
{
write_data(table4[num]);
delayms(5);
}
}
voidkeyscan()
{
if(key1==0)
{
delayms(10);
if(key1==0)
{
ET0=~ET0;
}
}
if(key2==0)
{
delayms(10);
if(key2==0)
{
n--;
if(n==0)
n=3;
}
}
if(key3==0)
{
delayms(10);
if(key3==0)
{
n++;
if(n==4)
n=1;
}
}
}
voidinit()
{lcden=0;
write_(0x38);
write_(0x0c);
write_(0x06);
write_(0x01);
TMOD=0x11;
EA=1;
ET1=1;
TR1=1;
ET0=0;
TR0=1;
IT0=1;
EX0=1;
x=0;
}
voidinternationalsong()
{
musicalnotea(3,269);//低A
musicalnotea(9,238);//低B
musicalnotea(18,198);//D
delayus(1000);
x=0;
musicalnotea(6,198);//D
musicalnotea(12,223);//C
musicalnotea(12,238);//低B
musicalnotea(18,269);//低A
musicalnotea(6,238);//低B
delayus(1000);
x=0;
musicalnotea(3,238);//低B
musicalnotea(15,223);//C
musicalnotea(3,238);//低B
musicalnotea(3,223);//C
musicalnotea(18,238);//低B
delayus(1000);
x=0;
musicalnotea(6,238);//低B
musicalnotea(18,269);//低A
delayus(1000);
x=0;
musicalnotea(6,269);//低A
musicalnotea(24,298);//低G
delayms(600);
x=0;
musicalnotea(12,198);//D
musicalnotea(18,148);//G
musicalnotea(6,158);//#F
musicalnotea(6,133);//A
musicalnotea(6,148);//G
musicalnotea(6,198);//D
musicalnotea(6,238);//低B
musicalnotea(18,178);//E
delayus(1000);
x=0;
musicalnotea(6,178);//E
musicalnotea(12,223);//C
delayms(300);
x=0;
musicalnotea(6,178);//E
musicalnotea(18,133);//A
musicalnotea(6,148);//G
musicalnotea(6,158);//#F
musicalnotea(6,178);//E
musicalnotea(6,198);//D
musicalnotea(6,223);//C
musicalnotea(24,238);//低B
delayms(600);
x=0;
musicalnotea(12,198);//D
musicalnotea(18,148);//G
musicalnotea(6,158);//#F
musicalnotea(6,133);//A
musicalnotea(6,148);//G
musicalnotea(6,198);//D
musicalnotea(6,238);//低B
musicalnotea(18,178);//E
delayus(1000);
x=0;
musicalnotea(6,178);//E
musicalnotea(6,223);//C
musicalnotea(6,178);//E
musicalnotea(6,133);//A
musicalnotea(6,148);//G
musicalnotea(12,158);//#F
musicalnotea(12,133);//A
musicalnotea(12,111);//高C
musicalnotea(12,158);//#F
musicalnotea(30,148);//G
delayms(300);
x=0;
musicalnotea(9,118);//B
musicalnotea(3,133);//A
musicalnotea(24,158);//#F
musicalnotea(6,178);//E
musicalnotea(6,158);//#F
musicalnotea(6,148);//G
musicalnotea(6,178);//E
musicalnotea(24,158);//#F
musicalnotea(12,198);//D
musicalnotea(6,210);//#C
musicalnotea(6,198);//D
musicalnotea(18,178);//E
delayus(1000);
x=0;
musicalnotea(6,178);//E
musicalnotea(18,133);//A
musicalnotea(6,148);//G
musicalnotea(30,158);//#F
delayms(300);
x=0;
musicalnotea(12,133);//A
delayus(1000);
x=0;
musicalnotea(18,133);//A
musicalnotea(6,158);//#F
musicalnotea(6,198);//D
delayus(1000);
x=0;
musicalnotea(6,198);//D
musicalnotea(6,210);//#C
musicalnotea(6,198);//D
musicalnotea(24,118);//B
musicalnotea(6,148);//G
musicalnotea(6,178);//E
musicalnotea(6,158);//#F
musicalnotea(6,148);//G
musicalnotea(12,158);//#F
musicalnotea(12,133);//A
musicalnotea(12,148);//G
musicalnotea(12,178);//E
musicalnotea(30,198);//D
delayms(300);
x=0;
musicalnotea(9,118);//B
musicalnotea(3,133);//A
musicalnotea(24,148);//G
musicalnotea(18,198);//D
musicalnotea(6,238);//低B
musicalnotea(24,178);//E
musicalnotea(6,223);//C
delayms(300);
x=0;
musicalnotea(9,133);//A
musicalnotea(3,148);//G
musicalnotea(24,158);//#F
musicalnotea(12,178);//E
musicalnotea(12,198);//D
delayus(1000);
x=0;
musicalnotea(30,198);//D
delayms(300);
x=0;
musicalnotea(12,198);//D
musicalnotea(24,118);//B
musicalnotea(12,133);//A
musicalnotea(12,198);//D
musicalnotea(24,148);//G
musicalnotea(18,158);//#F
delayus(1000);
x=0;
musicalnotea(6,158);//#F
musicalnotea(18,178);//E
musicalnotea(6,188);//#D
musicalnotea(12,178);//E
musicalnotea(12,133);//A
delayus(1000);
x=0;
musicalnotea(30,133);//A
delayms(300);
x=0;
musicalnotea(9,118);//B
musicalnotea(3,133);//A
musicalnotea(24,148);//G
musicalnotea(18,198);//D
musicalnotea(6,238);//低B
musicalnotea(24,178);//E
musicalnotea(6,223);//C
delayms(300);
x=0;
musicalnotea(9,133);//A
musicalnotea(3,148);//G
musicalnotea(24,158);//#F
musicalnotea(12,178);//E
musicalnotea(12,198);//D
musicalnotea(36,118);//B
delayus(1000);
x=0;
musicalnotea(12,118);//B
musicalnotea(24,99);//高D
musicalnotea(12,111);//高C
musicalnotea(12,118);//B
musicalnotea(18,133);//A
musicalnotea(6,118);//B
musicalnotea(12,111);//高C
delayms(300);
x=0;
musicalnotea(6,111);//高C
musicalnotea(18,118);//B
delayus(1000);
x=0;
musicalnotea(6,118);//B
musicalnotea(18,133);//A
delayus(1000);
x=0;
musicalnotea(6,133);//A
while(x<24)//G
{
speaker=1;
delayus(148);
if(n!
=1)
break;
speaker=0;
delayus(148);
if(n!
=1)
break;
}
if(n>1)
n--;
if(n<1)
n++;
x=0;
n++;
}
voidicegirl()
{
delayms(800);
x=0;
musicalnoteb(6,210);//#C
musicalnoteb(6,238);//B
musicalnoteb(4,210);//#C
musicalnoteb(16,178);//E
musicalnoteb(4,423);//低#C
musicalnoteb(4,210);//#C
musicalnoteb(4,238);//B
musicalnoteb(4,210);//#C
musicalnoteb(4,178);//E
musicalnoteb(4,158);//#F
musicalnoteb(4,210);//#C
musicalnoteb(4,238);//B
musicalnoteb(6,210);//#C
musicalnoteb(6,238);//B
musicalnoteb(4,210);//#C
musicalnoteb(16,178);//E
musicalnoteb(4,423);//低#C
musicalnoteb(4,210);//#C
musicalnoteb(4,238);//B
musicalnoteb(4,210);//#C
musicalnoteb(8,140);//#G
musicalnoteb(8,158);//#F
musicalnoteb(6,210);//#C
musicalnoteb(6,238);//B
musicalnoteb(4,210);//#C
musicalnoteb(16,178);//E
musicalnoteb(4,538);//低低A
musicalnoteb(4,210);//#C
musicalnoteb(4,238);//B
musicalnoteb(4,210);//#C
musicalnoteb(4,178);//E
musicalnoteb(4,158);//#F
musicalnoteb(4,210);//#C
musicalnoteb(4,238);//B
musicalnoteb(6,210);//#C
musicalnoteb(6,238);//B
musicalnoteb(4,210);//#C
musicalnoteb(12,178);//E
musicalnoteb(4,210);//#C
musicalnoteb(4,538);//低低A
musicalnoteb(4,210);//#C
musicalnoteb(6,140);//#G
delayus(1000);
x=0;
musicalnoteb(6,140);//#G
musicalnoteb(4,158);//#F
musicalnoteb(2,269);//低A
musicalnoteb(2,238);//低B
musicalnoteb(2,223);//C
musicalnoteb(2,198);//D
musicalnoteb(4,448);//低C
musicalnoteb(4,198);//D
musicalnoteb(4,178);//E
musicalnoteb(8,398);//低D
musicalnoteb(4,148);//G
musicalnoteb(4,158);//#F
musicalnoteb(4,198);//D
musicalnoteb(8,178);//E
musicalnoteb(4,358);//低E
musicalnoteb(4,198);//D
musicalnoteb(4,398);//低D
musicalnoteb(4,178);//E
musicalnoteb(4,158);//#F
musicalnoteb(4,148);//G
musicalnoteb(12,118);//B
delayus(1000);
x=0;
musicalnoteb(4,118);//B
musicalnoteb(4,148);//G
delayus(1000);
x=0;
musicalnoteb(2,148);//G
musicalnoteb(2,118);//B
musicalnoteb(4,148);//G
musicalnoteb(4,158);//F
musicalnoteb(20,178);//E
delayus(1000);
x=0;
musicalnoteb(4,178);//E
musicalnoteb(4,148);//G
musicalnoteb(4,118);//B
musicalnoteb(12,89);//高E
delayus(1000);
x=0;
musicalnoteb(4,89);//高E
musicalnoteb(4,99);//D
delayus(1000);
x=0;
musicalnoteb(2,99);//高D
musicalnoteb(2,89);//高E
musicalnoteb(4,99);//高D
musicalnoteb(4,133);//A
musicalnoteb(24,118);//B
musicalnoteb(8,79);//高#F
musicalnoteb(12,74);//高G
delayus(1000);
x=0;
musicalnoteb(4,74);//高G
musicalnot