基于STC89C52的数字式音乐盒设计.docx
- 文档编号:5913004
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:21
- 大小:108.13KB
基于STC89C52的数字式音乐盒设计.docx
《基于STC89C52的数字式音乐盒设计.docx》由会员分享,可在线阅读,更多相关《基于STC89C52的数字式音乐盒设计.docx(21页珍藏版)》请在冰豆网上搜索。
基于STC89C52的数字式音乐盒设计
黑龙江农业经济职业学院
毕业论文
基于STC89C52的数字式音乐盒设计
姓名:
指导教师:
xxx
专业:
应用电子技术
班级:
xxx
2011年10月20日
基于STC89C52数字式音乐盒的设计
摘要:
本设计是以STC89C51芯片的电路为基础,外部加上放音设备,以此来实现音乐演奏控制器的硬件电路,通过软件程序来控制单片机内部的定时器使其演奏出优美动听的音乐。
用户可以按照自己的喜好选择音乐并将其转化成机器码存入单片机的存储器中。
对于不同型号的单片机只需要相应的改变一下地址即可。
该软、硬件系统具有很好的通用性,很高的实际使用价值,为广大的单片机和音乐爱好者提供了很好的借鉴。
关键词:
单片机,数码管,机间通讯
前言
21世纪,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。
单片机应用的重要意义还在于它从根本上改变了传统的控制系统设计思想和设计方法。
从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。
这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。
单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
随着科学技术的进步和社会的发展,人类所接触的信息也在不断增加并且日益复杂。
面对浩如烟海的信息,人们已经能够利用计算机等工具高效准确地对之进行处理,但要想将处理完的信息及时,清晰地传递给别人,还必须通过寻求更加卓越的显示技术来实现。
单片机技术与液晶显示技术的结合,使信息传输交流向着智能可视化方向迅速发展。
随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。
小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。
传统音乐盒多是机械型的,体积笨重,发音单调,不能实现批量生产。
本文设计的音乐盒是以单片机为核心元件的电子式音乐盒,体积小,重量轻,能演奏和旋音乐,功能多,外观效果多彩,使用方便,并具有一定的商业价值。
1.系统基本设计思路
1.1课题意义
音乐盒的起源,可追溯至中世纪欧洲文艺复兴时期。
当时为使教会的钟塔报时,而将大小的钟表装上机械装置,被称为“可发出声音的组钟”。
音乐盒有着300多年的发展历史,是人类文明发展的历史见证。
传统的音乐盒多是机械音乐盒,其工作原理是通过齿轮带动一个带有铁钉的铁桶转动,铁桶上的铁钉撞击铁片制成的琴键,从而发出声音。
但是,机械式的音乐盒体积比较大,比较笨重,且发音单调。
水、灰尘等外在因素,容易使内部金属发音条变形,从而造成发音跑调。
另外,机械音乐盒放音时为了让音色稳定,必须放平不能动摇,而且价格昂贵,不能实现大批量生产。
本文设计的音乐盒,是基于单片机设计制作的电子式音乐盒。
与传统的机械式音乐盒相比更小巧,音质更优美且能演奏和弦音乐。
电子式音乐盒动力来源是电池,制作工艺简单,可进行批量生产,所以价格便宜。
基于单片机制作的电子式音乐盒,控制功能强大,可根据需要选歌,使用方便。
根据存储容量的大小,可以尽可能多的存储歌曲。
另外,可以设计彩灯外观效果,使音乐盒的功能更加丰富。
1.2设计方案
设计一个单片机的音乐盒,利用按键切换演奏出不同的乐曲。
扬声器发出乐曲,与之相对应的LED亮起。
使用五个按键,两个用来切换歌曲,两个切换八路LED的变化花样。
一个用来启动和停止。
1.3研究内容
(1)电路有两种工作模式:
演奏音乐模式和花样灯模式。
演奏音乐模式:
演奏完整的一首的歌曲,八路LED随着音乐变化。
花样灯模式:
八路LED变化出各种花样,蜂鸣器随着发出“嘀嘀”声
(2)按下按键1进入演奏音乐模式,再按切换歌曲,共两首歌曲。
(3)按下按键2进入花样灯模式,再按切换LED花样,共三种花样。
此电路的程序只占用了1K左右,可编制更多的音乐和LED花样,使系统的功能更加俱全。
2.单元电路方案论证
根据设计要求,本系统主要由控制器模块、显示模块构成。
为较好的实现各模块的功能,我们分别设计了几种方案并分别进行了论证。
2.1控制器模块
方案1:
采用51系列作为系统控制器
单片机算术运算功能强,软件编程灵活、自由度大,可用软件编程实现各种算法和逻辑控制。
由于其功耗低、体积较小、技术成熟和成本低等优点,在各个领域应用广泛。
而且抗干扰性能好。
方案2:
采用凌阳系列单片机为系统的控制器
凌阳系列单片机可以实现各种复杂的逻辑功能,模块大,密度高,它将所有器件集成在一块芯片上,减少了体积,提高了稳定性。
凌阳系列单片机提高了系统的处理速度,适合作为大规模实时系统的控制核心。
因51单片机价格比凌阳系列低得多,且本设计不需要很高的处理速度,从经济和方便使用角度考虑,本设计选择了方案1。
2.2显示模块
方案1:
采用LED数码管
采用控制用单片机,显示用LED数码管这种方案。
虽然显示的内容有限,但是也可以显示数字和几个英文字母,在这个设计中已经足够了,并且价格比液晶字符式要低的多,为了控制设计制作的成本,在此设计中我们选用LED数码管显示。
方案2:
采用液晶字符显示器
控制用单片机,显示用液晶字符式,可以用软件达到很好的控制,硬件不复杂,液晶字符显示器可以显示很丰富的内容,但是液晶字符式价格昂贵,在本设计中不需要用到复杂的显示内容,因此我们放弃了此方案。
从济济的角度考虑,我们选择了方案1。
2.3最终方案
经过反复论证,最终确定了如下方案:
1.主控制器:
选用两片51内核的单片机作为主控制器
主控机:
负责显示状态,检测按键以及向下位机传输数据
音乐机:
在接受到上位机的引号后产生一定频率方波从而发声
2.外设装置:
这部分是由按键、数码管、LED、扬声器等组成
3.系统总体方案介绍
3.1系统硬件组成图
图1设计原理图
3.2最小系统设计
最小系统包括单片机及其所需的必要的电源、时钟、复位等部件,能使单片机始终处于正常的运行状态。
电源、时钟等电路是使单片机能运行的必备条件,可以将最小系统作为应用系统的核心部分,通过对其进行存储器扩展、A/D扩展等,使单片机完成较复杂的功能。
89C52是片内有ROM/EPROM的单片机,因此,这种芯片构成的最小系统简单﹑可靠。
用89C52单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,结构如图2所示,由于集成度的限制,最小应用系统只能用作一些小型的控制单元。
图2单片机最小系统原理框图
3.2.1时钟电路
89C52单片机的时钟信号通常有两种方式产生:
一是内部时钟方式,二是外部时钟方式。
内部时钟方式如图3所示。
在89S51单片机内部有一振荡电路,只要在单片机的XTAL1(18)和XTAL2(19)引脚外接石英晶体(简称晶振),就构成了自激振荡器并在单片机内部产生时钟脉冲信号。
图中电容C1和C2的作用是稳定频率和快速起振,电容值在5~30pF,典型值为30pF。
晶振CYS的振荡频率范围在1.2~12MHz间选择,典型值为12MHz和6MHz。
图389c51内部时钟电路
3.2.2复位电路
当在89C52单片机的RST引脚引入高电平并保持2个机器周期时,单片机内部就执行复位操作(若该引脚持续保持高电平,单片机就处于循环复位状态)。
复位电路通常采用上电自动复位和按钮复位两种方式。
最简单的上电自动复位电路中上电自动复位是通过外部复位电路的电容充放电来实现的。
只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。
除了上电复位外,有时还需要按键手动复位。
本设计就是用的按键手动复位。
按键手动复位有电平方式和脉冲方式两种。
其中电平复位是通过RST(9)端与电源Vcc接通而实现的。
按键手动复位电路见图4。
时钟频率用11.0592MHZ时C取10uF,R取10kΩ。
图489C52复位电路
3.3主控机模块
作为此次设计的核心硬件,主控机的作用几乎囊括了除音乐播放外的其他所有功能。
功能一:
控制显示模块
功能二:
控制按键模块
功能三:
控制炫彩模块
功能四:
向下位机传
图5主控机模块
3.4显示模块
显示模块主要包括数码管,单片机,LED等其他元件。
该模块的主要功能:
(1)播放开机动画
(2)显示点歌的曲目
(3)显示炫彩小灯的闪烁速度
图6显示模块
3.4音乐机模块
该模块只用于读取上位机的信号后播放音乐。
3.5按键模块
(1)按键是输入信号的主要工具。
(2)该模块主要由五个独立按键组成:
按键1:
加速度
按键2:
启动循环
按键3:
减速度
按键4:
下一曲
按键5:
上一曲
4.节拍的确定
一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。
因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。
音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。
在音乐中所谓“音调”,其实就是我们常说的“音高”。
在音乐中常把中央C上方的A音定为标准音高,其频率f=440Hz。
当两个声音信号的频率相差一倍时,也即f2=2f1时,则称f2比f1高一个倍频程,在音乐中1(do)与,2(来)与……正好相差一个倍频程,在音乐学中称它相差一个八度音。
在一个八度音内,有12个半音。
以1—i八音区为例,12个半音是:
1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5一#5、#5—6、6—#6、#6—7、7—i。
这12个音阶的分度基本上是以对数关系来划分的。
如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。
知道了一个音符的频后,怎样让单片机发出相应频率的声音呢?
一般说来,常采用的方法就是通过单片机的定时器定时中断,将单片机上对应蜂鸣器的I/O口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将定时器予置不同的定时值就可实现。
那么怎样确定一个频率所对应的定时器的定时值呢?
以标准音高A为例:
A的频率f=440Hz,其对应的周期为:
T=1/f=1/440=2272μs
由上图可知,单片机上对应蜂鸣器的I/O口来回取反的时间应为:
t=T/2=2272/2=1136μs
这个时间t也就是单片机上定时器应有的中断触发时间。
一般情况下,单片机奏乐时定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲。
设振荡器频率为f0,
则定时器的予置初值由下式来确定:
t=12*(TALL–THL)/f0,式中TALL=216=65536,THL为定时器待确定的计数初值。
因此定时器的高低计数器的初值为:
TH=THL/256=(TALL–t*f0/12)/256TL=THL%256=(TALL–t*f0/12)%256
将t=1136μs代入上面两式(注意:
计算时应将时间和频率的单位换算一致),即可求出标准音高A在单片机晶振频率f0=12Mhz,定时器在工作方式1下的定时器高低计数器的予置初值为:
TH440Hz=(65536–1136*12/12)/256=FBH
TL440Hz=(65536–1136*12/12)%256=90H
根据上面的求解方法,我们就可求出其他音调相应的计数器的予置初值。
说明************************************************************************
曲谱存贮格式unsignedcharcodeMusicName{音高,音长,音高,音长....,0,0};末尾:
0,0表示结束(Important)
音高由三位数字组成:
个位是表示1~7这七个音符
十位是表示音符所在的音区:
1-低音,2-中音,3-高音;
百位表示这个音符是否要升半音:
0-不升,1-升半音。
音长最多由三位数字组成:
个位表示音符的时值,其对应关系是:
|数值(n):
|0|1|2|3|4|5|6
|几分音符:
|1|2|4|8|16|32|64音符=2^n
十位表示音符的演奏效果(0-2):
0-普通,1-连音,2-顿音
百位是符点位:
0-无符点,1-有符点
调用演奏子程序的格式
Play(乐曲名,调号,升降八度,演奏速度);
|乐曲名:
要播放的乐曲指针,结尾以(0,0)结束;
|调号(0-11):
是指乐曲升多少个半音演奏;
|升降八度(1-3):
1:
降八度,2:
不升不降,3:
升八度;
|演奏速度(1-12000):
值越大速度越快;
结论
单片机的设计至今为止已经进入了令人鼓舞的阶段,在进行了长达两个多月的时间的摸索与实验,使我不仅仅是对于单片机入门软件与硬件的常用设计与功能,还使我对于一项设计研究的制作过程所需要的详细步骤和具体的实现方法的力度的掌握。
当然在这次宝贵的毕业设计活动中,经验才是对于我们最大的收获,而且还增强了自身对未知问题以及对知识的深化认识的能力,用受益匪浅这个词语来概括这次难忘的活动我觉得再合适不过了。
但是,光是完成了作品还是不可以自我满足的,在从一开始的时候就怀着将作品制作得更加人性化,更加令人满意,更加地使功能完美又方便地被应用领域这个最终目的下,随着对单片机这门学科的认识加深,到达了拓展的程度,我想这个目的将在不远的时期内被实现。
总之,这次设计从软件编写、调试到软硬件联机调试,我倾注了大量的时间和心血。
真是曾经为程序的编写而冥思查找过,曾经为无法找出错误而郁闷苦恼过,也曾经为某一功能不能实现而犹豫彷徨过,但最终我成功了。
我不仅品味到了结果的喜悦,更明白了过程的弥足珍贵。
参考文献
[1]李建忠.单片机原理及应用[M],西安电子科技大学出版社,2008.2.
[2]黄智伟.全国大学生电子设计竞赛系统设计[M],北京:
北京航空航天大学出版社,2006.6.
[3]黄智伟.凌阳单片机课程设计指导[M],北京:
北京航空航天大学出版社,2006.11.
[4]李广弟,朱月秀,王秀山.单片机基础[M],北京:
北京航空航天大学出版社,2001.7.
[5]赵曙光,郭万有,杨颂华.可编程逻辑器件原理开发与应用[M],西安:
西安电子科技大学,2000.
[6]候伯亨.VHDL硬件描述语言与数字逻辑电路设计[M],西安:
西安电子科技大学出版社,1999.
[7]康华光.模拟电子技术基础(第四版)[M],武汉:
华中理工大学出版社,1999.
[8]谭浩强.C语言程序设计(第二版)[M],北京:
清华大学出版社,1991.
[9]陈小忠,黄宁.单片机接口技术实用子程序[M],北京:
北京人民邮电出版社,2005.
[10]欧伟明,周春临,瞿遂春.电子信息系统设计[M],西安电子科技大学出版社,2005.9.
[11]贾立新,王涌.电子系统设计与实践[M],北京:
清华大学出版社,2007.
[12]罗亚非.凌阳16位单片机应用基础[M],北京:
北京航空航天大学出版社,2003.
[13]雷思孝.凌阳单片机原理及实用技术[M],西安电子科技大学,2004.
致谢
这次毕业设计得到了很多人的帮助,其中xxx老师对我的关心和支持尤为重要,每次遇到难题,我首先想到的就是向xxx老师寻求帮助。
另外,他严谨的作风使我的论文即使在谨小细微处也给予了纠正,让我的论文无论是结构还是内容变得更加公整、紧凑,感谢xxx老师对我的悉心指导。
感谢校方给予我这样一次机会,能够独立地完成这样一个设计,作为检验这些年来学习的成果,在这个过程当中,学校给予我们各种方便,使我们在即将离校的最后一段时间里,能够更多学习一些实践应用知识,增强了我们实践操作和动手应用能力,提高了独立思考的能力。
再一次对我的母校表示感谢。
感谢在整个毕业设计期间和我密切合作的同学,和曾经在各个方面给予过我帮助的伙伴们,正是因为有了你们的帮助,才让我不仅学到了本次课题所涉及的新知识,更让我感觉到了知识以外的东西,那就是团结的力量。
此外特别感谢桂林电子工业学院提供的51单片机音乐编码软件!
附录:
主控机程序
#include
#include
unsignedinthuanqu,d,f,f1,f2,hq1,hq2,s,c,l,p;
sbitkaishi=P3^6;
sbitup=P3^3;
sbitdown=P3^4;
sbitledz=P3^7;
sbitledf=P3^5;
sbith1=P0^0;
sbith2=P0^1;
sbith3=P0^2;
sbith4=P0^3;
sbitwu=P0^5;
sbitliu=P0^6;
sbitqi=P0^7;
unsignedcharcodewei[]={0xfe,0xfe,0xfd,0xfb,0xf7,0xf7,0xf7,0xfb,0xfd,0xfe,0xfe,0xfe,0xfd,0xfb,0xf7,0xf7};
unsignedcharcodeduan[]={0x20,0x01,0x01,0x01,0x01,0x02,0x40,0x40,0x40,0x40,0x10,0x08,0x08,0x08,0x08,0x04};
unsignedcharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsignedcharcodetab0[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
voidyanshi(unsignedintq)
{
unsignedinti,j;
for(i=q;i>0;i--)
for(j=110;j>0;j--);
}
voidjob()
{
hq1=huanqu/10;
hq2=huanqu%10;
f1=d/10;
f2=d%10;
h1=0;
h2=1;
h3=1;
h4=1;
P1=tab[hq1];
yanshi(5);
h1=1;
h2=0;
h3=1;
h4=1;
P1=tab0[hq2];
yanshi(5);
h1=1;
h2=1;
h3=0;
h4=1;
P1=tab[f1];
yanshi(5);
h1=1;
h2=1;
h3=1;
h4=0;
P1=tab[f2];
yanshi(5);
}
voidledsd(unsignedintd)
{
unsignedintx;
for(x=d;x>0;x--)
job();
}
voidkaiji()
{
unsignedchara;
for(a=0;a<16;a++)
{
P0=wei[a];
P1=duan[a];
yanshi(100);
}
P0=0xf0;
P1=0x40;
yanshi(400);
}
voidled()
{
P2=f;
f=_crol_(f,1);
ledsd(d);
d++;
if(d==11)
d=0;
}
voidanjian()
{
if(kaishi==0)
{
yanshi(5);
if(kaishi==0)
{
wu=0;
c=0;
}
while(!
kaishi)
{job();}
}
if(up==0)
{
yanshi(5);
if(up==0)
{
huanqu++;
if(huanqu>3)
huanqu=1;
}
while(!
up)
{job();}
}
if(down==0)
{
yanshi(5);
if(down==0)
{
huanqu--;
if(huanqu==-1)
huanqu=3;
}
while(!
down)
{job();}
}
if(ledz==0)
{
yanshi(5);
if(ledz==0)
{
c=1;
d=d+1;
if(d>10)
d=0;
}
while(!
ledz)
{job();}
}
if(ledf==0)
{
yanshi(5);
if(ledf==0)
{
c=1;
d=d-1;
if(d<0)
d=10;
}
while(!
ledf)
{job();}
}
}
voidchuansong()
{
if(huanqu==1)
{
liu=0;
qi=0;
}
if(huanqu==2)
{
liu=0;
qi=1;
}
if(huanqu==3)
{
liu=1;
qi=0;
}
if(huanqu==4)
huanqu=1;
}
main()
{
f=0xfe;
d=10;
s=0;
huanqu=0;
kaiji();
while
(1)
{
anjian();
job();
chuansong();
if(c==0)
{
led();
}
}
}
音乐机程序
#include
#include"SoundPlay.h"
unsignedcharqu,kaishi;
sbitling=P1^0;
sbityi=P1^1;
sbiter=P1^2;
voidyanshi(unsignedintq)//系统延时
{
unsignedinti,j;
for(i=q;i>0;i--)
for(j=110;j>0;j--);
}
//祝你平安
unsignedcharcodeMusic_ping[]={0x17,0x03,0x19,0x03,0x19,0x0E,0x17,0x03,0x19,0x0E,
0x19,0x01,0x17,0x03,0x15,0x03,0x15,0x0D,0x10,0x04,
0x15,0x0E,0x15,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 STC89C52 数字式 音乐盒 设计