基于单片机的电子音乐盒的设计.doc
《基于单片机的电子音乐盒的设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的电子音乐盒的设计.doc(40页珍藏版)》请在冰豆网上搜索。
创新制作设计报告
题目基于单片机的电子音乐盒设计
姓名陈中乾
学号09101110
专业班级09电子3班
所在学院电子与通信工程学院
指导教师朱冬范
二○一一年十二月三一日
目录
1.设计目的和要求 1
1.1设计目的 1
1.2设计要求 1
2.音乐程序设计原理 2
2.1音乐的基本知识说明 2
2.2音调 2
2.3节拍 3
2.4音调的产生 3
2.5延时函数 3
2.6定时中断 4
2.7节拍的产生 5
3.硬件电路设计 6
3.1总体方案设计 6
3.2器件选择 6
3.2.1单片机的选择 6
3.2.2LCD1602简介 7
3.3单元电路设计 9
3.3.1晶振电路 9
3.3.2复位电路 9
3.3.3键盘部分 10
3.3.4LCD显示电路 11
3.3.5LM386功放驱动部分 12
3.4整体电路 14
4.软件设计 16
4.1主程序流程图 16
4.2主程序 17
4.3音乐播放程序流程图 20
4.4音乐播放程序 20
5、电路仿真调试 23
5.1原理图的绘制 23
5.2仿真结果 24
引言
21世纪,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。
单片机应用的重要意义还在于它从根本上改变了传统的控制系统设计思想和设计方法。
从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。
这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。
单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
随着科学技术的进步和社会的发展,人类所接触的信息也在不断增加并且日益复杂。
面对浩如烟海的信息,人们已经能够利用计算机等工具高效准确地对之进行处理,但要想将处理完的信息及时,清晰地传递给别人,还必须通过寻求更加卓越的显示技术来实现。
单片机技术与液晶显示技术的结合,使信息传输交流向着智能可视化方向迅速发展。
随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。
小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。
传统音乐盒多是机械型的,体积笨重,发音单调,不能实现批量生产。
本文设计的音乐盒是以单片机为核心元件的电子式音乐盒,体积小,重量轻,能演奏和旋音乐,功能多,外观效果多彩,使用方便,并具有一定的商业价值。
1.设计目的和要求
1.1设计目的
(1)通过设计,查阅相关资料,掌握如何利用单片机设计产品,同时了解与单片机有关的软件模拟器的使用及取字模块软件的使用方法。
(2)通过本课程设计巩固并扩展单片机课程的基本概念、基本理论、分析方法和实现方法。
结合Proteus和Keil软件等,学习单片机产品的设计方法,有效地将理论和实际紧密结合,培养创新思维和设计能力,增强软件编程实现能力和解决实际问题的能力。
(3)学习Proteus软件,掌握Proteus中各种芯片的功能以及模拟。
由于Proteus提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养实践精神、创造精神的平台。
1.2设计要求
具体的设计应该满足以下功能:
硬件方面:
(1)利用I/O口产生一定频率的方波,LM386功放驱动喇叭,发出不同的音调,从而演乐曲(内存四首乐曲),可以通过按键进行曲目的选择;
(2)用LCD显示歌曲序号和歌曲名字;
(3)可通过功能键进行选择歌曲和暂停的操作。
(4)CPU可以控制声音的音节和长短;
(5)音频数据信息记录需要大量非易失性数据存储器实时快速地记录数据。
因此需要具有掉电保护功能的大容量存储器;
软件方面:
系统中外扩的各器件的初始化工作均在主程序中完成,其次,要设计如何调用显示子程序以及乐曲播放程序。
(1)在实际的控制过程,常要求有实时时钟,以实现定时或延时控制,所以需要此类中断服务程序。
(2)由于按键为机械开关结构,机械触点的弹性及电压突跳等原因,往往在触点闭合或断开的瞬间会出现电压抖动。
为保证键识别的准确,在电压信号抖动的情况下不能进行状态的输入。
为此需要进行去抖动处理的中断服务程序。
(当然这种问题也可以通过硬件方案解决。
)
2音乐程序的设计原理
2.1音乐的基本知识说明
声音是由物体振动产生,正在发声的物体叫声源。
振动的频率高,为高音;振动的频率低,为低音。
人耳比较容易辨识的声音频率范围是20Hz到20,000Hz之间,一般音响电路是用正弦波信号驱动喇叭,从而产生悦耳的音乐;在数字电路里,则是用数字脉冲信号信号驱动喇叭,从而产生声音。
如果声音的频率相同,人类耳朵很难区分哪个是脉冲信号产生的声音,哪个是正弦波信号产生的声音。
图2.1.1声音的波形
2.2音调
不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即Tone。
把C、D、E、F、G、A、B这一组音的距离分成12个等份,每一个等份叫一个“半音”。
两个音之间的距离有两个“半音”,就叫“全音”。
在钢琴等键盘乐器上,C–D、D–E、F–G、G–A、A–B两音之间隔着一个黑键,他们之间的距离就是全音;E–F、B–C两音之间没有黑键相隔,它们之间的距离就是半音。
通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它们的左上角加上﹟号或者b号的叫变化音。
﹟叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。
例如高音DO的频率(1046Hz)刚好是中音DO的频率(523Hz)的一倍,中音DO的频率(523Hz)刚好是低音DO频率(266Hz)的一倍;同样的,高音RE的频率(1175Hz)刚好是中音RE的频率(587Hz)的一倍,中音RE的频率(587Hz)刚好是低音RE频率(294Hz)的一倍。
2.3节拍
若要构成音乐,光有音调是不够的,还需要节拍,让音乐具有旋律(固定的律动),而且可以调节各个音的快满度。
“节拍”,即Beat,简单说就是打拍子,就像我们听音乐不自主的随之拍手或跺脚。
若1拍实0.5s,则1/4拍为0.125s。
至于1拍多少s,并没有严格规定,就像人的心跳一样,大部分人的心跳是每分钟72下,有些人快一点,有些人慢一点,只要听的悦耳就好。
音持续时间的长短即时值,一般用拍数表示。
休止符表示暂停发音。
一首音乐是由许多不同的音符组成的,而每个音符对应着不同频率,这样就可以利用不同的频率的组合,加以与拍数对应的延时,构成音乐。
了解音乐的一些基础知识,我们可知产生不同频率的音频脉冲即能产生音乐。
对于单片机来说,产生不同频率的脉冲是非常方便的,利用单片机的定时/计数器来产生这样的方波频率信号。
因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。
2.4音调的产生
前面讲到声音只是某一范围的频率,也就所谓的音频。
因为扬声器发生只需要半个周期即可,所以用单片机产生声音只要送电半个周期的时间就可以实现,我们用音调Do来举例,音调Do周期波形如图9。
我们可以用延迟函数或者Timer定时中断可以产生音调。
计算音调Do的周期:
Do频率=262Hz→T=1/f=1/262=3186μs
所以实际送电的时间只有3826/2=1908μs
Dof=3186μs
2.5延迟函数
对于12MHz的8051系统而言,若要延迟1ms,可以用“delay1ms
(1);”指令,若需要延迟5ms,则可使用“delay1ms(5);”.很明显,这个函数的刻度为1ms,但是如果要求小于1ms,我们可以改变内循环的数量决定延迟时间,因为内循环的数量为120,可延迟1ms,该函数的最小刻度为1ms;将内循环的数量改为12,可延迟0.1ms,该函数的最小刻度为0.1ms,即100μs。
如表1。
表1
内循环数量
最小延迟时间(ms)
最小延迟时间(μs)
120
1
1000
60
0.5
500
6
0.05
50
3
0.025
25
1
0.0083
8.3
1ms延迟函数如下:
voiddelay1ms(unsignedcharx)
{unsignedchari,j;//声明变量
for(i=0;ifor(j=0;j<120;j++)//内循环
}
8μs延迟函数如下:
voiddelay8μs(unsignedcharx)
{unsignedchari,j;//声明变量
for(i=0;ifor(j=0;j<120;j++)//内循环
}
音乐的拍子种类,找出其中最短的拍子,例如整首音乐中,包含1/4拍、1/2拍、3/4拍、1拍、2拍,则以1/4拍为基准,然后写一段1/4拍长度的延迟函数,若要产生1/4拍的长度,则执行该函数时,变量为1;若要产生1/2拍的长度,则执行该函数时,变量为2;如要产生3/4拍的长度,则执行该函数时,变量为3;若要产生1拍的长度,则执行该函数时,变量为4,如要产生2拍的长度,则执行该函数时,变量为8……依次类推。
2.6定时中断
在Mode1模式下,定时量最多可达65536,也就是65536μs,足以产生低音Do所需的半周期1908。
所以,若要产生低音Do的音频,则只需要执行1908定时量的timer中断即可。
每中断一次,就改变连接喇叭的输入/输出的状态,就能发出低音Do的声音。
如要产生其他音阶,只需要按表1-1的T字段设定定时量即可。
如下程序一Mode1来产生低音的Do:
#include
sbitspeaker=P1^0;//声明输出端
main()
{speaker=0;//喇叭初始值
IE=0x82;//启用Timer0
TH0=(65536-1908)/256;//填入定时量的高八位
TL0=(65536-1908)%256;//填入定时量的低八位
TR0=1;//启动Timer0
While
(1);//停止
}