可编程音乐演奏器.docx
《可编程音乐演奏器.docx》由会员分享,可在线阅读,更多相关《可编程音乐演奏器.docx(13页珍藏版)》请在冰豆网上搜索。
可编程音乐演奏器
单片机原理与接口技术
——课程设计报告
名称:
可编程音乐演奏器
姓名:
*******
学号:
*******
班级:
********
指导教师:
********
完成时间:
2013年6月22日
一、设计原因3
二、设计思路3
1、总体方案3
2、硬件部分3
(1)、硬件电路图4
(2)、电路分析4
(3)、所需器件5
3、软件部分5
(1)程序及分析5
(2)音符频率表8
三、程序流程图9
四、心得体会10
五、参考文献10
一、设计原因:
随着科技的进步,各种高科技玩具应运而生,各种智能玩具层出不穷。
如果给玩具添加更多功能,那么,此种玩具就具有更强的竞争力。
故此,给玩具添加音乐演奏功能不失为良策。
此外,音乐演奏器还可以应用于多种领域,比如可应用于门铃、闹铃等各种系统。
总之,音乐演奏器有广泛的用途,且具有很强的生命力。
用单片机来实现音乐演奏的功能,既简单轻便,又易于实现,并且成本比古典乐器低廉许多。
最重要的是,基于单片机控制的音乐演奏器能发出一般乐器难以实现的音效。
在网上搜各种曲谱均可以用单片机来实现其音效。
二、设计思路
1、总体方案
音乐演奏器的主体由单片机构成,通过控制定时器时间的不同可以产生不同频率的方波,用于驱动喇叭发出不同的音符,再利用延时来控制发音时间的长短,即可控制节拍,把乐谱中的音符和相应的节拍变换成时常数和延迟常数,做成数据表格存放在存储器中。
由程序查表得到定时常数和延迟常数,分别用以控制定时器产生方波的频率和发出该方波的持续时间。
当延迟时间到时,再查下一个音符的定时常数好延迟常数,依次进行下去。
利用定时器T0以方式1工作,产生各音符对应频率的方波,由P3.0输出驱动喇叭发音。
节拍控制通过改变调用延时子程序D200(延时200ms)的次
数来实现,以每拍800ms为例,一拍需循环调用D200延时子程序4次,同理,半拍就需要调用两次,设晶振频率为12Mhz,乐曲中的音符、频率、定时常数的关系可以参照有关表格。
2、硬件部分
(1)、电路图:
(2)电路分析:
此电路主要包括了单片机最小系统、按键电路及发声电路三部分,单片机采用的是ATMEL公司生产的AT89C51型号芯片,最小系统采用12MHZ的晶振,运行速度快,EA接高电平,P1口接八个按键并分别接上拉电阻,每当按键按下的时候,所对应的I/O口就接地;P3.3口接蜂鸣器,用以输出音频信号,三极管的作用是对单片机的输出信号进行放大,一边人耳能听到清晰的声音,准确分辨出声音的频率高低、节奏变化。
(3)、所需器件:
AT89C51单片机一片
12MHZ晶振一个
22pF电容2个
微动按键9个
蜂鸣器1个
电阻若干
3、软件部分
(1)程序及分析
#include
#defineuintunsignedint
#defineucharunsignedchar
sbittone=P3^3;定义P3.3口为音频的输出口
unsignedchartimer0h,timer0l,time;
ucharcodekey[]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf定义P1口,分别表示八个按键
};
ucharcodetab[]={
0xfc,0x43,
0xfc,0xab,
0xfd,0x08,
0xfd,0x32,
0xfd,0x81,
0xfd,0xc7,
0xfe,0x05,
};以上为7个音符的初值
codeunsignedcharyf[]=
{
3,2,2,6,2,2,7,2,2,5,2,2,3,2,2,6,2,2,7,2,2,5,2,2,7,2,2,1,3,2,2,3,4,
7,2,2,1,3,2,2,3,4,2,3,1,3,3,1,2,3,1,1,3,1,7,2,2,5,2,2,
2,3,1,3,3,1,2,3,1,1,3,1,7,2,2,5,2,2,6,2,2,2,2,2,5,2,4,6,2,2,2,2,2,5,2,4,
0,0,0};为要播放的音乐曲谱
codeunsignedcharFREQH[]={
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,};
频率-半周期数据表高八位
本软件共保存了四个八度的28个频率数据
codeunsignedcharFREQL[]={
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,
0xEE,0x44,0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
频率-半周期数据表低八位
};
ucharj;
voiddelay0()延时程序
{
uchara,b,c;
for(a=5;a>0;a--)
for(b=100;b>0;b--)
for(c=100;c>0;c--);
}
voiddelay(unsignedchart)
{unsignedchart1;
unsignedlongt2;
for(t1=0;t1{
for(t2=0;t2<2000;t2++)
}
TR0=0;}
voidsong()
{
TH0=timer0h;
TL0=timer0l;
TR0=1;
delay(time);
}
voidmain()
{
unsignedchark,i;
P1=0xff;
P3=0x00;
TR0=0;
if(P1==0x7f)
{
TR0=1;
TMOD=0x01;
EA=1;
ET0=1;
while
(1)
{
i=0;
while(i<55){
k=yf[i]+7*yf[i+1]-1;
timer0h=FREQH[k];
timer0l=FREQL[k];
time=yf[i+2];
i=i+3;
song();}}}
else
{
TMOD=0x10;
EA=1;
ET1=1;
P1=0xff;
while(P1!
=0xff)
{
delay0();
for(j=0;j<7;j++)
if(P1==key[j])
{
break;
}
TH1=tab[2*j];
TL1=tab[2*j+1];
TR1=1;
while(P1!
=0xff);
TR1=0;}}}
voidt0int()interrupt1中断响应
{
TR0=0;
tone=!
tone;
TH0=timer0h;
TL0=timer0l;
TR0=1;
}
voidt1int()interrupt3中断响应
{
TH1=tab[2*j];
TL1=tab[2*j+1];
tone=!
tone;}
(2)音符频率表
音符频率表
音符
频率(HZ)
简谱码(T值)
音符
频率(HZ)
简谱码(T值)
低1 DO
262
63628
#4FA#
740
64860
#1 DO#
277
63731
中5SO
784
64898
低2 RE
294
63835
#5SO#
831
64934
#2RE#
311
63928
中6LA
880
64968
低3M
330
64021
#6
932
64994
低4FA
349
64103
中7SI
988
65030
#4FA#
370
64185
高1DO
1046
65058
低5SO
392
64260
#1DO#
1109
65085
#5SO#
415
64331
高2RE
1175
65110
低6LA
440
64400
#2RE#
1245
65134
#6
466
64463
高3M
1318
65157
低7SI
494
64524
高4FA
1397
65178
中1DO
523
64580
#4FA#
1480
65198
#1DO#
554
64633
高5SO
1568
65217
中2RE
587
64684
#5SO#
1661
65235
#2RE#
622
64732
高6LA
1760
65252
中3M
659
64777
#6
1865
65268
中4FA
698
64820
高7SI
1967
65283
三、程序流程图
硬件自动TF1=0
四、心得体会
(1)学习单片机的课时不多,对单片机的硬件设计,软件设计掌握的深度不够,但通过此次课程设计,明显的改善了,首先对于硬件电路的工作原理有了进一步的学习,同时有了一个提升;软件方面,在程序的设计,程序的调试方面都有了很大的进步。
(2)在一个好的氛围里才能踏下心来做东西,在这一段时间里,寝室成员都认真对待这次课程设计,除了自己做好自己的课题外,在遇到不懂的地方互相讨论,查阅资料,互助解决问题。
另外在编程中出现问题时,一定要戒骄戒躁,脚踏实地,认真看书,仔细分析,仔细调试,就一定会发现错误。
我们也是这么做的,这一点在这次的课程设计中十分重要。
(3)通过这次课程设计,我体会到了成功的喜悦,听着自己设计的程序下载到单片机中播放出音乐,心理非常自豪。
这次的课程设计在一定程度上改变了我学习单片机这门课程的态度,从最初的认为学它没有什么实际意义,到如今爱上单片机学习,并希望能将理论运用到实践,设计出更好更完整的系统。
我明白了一个人要想做好一件事,就必须具备自信心,耐心,还要有毅力,要胆大心细,要勇于尝试,要手脑并用,最后才能交出一份令人满意的答卷。
五、参考文献
[1]许珉.单片机原理及应用[M].北京:
中国电力出版社,2007.08
[2]三恒星科技.MCS-51单片机原理与应用实例[M].北京:
电子工业出版社,2008.01
[3]王为青,程国钢.单片机KeilCx51应用开发技术[M].北京:
人民邮电出版社,2007.02
[4]JohnMarkus.电子电路大全[M].北京:
计量出版社,1995
[5]阎石.数字电子技术基础[M].北京:
高等教育出版社,1998.12,第4版[6]邓元庆.数字电路与逻辑设计[M].北京:
电子工业出版社,2001
[5]陈海宴51单片机原理及应用[M]北京航空航天大学出版社