基于单片机的音乐盒设计与实现

2016-07-22 21:16魏林海
电脑知识与技术 2016年16期
关键词:音乐盒蜂鸣器单片机

魏林海

摘要:通过以STC89C52单片机为核心,设计一款数字音乐盒。该音乐盒主要由以下几部分组成:STC89C52单片机的最小系统,蜂鸣器电路,12864LCD显示电路,4*4矩阵键盘电路,LED灯闪烁电路;功能上实现读取乐谱上的信息并转化为单片机可用数据,通过驱动蜂鸣器实现音乐的播放。在矩阵键盘上使用按键来选择十首歌曲的播放及相关控制,同时在液晶屏上显示音乐的相关信息。硬件电路图布局以Altium Designer为设计平台,进行PCB设计,完成数字音乐盒的整体设计、实现。

关键词:单片机;音乐盒;蜂鸣器;LCD;PCB

中图分类号:TP338 文献标识码:A 文章编号:1009-3044(2016)16-0234-03

音乐是由人们在长期发展中为了表达各种情感而特别挑选出来的,并组成一个固定的系统[1]。音乐以其具有大众的魅力,吸引着来自不同地域的人们共同欣赏着优美的音乐,激发调动人们埋藏在内心那已久的悸动。同时,在21世纪,电子技术进入了辉煌的发展时期,其产生的电子产品也遍布社会的各个领域,在各行各业中单片机都在发挥着核心作用,如何将电子技术与音乐相融合,亦是研究热点之一。本文通过利用单片机及音乐相关知识,设计一个以52单片机为核心元件的电子音乐盒,以满足功能多样、低成本、方便使用、小巧灵活等需求。

1 音乐盒设计框图及流程

该音乐盒是以STC89C52单片机为核心,加上外围电路如:矩阵键盘电路、蜂鸣器电路、LCD电路、USB供电电路以及LED灯闪烁电路所组成的[2]。音乐盒设计框图和流程图如图1、图2所示:

2 系统软件设计

2.1 音乐程序设计

已知不同的音调有着不一样的频率,每个音调都有着不同的时间周期常数[3]。用定时器T0对单片机进行定时,通过输出不同周期的方波给蜂鸣器来控制、发出需要的音调[4]。从低音到高音每一个音调都有定时器T0对应的一个初值,由此当晶振为12MHz,可以列出音调与定时器T0初值的表1:

通过表1,可以读出音乐简谱上每个音符对应的音调,读出对应的定时器T0的初值,让定时器T0工作在定时模式1,当计数从初值到最大值65536时溢出,并触发单片机某个管脚信号取反,所产生的就是所需要的音调频率,再通过蜂鸣器发出对应音调的声音。

在本设计中以延时函数控制每个音符的时长来实现,以十六分音符的时长编写一个延时函数,做为其他音符时长的一个基准,所以调用一次就是十六分音符的时长,循环调用该函数两次就是八分音符,循环调用四次就是四分音符,循环调用该函数八次就是二分音符。根据以上所述,在程序中本设计是这样处理的:把各个音调所对应定时器T0的初值化为十六进制数,取每个音调初值的高八位、低八位依次放在两个数组中。音阶频率表高八位数组code uchar FREQH[]={0xF8, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF}; 音阶频率表低八位数组code uchar FREQL[]={0x8C, 0x5B, 0x15, 0x67, 0x04, 0x90, 0x0C, 0x44, 0xAC, 0x09, 0x33, 0x82, 0xC8, 0x06, 0x22, 0x57, 0x85, 0x98, 0xC1, 0xE4, 0x03}。

音调和节拍关系处理:从简谱可以读出每个音符的音调和节拍存在数组中,每三个表示一个音符:第一个数字表示音符名1 2 3 4 5 6 7;第二个数字表示音调所在音区:0是重音,1是中音,2是高音;第三个数字表示延时函数的调用次数: 1是16分音符调用次数;2是8分音符调用次数;4是4分音符调用次数;8是2分音符调用次数;16是全音符调用次数。通过这样就可以构成一首音乐的数组,下面就表示《欢乐颂》在本设计中数组的表示:

以此简谱为标准说明从简谱到音乐的编码:数组第一个数字3表示第一个音符是3,第二个数字是1表示第一个音符是中音,第三个数字4表示这是个四分音符,所以第一个音就是四分音符的中音3。

2.2 LCD显示程序设计

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写入指令和写入数据。

3 系统硬件设计

3.1 硬件原理图

基于Altium Designer的原理图库建立music.SCHLIB[5]。图4给出了音乐盒在Altium Designer中设计的原理图。

通过音乐盒原理图的绘制后,进行编译排除原理图中漏接或者其他可以检测到的问题,验证无误后导入到PCB进行布局和布线。

3.2 单片机最小系统电路

3.2.1 时钟振荡电路

52MCU的运行速度和其稳定性依赖于微控制器时钟频率,时钟电路直接关系到设备是否可以正常使用,本设计时钟电路采用的是内部时钟模式下,单片机有一个内部高增益反相放大器,通过作为输入引脚XTAL1,输出引脚为XTAL2,构成自激振荡电路[6]。

3.2.2 复位电路

STC89C52单片机最小系统中的复位电路是最小系统中另外一个重要组成部分,它主要的作用就是:用在对单片机实现初始的状态。

