《基于51单片机的数字音乐盒设计.doc》由会员分享,可在线阅读,更多相关《基于51单片机的数字音乐盒设计.doc(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于51单片机的数字音乐盒设计海 南 大 学毕 业 论 文(设计)题 目: 基于51单片机的数字音乐盒设计学 号: 20151681310270 姓 名: 王圣勇 年 级: 2015级 学 院: 信息与通信工程学院 专 业: 电子信息工程 指导教师: 刘细阳 完成日期: 2019 年 5 月 10 日 - 43 -摘 要本次设计根据单片机技术原理,对单片机数字音乐盒电路硬件部分进行模块化设计,音乐盒以51单片机作为主控核心,硬件电路主要由12Mhz晶振电路、复位电路、4X4矩阵键盘电路和LCD液晶显示电路和等模块组成。系统软件设计方面使用汇编语言进行编写,直接简捷,可有效地访问、控制单片机。系
2、统软件部分的程序主要包括主程序、矩阵键盘按键子程序、LCD扫描程序、歌曲播放子程序和延时子程序等。该数字音乐盒内置10首歌曲,每首歌曲都有相应的按钮,还有上一首、下一首、开始和暂停4个功能,可通过按键进行功能选择。本论文包括系统方案的建立、硬件电路的具体设计及软件编程的程序实现等过程。并通过系统的不断调试,验证了设计方案的可行性。最终仿真结果中,单片机音乐盒能够实现10首歌曲的选择及播放、显示播放曲目序号名字和播放时间,开机还有欢迎字符等功能。实验证明,该系统具有一定的实用性。关键词:51系列单片机;软件编程;数字音乐盒Abstract According to the technical p
3、rinciple of single-chip computer, a digital music box based on 51 series single-chip computer is designed and manufactured through modular design of hardware circuit and software programming. The main control core of digital music box is AT89C51 micro-controller. The hardware circuit consists of 12
4、MHz crystal oscillator circuit, reset circuit, 4X4 matrix keyboard circuit, LCD display circuit and other modules. In the aspect of system software design, assembly language is used to write, which is direct and concise, and can effectively access and control the single chip computer. The system pro
5、gram mainly includes main program, Matrix keyboard keystroke subroutine, song playing subroutine, delay subroutine, etc. The digital music box contains 10 songs, each song has corresponding buttons, and there are four functions: the last song, the next song, the beginning and the pause. The function
6、 can be selected by the buttons. This paper mainly consists of three parts: the establishment of the system scheme,the specific design of the hardware circuit and the realization of the software programming program .After continuous debugging and improvement, the system is finally realized and the f
7、easibility of the design scheme is verified. In the final simulation results, the single-chip music box can select and play 10 songs, display the serial number and playing time, boot and welcome characters and other functions. Experiments show that the system has certain practicability.Key words: AT
8、89C51 Microcontroller; Software Programming; Digital Music Box目 录1.绪论- 1 -1.1选题背景- 1 -1.2研究意义- 1 -1.3课题设计目的及主要工作- 2 -2.硬件设计- 3 -2.1系统硬件框图- 3 -2.2单片机的选取- 4 -2.2.1单片机AT89C2051介绍- 4 -2.2.2 80c51相关管脚说明 - 5 -2.3晶振电路- 7 -2.4复位电路- 7 -2.5 LCD液晶显示电路- 8 -2.5.1显示方式的选取- 8 -2.5.2 LM1602字符型液晶介绍- 8 -2.6 音频输出电路- 10
9、 -2.7 4X4键盘矩阵电路- 11 -2.8 系统整体电路图- 12 -3.软件设计- 13 -3.1主程序设计- 13 -3.2音调和节拍的确定- 14 -3.2.1音调的确定- 14 -3.2.2节拍的确定- 16 -3.2.3音符和节拍的编码- 17 -3.3外部中断源系统设计- 18 -3.4 定时器/计数器设计- 19 -3.6 LCD1602显示程序- 21 -4.系统调试- 24 -4.1 proteus仿真软件介绍- 24 -4.2 系统仿真调试- 24 -4.3实物调试- 25 -5.总结与展望- 27 -参考文献- 28 -附录- 30 -1.绪论1.1选题背景在经济飞
10、速增长的背景下,人们对日常休闲生活的品质要求也越来越高。听音乐是一个受众面广的休闲生活方式,而智能音乐盒、mp3、手机音乐成为了人们生活中必不可少的东西。单片机数字音乐盒凭借它小巧实惠、使用方便、音乐质量高、发音稳定等优势脱颖而出。目前市面上主要流传的是通过弹簧片发声的机械音乐盒,通过铁钉拨动弹簧片来进行发声。但是,传统机械音乐盒的体积想对较大,较为笨重,而且发声容易受到外部因素比如灰尘、水和摆放位置等干扰导致弹簧片变形,音乐盒跑调,十分影响用户听觉体验。除此之外,传统的机械音乐盒要想保障音乐播放的稳定性,必需要保证其放稳放平,而且制作工艺复杂,成本相对较高,难以实现批量生产。而单片机数字音乐
11、盒控制功能强大,播放音乐更为稳定,更小巧,音质更优美,能够模拟多种乐器的声音,能在不改变硬件的情况下修改播放的曲目。因此单片机音乐盒更能适应目前人们生活的需求。再者,单片机音乐盒的电源驱动部分是由由几节5V电池组成的,成本较低,而且制作工艺简单容易复制,因此能够简便实现商用规模生产,价格也更加便宜。在音乐盒的扩展性方面,单片机作为面向控制的集成规模电路,具有强大的控制能力,音乐盒不仅可以根据按键功能播放不同的歌曲,使用方便,还可以根据需要需要改变节拍来改变歌曲的节奏。另外,单片机音乐盒设计中可添加一块LCD屏幕,增设放歌时间、序号显示灯功能,使音乐盒的功能更加丰富,增加用户体验度。1.2研究意
12、义单片机技术目前已经相当成熟,已广泛应用在我们日常生活和工业生产等各方面。单片机凭借其面向控制,可靠稳定,价格低的特点。只需要将音乐简谱和数据相互转换,就可以通过单片机将体积大、容量小、功能单一的传统机械音乐盒改进成一个小巧精致,功能丰富,扩展性高的数字单片机音乐盒,能给用户带来更好的使用体验。如今数字化时代背景下,单片机在通信、计算机和电子工艺等各个领域中都作为基础器件来使用,技术发展越来越快,功能越来越多。这使得单片机数字音乐盒的扩展功能十分强大,单片机数字音乐未来将凭借其体积小,功能强大的优点,在音乐播放器市场,占得一席之地,改变人们的休闲娱乐生活方式。通过对单片机数字音乐盒的设计,能够
13、加深我们在大学里学到的关于单片机设计,面向控制等方面知识的理解。比如通过这次设计,我们更清楚认识到声音是通过震动产生的,单片机可以通过对某一个串行I/O口输出一定频率的方波,该方波经过放大电路处理后作用给扬声器,这样就可以产生不同的声音了。1.3课题设计目的及主要工作 本次设计的主要内容是设计出一个使用51系列单片机作为控制核心的数字音乐播放器,其核心内容顾名思义是51单片机,即系统的主控核心,在硬件设计中,还包括了复位电路,晶振电路,4X4矩阵电路,LCD显示电路,蜂鸣器电路等模块。音乐实质上就是不同月符的组成,这些乐符代表着不同的频率,由于单片机内部自带2个计数器/定时器,可以通过这两个定
14、时/技术器来产生不同频率的方波,这些不同频率的方波送入无源蜂鸣器中就可以发出不同的音调了,音调组合起来就形成了不同的音乐。因此,只需要搞清楚音符与频率之间的关系,计算了应该给单片机写入的初值,就能实现设计基本要求。除此之外,音乐盒还能通过LCD显示出播放曲目序号和播放时间。单片机电子音乐盒外形小巧,播放的歌曲优稳定美。使用干电池的供电方式使得电子音乐盒更加方便,制作简单,可批量生昌,成本低,因此厂商能成批的进行制造。通过这次单片机数字音乐盒色剂,我还能巩固大学期间学到的冠以单片机原理和应用的知识,队软硬结合,面向控制等知识有更深一步的理解。2.硬件设计 此次设计的单片机数字音乐盒,开机LCD有
15、欢迎字符,内置10首歌曲,每首歌曲都有相应的按键控制,通过驱动蜂鸣器播放音乐。除此之外,还有上一首、下一首、开始、暂停四个按键,同时LCD能够显示播放曲目序号和播放时间。硬件设计在下文中具体阐述。2.1系统硬件框图图2.1 系统硬件框图系统硬件框图如图2.1所示。该数字音乐盒的核心部分是51系列单片机,音乐盒有一个电源总开关按钮,开机后LCD屏幕出现英文欢迎提示字符,开启后通过4X4矩阵键盘电路实现播放,暂停,上一曲,下一曲等按键控制功能。播放乐曲方面,蜂鸣器电路模块利用单片机内部定时/计数器对某一个串行I/O口输出一定频率的方波,该方波经过放大电路处理后作用给无源蜂鸣器,这样就可以产生不同的
16、声音,由此来演奏歌曲。单片机内部还存储了10首乐曲,每首乐曲都有相应的控制按钮,在LCD屏幕上可以看到当前播放歌曲的序号,播放时间。在这次设计中,我用到了AT89C51单片机,4*4键盘矩阵,蜂鸣器, LCD液晶显示屏等硬件电路中常用的元器件。(1) 硬件电路的主要核心就是AT89C51芯片,蜂鸣器作为外部音放电路,实现音乐播放器的基本功能(2) LCD液晶显示电路中,我使用的是1602液晶显示器,通过单片机P0口控制LCD的数码管,达到显示播放曲目名称、序号和播放时间的目的。同时开机有欢迎字符;(3) 功能键盘部分是用4*4矩阵键盘作为按键开关,通过单片机P1口控制,实现10首歌曲的播放选择
17、,还有上一首,下一首,开始和暂停功能的选择;(4)发声电路模块的核心部分是无源蜂鸣器,通过单片机P3.7口输出不同频率的方波,从而实现不同歌曲的播放。2.2单片机的选取 本次设计的单片机数字音乐盒核心部分功能是通过1个串行I/O口输出不同频率的方波来改变发音的音调,因此音频输出需要一个I/O口实现。并且另外的LED显示屏显示功能需要根据单片机剩余端口设计。通过查阅单片机资料可知,AT89C2051拥有40个体积小巧的引脚,内部还有2k字节的程序存储器容量,符合本次设计软件部分容量需求,AT89C2051工作在低压低频环境,价格低廉容易购得。2.2.1单片机AT89C2051介绍 在本次设计中,
18、使用的是MC51系列单片机,他是单片机系列中最为常见也相对较简单的一种,AT89C2051是美国爱特梅尔(ATME)L公司生产的CMOS 8位单片机,工作在5V电压下、性能强劲,可以满足大部分普通需求。它具有以下主要特性: (1)51系列单片机片内含2K字节的可反复擦写的只读程序存储器(PEROM)和128个字节的随机数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产。片内置通用8位中央处理器和Flash存储单元,功能十分强大,可以应用于各种场合。 郑伟强.基于AT89C51单片机的微波温度测量仪J.自动化与仪器仪表,2014(11):78-80+83. (2)它有4个
19、可以用作输入或则输出的8位并行I/O接口P0,P1,P2,P3,;其中P3口是一个多功能口,不仅仅能用作通用I/O口,他的每一位还有第二功能,具体参照单片机使用手册。 (3)因特尔公司开发的MCS-51是51系列单片机内核基础,因此指令系统可以兼容,让用户有更加多样化的选择,同时还可以选择相同的开发工具;操作者可以先根据要求写好代码,在根据使用场景来决定单片机型号。让用户有更加多样化的选择,同时还可以选择相同的开发工具。 (4)51单片机在物理层面上用着相互独立的程序存储器ROM和数据存储器RAM,但在逻辑层面上则是先攻的地址空间,即所谓的“哈佛”结构。这样我们利用不同的指令和寻址方式就可以分
20、别对64KB的程序存储器ROM和64KB的数据存储器RAM寻址,可以达到在工业上有关数据的测量与控制要求。 (5)51系列单片机中断源一共有五个,分为了两种不同优先级,每个中断源的优先级可以通过软件编程来改变;51单片机内部还集成了2个16位计数器/定时器,可以直接使用单片机进行定时,计数操作,十分的便利。除此之外,51系列单片机集成了一个全双工的异步串行接口,发送数据的同时还可以接受数据,让单片机之间的通信或则与上位通信更加便利。2.2.2 80c51相关管脚说明 图2.2 AT89C51单片机管脚图 Vss(20):接地端 Vcc(40):单片机电源供给端,接5V电源 XTAL1(19)和
21、XTAL2(18):一般在XTAL1和XTAL2之间接石英晶体和10p50pF的震荡电容可以使单片机工作在片内时钟震荡方式;也可以让XTAL1接地,XTAL2脚接入外部时钟信号,使单片机工作在外部时钟方式。 P0口(3932):单片机的双向I/O口,可以用于单片机扩展时做低8位地址和数据线,除此之外,P0口作输出的时候,需要加上拉电阻。 P1口(18)/P2口(2128):单片机的普通8位双向I/O口 RST/Vpd(9):RST是复位信号输入端,如果这个端口输入了2个机器周期(24个振荡周期)的高电平,就完成了对单片机的复位操作。除此之外,这个端口还可以作为主电源发生故障后的备用电源口。 P
22、3口(1017):P3口也是8位双向I/O口,。除此之外是P3口还可以作为多功能口,有着其他I/O口无法实现的功能。如表2.1所示。表2.1 P3口第二功能表2.3晶振电路图2.3晶振电路模块 晶振在单片机内部的作用不可忽视,它通过晶振电路产生单片机设计时需要的时钟频率,而单片机的一切指令的执行都是建立机器周期基础上的。比如提高晶振频率,单片机运行速度变快。在本次设计中,机器周期采用1us,因此使用用了12MHZ的晶振 如上图所示,XTAL1是反向放大器的输入,而XTAL2是方向放大器输出,图中12Mhz晶振X1与单片机的19号脚XTAL1和18号脚XTAL2构成的振荡电路中会产生偕波,因此在
23、设计过程中为了保证精确和单片机的稳定,在晶振的两引脚处接入C1和C2这两个电容接地,提高电路系统稳定性。2.4复位电路图2.4 复位电路模块 首先要明白我们为什么要设计复位电路呢?设想一下,单片机其实就是一个小型计算机,在单片机工作时我们可能会遇到各种各样的情况,当受到环境干扰或者是其他原因导致的单片机无法正常工作甚至死机时,复位电路的作用就凸显出来了。复位电路的相当于整个单片机中的重启键,高电平复位时相当于按下重启键,单片机内部程序相当于从头执行,避免了实际使用时遇到一些不可控的情况。复位电路设计如图所示,当整体电路处于稳定状态的时候,电容C3起到了隔绝直流的作用,即隔离了5V,复位按钮处于
24、弹起状态,即RST电位和GND都是低电位,本次设计中51系列单片机是高电平复位,正常工作RST端是低电平,所以此复位电路在单片机正常工作时没有影响。当按钮按下之后,RST端会变成高电位,此时单片机复位重启。2.5 LCD液晶显示电路2.5.1显示方式的选取 查阅资料可知,LED的显示方式有静态显示和动态显示两种。 在静态显示方式中,每一帧图像中的二极管亮与灭的状态用1和O表示,二极管状态为O的时候,无电流通过,灭状态。相反,二级管状态为1,亮状态。这种显示方式使得每一个数码管都需要一个I/O口来控制它的状态,虽然只需要很小的电流就可以得到让人满意的亮度,但是只适用于位数较少的情况。 动态显示方
25、式不同于静态显示方式每个数码管单独用一路控制信号控制,其顾名思义就是把各个数码管轮流点亮,由于人眼视觉具有一定的延迟性,如果光二极管的导通时间不小于一毫秒,就可以达到所有LED同时显示的效果,而且动态显示的二极管显示亮度较好符合要求,此时扫描刷新频率为50Hz。不过动态显示需要的电流较大,要加驱动器,一旦没有合理的设计方法,就容易导致显示亮度低,LED灯不断闪烁灯技术问题。2.5.2 LM1602字符型液晶介绍 1602液晶,全称LM1602字符型液晶,能同时显示两行,十六列共32个字符。它是一种专用于显示阿拉伯数字、自定义符号和字符的点阵型液晶模块。它里面的中每一个字符都是由5乘7或者5乘1
26、1的点阵字符位组成的,其中每个点阵字符位的状态有0和1两种,其中每个字符位都有一个大概一个点距的距离,每行之间也有间隔,由此产生字符间距和行间距,但这个不连续性会导致图形效果差很多。LM1602各引脚功能如表2.2所示。表2.3 LM1602液晶引脚功能图2.5 LCD显示电路模块 如上图所示,P2.0P2.2外接LCD的RS、R/W、E端,控制写入指令,读取数据和执行指令等;而P0.0P0.7分别连接的是LM1602的D0D7,作为控制信号使用。但是在51系列单片中,P0口单独作为输出时,输出低电平为0,输出高电平的其实是高阻态(等同于悬空状态)。也就是说P0口不能做到实质性的的输出高电平来
27、给负载提供电流,在设计中我们可以由VCC通过这个上拉电阻来给负载供电,从而解决P0口内部开漏的问题。2.6 音频输出电路 在单片机应用的设计上,如果只需要简单的播放声音来提醒的话,那么使用蜂鸣器是最为简单便捷的。大部分设计中,蜂鸣器都是用作播放提示音或者报警音,比如更改设定、系统开启、系统关闭或是系统故障等发出声音提醒用户。由于此次设计只需要播放声音音调和把握好节拍,对音质方面没有太大要求,因此可以使用蜂鸣器播来设计音频输出电路。蜂鸣器分为有源蜂鸣器和无源蜂鸣器两中,有源蜂鸣器的内部自带驱动电路和振荡,虽然使用简单,但是频率固定,满足不了此次设计需求。而无源蜂鸣器会根据输入方波频率的改变发出不
28、同频率的声音,满足要求,因此采用无源蜂鸣器。图2.6 音频输出模块 此次音频输出模块中采用的核心部分是无源蜂鸣器,从单片机P3.7输出频率不断改变的方波,经过R1,R2,NPN构成的放大电路,激励蜂鸣器表现出信号,从而播放出不同的歌曲。2.7 4X4键盘矩阵电路图2.7 4X4键盘矩阵电路模块 本次设计的数字音乐盒主体部分内置10首歌,并且每首歌曲都有相应的按钮;除此之外,还有上一首/下一首,开始,暂停4个按钮。当按键数量较多的时候,我们为了减少I/O口的资源的占用,通常采用矩阵键盘。4X4键盘矩阵电路共16个按钮,完全可以满足本次设计需求。 所谓键盘矩阵电路,实质上是一级按键开关的组合,由于
29、这些按键的排布方式和矩阵相像,我们通常称它为矩阵键盘。那么,该如何准确判断出矩阵键盘中那个按键被按下呢?本次设计采用的是行扫描法(高低电平翻转法) 1.第一步单片机先判断矩阵键盘电路内是否有按键按下;如果有按键按下,那么判断按下键的所在列位置。单片机先把行线P1.0P1.3全部置低电平,列线P1.4P1.7置高电平,接着单片机检测列线的电平状态,如果所有列都是高电平状态,那么矩阵键盘键盘电路内中无键按下,反之,只要有一列的电平是低电平,那么键盘电路该列里面至少有一个键被按下。 2.第二步确认键盘电路里面具体闭合键的行位置,具体方法是:先将全部列线P1.4-P1.7置低电平,再把行线P1.0-P
30、1.3全部置高电平,然后不断检测行线的状态,只要有一行的电平是高电平状态,那么键盘电路里这一行有一个或者多个键被按下。 3.第三步计算出按键所在具体位置,通过列扫描和行扫描后,得到2组P1.0P1.7的电平状态,把这两组数据进行位或运算,就可以计算出按键的键值,然后通过查键值表就可以具体到时那个按键被按下了。2.8 系统整体电路图图2.8 系统整体电路图3.软件设计 如果说单片机系统的硬件设计是人的躯体的话,那么软件设计就是整个单片机系统的灵魂了,只有硬件和软件相结合,躯体和灵魂相组合,才能成为一个能够正常工作的单片机系统。由于单片机软件的可编程性,使得设计中的硬件系统组成结构能够精简;软件设
31、计配合模块化的硬件设计,可以在不改变系统硬件设计的情况下丰富,改变系统的功能。软件设计和硬件设计时相辅相成的,软件设计的前提是硬件系统的合理性,离开了硬件,空有一个灵魂,实现不了任何功能,因此,针对不同的硬件系统,为了让系统工作效率高,可靠性高,一个合理的编程设计必不可少。在软件设计中,一定要搭配流程图来进行设计,系统流程图有助于我们梳理思路,必变不必要的遗漏,bug等。3.1主程序设计 整个单片机音乐盒的软件设计部分,主模块是整个系统的框架,也是设计的核心部分。能否实现基本要求和最终性能的好坏稳定等,都很大程度取决于主模块的设计。此次单片机音乐盒的主模块结果流程图如图3.1所示。图3.1 主
32、模块流程图 电源启动后,开启主程序,单片机内部先初始化变量和LCD接口,然后初始化数字器T0和计时器,此时LCD显示英文欢迎字符。单片机检测4X4键盘矩阵电路中是否有按键按下,其中包括1-A对应的10个按键,下一首,上一首,暂停,开始4个按键。如果是歌曲对应的按键被按下,那么显示屏第一排就会显示歌曲名称,歌曲序号,第二排会显示播放时间,同时单片机驱动蜂鸣器播放出相应的歌曲。如果是上一首,下一首按键被按下,则会播放相对应的歌曲,但是播放第一首歌曲时按下上一首则无反应,播放最后一首歌曲(第10首歌曲)时按下下一首也无反应。若果暂停键被按下,那么播放中的歌曲被暂停,播放时间也静止不动,等待键盘电路的
33、动作。按下开机画面时则会显示单片机音乐盒开机画面,之后继续等待按键动作。3.2音调和节拍的确定3.2.1音调的确定依据常识来说,我们唱曲时常哼的“do re mi fa suo la xi ”就是所谓的音调,在乐谱上通常用1、2、3、4、5、6、7来表示。把“do re mi fa suo la xi”即1、2、3、4、5、6、7这一组7个音的距离分成12等分,每一个等分就叫做半音,每两个音之间共有2个半音,这两个半音组合起来就是一个全音。那么#3,b1这些音符代表什么意思呢?通常自然音唱成“do re mi fa suo la xi ”,在这些音调的左上角加上号或者b号就是变化音,表示升高半
34、音,叫升记号;降低半音则用b,叫降记音。例如Do表示在原来中音Do的基础上升了个半音,而Dob表示在原来中音Do的基础上降了个半音。中音Mi的频率(659Hz)刚好是高音Mi的频率(1318Hz)的一半,低音Mi频率(330 Hz)刚好是中音Mi的频率(659Hz)的一半。 每个音符都有着不同的频率,此次设计就是利用了单片机定时器/计数器T0产生不同频率的方波,由I/O输出到音频播放电路,从而驱动蜂鸣器发声。因此,只要改变T0的计数值就可以改变不同的音符,那么,如何确定每个音符和单片机T0计数值的关系呢? 举个例子,如果想要蜂鸣器发出中音Do,那么先要知道中音Do的周期,查表可知中音Do周期是
35、1912us,接着要计算出中音Do的半周期(也就是把周期除以2)为956us。之后让单片机定时中音Do的半周期时间956us,每次计时956us到了,单片机把输出的方波脉冲反向,然后再次计时中音Do的半周期时间,这样在输出端的串口就得到了可以在让蜂鸣器发出中音Do的频率方波。 知道了不同音符频率产生的基本原理,那么我们怎么让单片机计时不同音符的半周期时间呢?AT89C51的内部有自带的2个定时器/计数器,我们可以让单片机工作在计数器模式MODE1下,在这个模式下,TH0及TL0内设定的数值决定了单片机的定时值,这样就可以产生不同的频率方波了。产生音频的定时器初值计算公式如下:T=2kFoec/
36、(24Fr)其中:k的值根据单片机工作方式决定,可以为13(方式0),16(方式1),8(方式2);Foec为单片机晶振频率;Fr为希望产生的音频。根据设计可以知道K=16,Foec=12Mhz当要产生低音Do时,T=216-10000002262=63628当要产生中音Do时,T=216-10000002523=64580当要产生中音Do时,T=216-100000021046=65058 表3.1是Foec=12Mhz时,查阅资料后通过上面公式运算得到的每个音符频率与单片机定时器T0相关计数值的关系。表3.1 音符频率对照表低音频率(hz)简谱码T参数中音频率(hz)简谱码T参数高音频率(
37、hz)简谱码T参数Do26263628229Do52364580115Do10466505857Do27763731217Do55464633108Do11096508554Re29463835204Re58764684102Re11756511051Re31163928193Re6226473297Re12456513448Mi33064021182Mi6596477791Mi13186515745Fa34964103172Fa6986482086Fa13976517843Fa37064185162Fa7406486081Fa14806519841So39264260153So7846489
38、877So15686521738So41564331145So8316493472So16616523536La44064400136La8806496868La17606525234La46464463129La9326499464La18656526832Si49464524121Si9886503061Si197665283303.2.2节拍的确定 单片机播放音乐不仅仅需要播放的音调准确,还有很重要的一点是节拍也要跟得上,节拍是一首歌曲的灵魂所在,节拍的不同往往能影响整个歌给人的感受,它让音乐充满了旋律性。单个音调持续时间的长短即时值,一般用拍数表示,但一拍的持续时间没有统一规定,只要音
39、乐听起来正常悦耳即可。一拍持续时间过长,音乐冗长,旋律混乱;一拍持续时间过短,音乐急促,没有欣赏性。因此,一般选取一拍为0.4S-0.5S,而1/2 拍则为0.2S-0.25s.休止符表示暂停发音。 节拍数对应的是单个音符播放时间的长短,由于每个音符有着不同的频率,在播放音乐时只要把不同频率的组合配合节拍数对应的延迟相组合,就可以产生不同的音乐。在单片机内部,利用单片机的定时/计数器来产生产生不同频率的脉冲是非常方便的,音符和对应频率在上文已经解释了,下面说明节拍和相应延迟的关系。表3.2 1/4和1/8节拍的时间设定乐谱节拍1/4拍的延时时间/ms乐谱节拍1/8拍的延时时间/ms4/4125
40、4/4623/41873/4942/42502/4125 那么在单片机中如何控制一个音符该唱多长呢?节拍控制其实就是控制每个音符延时时间的问题,在编写程序时可以编写延时子程序,这样就可以通过循环延时来控制一个音符持续时间。首先,需要确定每个音符的发音时间,一般来讲是选择最小时长作为基本延时时间,比如当选定一拍持续400毫秒时,以四分音符作为节拍,四分音符持续400毫秒,八分音符持续200毫秒,十六分音符就持续100毫秒。此时,我们用100毫秒作为基本延时时间,因此,四分音符、八分音符、十六分音符对应的持续时间只需要分别调用4、2和1次延时程序就可以达到了。3.2.3音符和节拍的编码表3.3 节
41、拍与节拍码对照(Foec=12Mhz)节拍码节拍数节拍码节拍数11/4拍11/8拍22/4拍21/4拍33/4拍33/8拍41拍42/1拍51又1/4拍55/8拍61又1/2拍63/4拍82拍81拍A2又1/2拍A1又1/4拍C3拍C1又1/2拍F3又3/4拍 编写音乐程序时,先把乐谱的音符找出来,参照音符频率表建立对应的简谱码和定时器初值表,变换成音调参数;再按上表对照建立节拍码表,变换成相应节拍参数。做一个数据表格,把音符频率和节拍参数都存放在表格中,每个音符使用一字节,音符的高低存储在字节的高4位,音符的节拍存放在低4位。在播放的时候,调用程序取出播放音符的频率和节拍参数,播放结束后,取
42、出下一个音符的具体参数,如此循环知道歌曲播放结束。歌曲中通常会有空白音符,也就是休止符,一般音调参数设定成为FFH,节拍参数确定方法不变。当节拍参数调用到OOH时,说明歌曲结束。3.3外部中断源系统设计 51系列单片机内部的中断源一共5个,IE,IP,TCON和SCON是4个用于中断控制的特殊功能寄存器,分别用来控制定时器、串口、中断开关、中断优先级。其中5个中断源分成了2种中断优先级,为了实现两级中断服务程序的嵌套,每个中断源都可以通过编程设置成为高优先级或低优先级中断,单片机会按照中断源的优先级高低先后做出响应,执行相应中断程序。 在本次单片机数字音乐盒的中断源选取中,采用的是外部中断0方
43、式,0003H是外部中断0的入口地址,它来自于P3.2引脚(INT0)的外部中断请求,其中断响应级别在同级内优先度最高。单片机在收到到有效的中断申请时,先使相关标志位状态为1,是否要响应中断则在下一个机器周期通过检测相关标志位状态来决定。特殊功能寄存器TCON和SCON就是这些相关标志位的存放位置。其中,TC0N(定时器控制寄存器)的地址是88H,里面的每一个都可以位寻址,位地址是88H-8FH。TCON寄存器中与中断有关的控制如表3.4所示。表3.4 TCON标志位TCOND7D6D5D4D3D2D1D0TF1TF0IE1IT1IE0ITOIT0/IT1:外中断INT0/INT1的中断触发方
44、式由IT0/IT1决定。IT0/IT1=0为电平触发方式,低电平有效,而ITO/IT1=1就是负边沿触发方式INTO/INT1口上的负跳变有效。IE0/IE1: 外中断INT0/INT1的中断申请标志是IE0和IE1,如果检测到INT0/INT1上有着有效的中断申请,那么内部硬件会把IE0/IE1置1。如果CPU转向中断服务,那么内部硬件会把IE0/IE1置0。TF0/TF1: TF0/TF1都是定时器/计数器T0溢出中断申请标志。T0存在溢出时,TF0/TF1会被内部硬件置1状态,如果CPU转向中断服务,TF0/TF1会被内部硬件置O状态。3.4 定时器/计数器设计 51单片机片内定时器/计
45、数器的工作方式由特殊功能寄存器TMOD编程决定, TMOD(方式控制寄存器)地址为88H,控制字的格式如下表3.5所示。表3.5 TMOD标志位TMODD7D6D5D4D3D2D1D0GATEM1M0GATEM1M0其中高四位D7-D4是T1方式的控制字,低4位D3-D0是T0方式的控制字。D7/D3:GATE是门控位。可以辅助启动定时器。GATE=1,以外中断请求信号(INT1或INT0)启动定时器。由外部引脚P3.2(INT0)或P3.3(INT1)输入电平来控制运行单片机定时器,此时只有当P3.2/P3.3引脚,即INT0/INT1上的电平为1才能启动计数;GATE=0时,单片机以运行控制位TR启动定时器,外部引脚输入电平对定时器的运行无影响。D6/D2:C/T是方式选择位,C/T的状态决定单片机工作在定时器还是计数器方式,C/T=0为定时器方式,计数频率用的是单片机内部振荡频率的12之一。在这次设计中我使用的是12Mhz晶振,那么计数频率就是1Mhz;C/T=1数脉冲采用外部引脚的输入脉冲,此时为计数器方式,输入脉冲有高到低