欢迎来到天天文库
浏览记录
ID:8932934
大小:55.00 KB
页数:6页
时间:2018-04-12
《基于单片机的音乐盒设计与实现》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、基于单片机的音乐盒设计与实现 中图分类号:TP338文献标识码:A:1009-3044(2016)16-0234-03 音乐是由人们在长期发展中为了表达各种情感而特别挑选出来的,并组成一个固定的系统[1]。音乐以其具有大众的魅力,吸引着来自不同地域的人们共同欣赏着优美的音乐,激发调动人们埋藏在内心那已久的悸动。同时,在21世纪,电子技术进入了辉煌的发展时期,其产生的电子产品也遍布社会的各个领域,在各行各业中单片机都在发挥着核心作用,如何将电子技术与音乐相融合,亦是研究热点之一。本文通过利用单片机及音乐相关知识,设计一个以52单片机为核心元件的电子音乐
2、盒,以满足功能多样、低成本、方便使用、小巧灵活等需求。 1音乐盒设计框图及流程 该音乐盒是以STC89C52单片机为核心,加上外围电路如:矩阵键盘电路、蜂鸣器电路、LCD电路、USB供电电路以及LED灯闪烁电路所组成的[2]。音乐盒设计框图和流程图如图1、图2所示: 2系统软件设计 2.1音乐程序设计 已知不同的音调有着不一样的频率,每个音调都有着不同的时间周期常数[3]。用定时器T0对单片机进行定时,通过输出不同周期的方波给蜂鸣器来控制、发出需要的音调[4]。从低音到高音每一个音调都有定时器T0对应的一个初值,由此当晶振为12MHz,可以列出
3、音调与定时器T0初值的表1: 通过表1,可以读出音乐简谱上每个音符对应的音调,读出对应的定时器T0的初值,让定时器T0工作在定时模式1,当计数从初值到最大值65536时溢出,并触发单片机某个管脚信号取反,所产生的就是所需要的音调频率,再通过蜂鸣器发出对应音调的声音。 在本设计中以延时函数控制每个音符的时长来实现,以十六分音符的时长编写一个延时函数,做为其他音符时长的一个基准,所以调用一次就是十六分音符的时长,循环调用该函数两次就是八分音符,循环调用四次就是四分音符,循环调用该函数八次就是二分音符。根据以上所述,在程序中本设计是这样处理的:把各个音调所
4、对应定时器T0的初值化为十六进制数,取每个音调初值的高八位、低八位依次放在两个数组中。音阶频率表高八位数组codeucharFREQH[]={0xF8,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF};音阶频率表低八位数组codeucharFREQL[]={0x8C,0x5B,0x15,0x67,0x04,0x90,0x0C,0x44,0xAC,0x09,0x33,0x82,0xC8,0x06,0x22,
5、0x57,0x85,0x98,0xC1,0xE4,0x03}。 音调和节拍关系处理:从简谱可以读出每个音符的音调和节拍存在数组中,每三个表示一个音符:第一个数字表示音符名1234567;第二个数字表示音调所在音区:0是重音,1是中音,2是高音;第三个数字表示延时函数的调用次数:1是16分音符调用次数;2是8分音符调用次数;4是4分音符调用次数;8是2分音符调用次数;16是全音符调用次数。通过这样就可以构成一首音乐的数组,下面就表示《欢乐颂》在本设计中数组的表示: 以此简谱为标准说明从简谱到音乐的编码:数组第一个数字3表示第一个音符是3,第二个数字是1
6、表示第一个音符是中音,第三个数字4表示这是个四分音符,所以第一个音就是四分音符的中音3。 2.2LCD显示程序设计 LCD显示之前,需进行初始化,之后才能对它进行写指令或数据,下面图3是LCD初始化过程: 本设计采用8位数据并行方式,DL取1,RE取0,向LCD写入0x30指令。功能设定写入指令0x30。显示开关的控制指令:D=1,B=1,C=1,向LCD写入0x0f指令,等待时间大于100us。清除显示指令,向LCD写入0x01指令,等待时间大于10ms,进入模式设置,向LCD写入0x06指令。完成初始化设置,根据控制端使用单片机向LCD写入指令
7、和写入数据。 3系统硬件设计 3.1硬件原理图 基于AltiumDesigner的原理图库建立music.SCHLIB[5]。图4给出了音乐盒在AltiumDesigner中设计的原理图。 通过音乐盒原理图的绘制后,进行编译排除原理图中漏接或者其他可以检测到的问题,验证无误后导入到PCB进行布局和布线。 3.2单片机最小系统电路 3.2.1时钟振荡电路 52MCU的运行速度和其稳定性依赖于微控制器时钟频率,时钟电路直接关系到设备是否可以正常使用,本设计时钟电路采用的是内部时钟模式下,单片机有一个内部高增益反相放大器,通过作为输入引脚XTAL
8、1,输出引脚为XTAL2,构成自激振荡电路[6]。 3.2.2复位电路 ST
此文档下载收益归作者所有