3.3 蜂鸣器电路

单片机通过P3.7口与蜂鸣器模块联系在一起,当蜂鸣器两端加上工作电压后,蜂鸣器就可以发出鸣叫声。该电路之所以能够实现控制蜂鸣器的响与不响,主要是利用三极管Q1工作在开关状态,当P3.7=1时,三极管Q1工作在截止区,蜂鸣器两端与5V电源断开,此时不发声;当P3.7=0时,三极管Q1工作在饱和区,发射极与集电极几乎成短路状态,蜂鸣器两端有电压从而使得蜂鸣器鸣叫声。

3.4 LED闪烁电路模块

LED闪烁电路由发光二极管构成的,共有8个,一方面同一端接在一起接到VCC,另一方面8个发光二极管各自通过一个阻值足够的电阻,从而减少电流,然后分别接到单片机的P0的8个管脚构成,当P0的某个管脚通过程序控制其为高电平,那么它对应的LED是一个二极管,符合二极管的原理,所以它处于截止状态,没有电流通过,所以灯是灭的。反之,当P0的某个管脚通过程序控制其为低电平的时候,同理,这时电流可以流经二极管,因为它处于饱和区,所以灯是亮的。通过在keil开发环境改变LED相关的程序让其可以达到多种的亮灭情况。

3.5 矩阵键盘扫描模块电路

由于单片机I/O口数目有限,当需要用多个按键,采用独立按键一个键占用一个端口这样单片机可能会出现端口不够用的情况。本次设计就是这种情况,采用独立按键会占用大量单片机端口而出现端口不够用,所以为了高效利用单片机的I/O口,采用矩阵式键盘可以只利用八个I/O口控制16个按键,16个按键分成4行4列。每个行列线的交叉点设一个按键,以此构成矩阵键盘。

对于矩阵键盘按键的识别方法,本设计采用的是线反转法。首先先让行线全为高电平,列线全为低电平,当一个按键按下的时候会使得按下的键对应的一条行线变为低电平,这一步就可以判断该按键在哪一行,接着让行线全为低电平,列线全为高电平,同理,当一个按键按下的时候会使得该键对应的列线变为低电平,通过这两步确定按键的所在的行列也就可以确定是矩阵键盘第几个按键被按下了[7]。

3.6 LCD显示模块

音乐盒在LCD上主要显示音乐信息,包括音乐的序号、音乐名称、音乐作曲以及作曲家,所以这里采用的是带中文字库的点阵型液晶12864,从名字可以看出它表示的意思,它表示在液晶范围的横向可以显示128个点,纵向可以显示64个点。该芯片内部共有8192个中文汉字,基本确保常用汉字都包括进去了,比较偏的汉字可以通过造字来实现。每个汉字占据16*16个点,所以屏幕一次最多显示8*4个汉字,液晶的控制芯片有很多,由于中国汉字的特殊性,这里采用的是用ST7920控制屏幕的显示,因为其带有中文字库,可以显示本设计所需要的一些信息。

单片机通过LCD的控制端的不同组合来进行不同的通信,LCD的主要控制端有第4脚RS,第五脚R/W,第六脚E,第十五脚PSB,在程序里可以通过RS和R/W的高低电平(即置1或置0)组合来选择单片机写指令或写数据到LCD存储器,以及单片机从LCD读指令或读数据。

本设计中主要用到当RS=0,R/W=0,单片机向LCD写指令,当RS=1,R/W=0,单片机向LCD写数据。

4 结果展示

使用说明:从key1~key10表示第一首歌曲到第十首歌曲,key11表示暂停,key12表示播放,key13表示上一首,key14表示下一首。

音乐盒播放界面如图5所示:

本设计把音乐和电子联系在一起,以一个STC89C52单片机为核心,通过矩阵键盘来达到控制音乐的目的,并把当前音乐的信息通过12864液晶屏显示出来,并利用LED灯来给音乐伴奏。

参考文献:

[1] 张新彩. 基于内容的音乐检索技术研究与实现[D]. 西安:西北大学, 2009.

[2] 汲项枫. 基于嵌入式系统的便携式评价终端设计与开发[D]. 青岛:中国石油大学(华东), 2012.

[3] Atmed Corporation. Microcontroller Data Book[Z]. 1999.

[4] 马松平. 谈谈音乐教学中怎样记录音的高低长短[J]. 读写算(教育教学研究), 2011(41).

[5] 王鹏. 以Altium Designer为平台的EDA实践教学探讨[J]. 电子世界, 2012(2).

[6] 刘凤格等. MCS-51单片机的时钟电路[J]. 菏泽学院学报, 2003(2).

[7] 张迎辉. 单片微型计算机键盘接口设计[J]. 信息技术, 2004(7).

猜你喜欢
音乐盒蜂鸣器单片机
电动自行车产品车速提示音检测现状和整改技术研究(2)
特别的音乐盒
掌控板制作简易钢琴
基于单片机的SPWM控制逆变器的设计与实现
基于单片机的层次渐变暖灯的研究
基于单片机的便捷式LCF测量仪
单片机驱动蜂鸣器的程序设计
丰田凯美瑞240V车间隙警告蜂鸣器异常鸣响
音乐盒里的秘密
Microchip推出两个全新PIC单片机系列