数字音乐盒设计_第1页
数字音乐盒设计_第2页
数字音乐盒设计_第3页
数字音乐盒设计_第4页
数字音乐盒设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数字音乐盒设计摘 要电子音乐已广泛的应用于社会生活的各个领域,其类型从音乐卡片到CD、MP3等多种多样。利用单片机控制的电子音乐发生器软硬件上具有独特的优点,系统的开发周期短,成本低,电路制作容易。更换歌曲时,硬件电路无需作任何修改,只需修改软件即可实现。本文设计了单片机控制的音乐发生器系统,主要有硬件电路设计和软件设计两部分。硬件方面选择内部存储资源丰富的AT89C51单片机,时钟采用12MHz晶体振荡电路,软件方面使用汇编语言,同时还可根据个人的习好通过软件改变节拍的延时时间,增加电子音乐的趣味性。关键字:AT89C51芯片,LED数码管,LED显示器,蜂鸣器。目录一、相关知识介绍1(一)

2、单片机音乐盒介绍1(二)显示屏控制技术状况3二、总体方案论证与设计4(一)单片机的选取4(二)LED显示方式4(三)LED驱动模式5(四)系统总体结构框图5(一)AT89C51 芯片功能和硬件连接6(二)LED显示器8(三)键盘9(四)系统复位电路的设计10(五)时钟电路模块10(六)输出显示电路11(七)音频输出部分11(八)整体硬件电路12四、系统软件设计13(一)主模块的设计13(二)外部中断源系统设计13(三)基本显示模块设计14(四)系统初始化程序15(五)音调、节拍以及编码的确定方法15(六)程序流程19(七)文档顶端程序清单19五、调试结果26(一)系统总电路图26(二)运行结果

3、及分析26设计小结28参考文献29致谢30一、相关知识介绍(一)单片机音乐盒介绍1.发音原理发音原理:播放一段音乐需要的是两个元素,一个是音调,另一个是音符。首先要了解对应的音调,音调主要由声音的频率决定,同时也与声音强度有关。对一定强度的纯音,音调随频率的升降而升降;对一定频率的纯音、低频纯音的音调随声强增加而下降,高频纯音的音调却随强度增加而上升。另外,音符的频率有所不同。音符的发音主要靠不同的音频脉冲。利用单片机内部定时器/计数器0,使其工作在模式1,定时中断,然后控制P3.7引脚的输出音乐。只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周

4、期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。 2.音符频率的产生音符及定时器初始值:例如:中音1(do)的音频=523HZ,周期T=1/523s=1912定时器/计数器0的定时时间为:T/2=1912/2=956定时器956的计数值=定时时间/机器周期=956/1=956(时钟频率=12MHZ) 装入T0计数器初值为65536-956=64580将64580装入T0寄存器中,启动T0工作后,每计数956次时将产生溢出中断,进入中断服务时,每次对P3.0引脚的输出值进行取反,就可得到中音DO(523HZ)的音符音频。将5

5、1单片机内部定时器工作在计数器模式1下,改变计数初值TH0,TL0以产生不同的频率。下表1是C调各音符频率与计数初值T的对照表: 表1 C调各音符频率与计数初值T的对照表音符频率(Hz)/初值()音符频率(Hz)/初值()低1DO262/63627中1DO523/64580高1DO1042/65056低2RE294/63835中2RE589/64687高2RE1245/65134低3M330/64021中3M661/64780高3M1318/65157低4FA350/64107中4FA700/64822高4FA1397/65178低5SO393/64264中5SO786/64900高5SO15

6、68/65217低6LA441/64402中6LA882/64969高6LA1760/65252低7SI495/64526中7SI990/65031音符、音符编码及定时器初始值:为了产生音符,必低须求出音符低音5高音5的计数初值。例如C调的1DO的THTL=65536-50000/262=63627,中音DO的THTL=65536-/523=64580,高音DO的THTL=65536-/1042=65056。为了方便写谱,对其进行简单的编码,在编程时,根据音符编码(表2)查找对应的计数初值。比如说音乐是C调的,那么出现低音的5SO,直接将代码写为1;出现低音6LA,直接写一个2的代码;出现低音

7、7SI,直接写一个3代码。表2 音符编码表音符音符编码音符音符编码不发音0低5SO1低6LA2低7SI3中1DO4中2RE5中3M6中4FA7中5SO8中6LA9中7SIA高1DOB高2REC高3MD高4FAE高5SOF高6LAG3.节拍频率的发生节拍的产生与编码:音乐中的节拍用延时时间产生。例如,1拍=0.4s,1/4拍=0.1s,以此类推。假设1/4拍执行一次延时程序,则1/2拍就执行两次延时程序,所以只要求出1/4拍的延时时间,其余节拍就是它的倍数。为了方便,将节拍数也进行了编码,并且计算了乐谱节拍编程时的延时时间,如表3和表4所示。 表3 节拍数编码表按1/4拍为一个延时时间的节拍编码

8、与节拍对应的表按1/8拍为一个延时时间的节拍编码与节拍对应的表节拍编码节拍节拍编码节拍节拍编码节拍节拍编码节拍11/466/411/866/822/488/422/888/833/4A10/433/8A10/844/4C12/444/8C12/855/4F15/455/8表4 乐谱节拍编程时的时间延时表乐谱节拍1/4拍的延时时间乐谱节拍1/8拍的延时时间4/4125 ms4/462 ms3/4187 ms3/494 ms2/4250 ms2/4125 ms音符编码和节拍编码完成后,在编程时,每个音符占一个字节,高四位是音符编码,低四位是节拍编码。(二)显示屏控制技术状况1.串行输入与并行输入L

9、ED显示屏的数据传输方式主要有串行和并行两种。日前普遍采用串行控制技术,显示屏每个单元内部的不同驱动电路和各级联单元之间,每个时钟仅传送一位数据。采用这种方式的驱动IC种类较多,不同显示单元之间的联线较少,可减少显示单元的数据传输驱动元件,从而提高整个系统的可靠性和性价比,具体工程实现也较为容易。2.动态扫描与静态锁存技术LED显示屏控制系统实现显示信息的刷新技术有动态扫描和静态锁存两种方式。一般室内显示屏多采用动态扫描技术,即一行发光二极管共用一行驱动寄存器,根据共用一行驱动寄存器的发光二极管像素数目,分为1/4、1/16扫描等。室外显示屏基本上采用静态锁存技术,即每一个发光二极管都对应有一

10、个驱动寄存器,无需时分工作,从而保证了每一个发光二极管的亮度占空比为100%。动态扫描法可以大大减少控制器的I/O口,因此应用较广。3.自动检测及远程控制技术LED显示屏的构成复杂,特别是室外显示屏,环境亮度、环境温度条件等都直接影响显示屏的正常运行。在LED显示屏的控制系统中,因根据需要对温度、亮度、电源等进行自动检测控制,也可根据需要,远程实现对显示屏的亮度、色度调节、图像水平和垂直位置的调节以及工作方式的转换等。二、总体方案论证与设计本设计是基于单片机的数字音乐盒设计,由单片机AT89C51芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机电子数字音乐盒。要求利用I/O口产生一定

11、频率的方波,驱动蜂鸣器,发出不同的音调并采用LCD显示信息,从而演奏乐曲,开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称),可通过功能键选择乐曲,暂停,播放。本设计采用4*4键盘,16*2 LCD,七段显示数码管LED。下面对各模块的设计逐一进行论证比较。(一)单片机的选取首先选择单片机中最为普遍的MCS51系列。其中AT89C2051是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,片内含2k bytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,

12、片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C2051单片机可应用于许多高性价比的应用场合。主要性能:l 和MCS-51产品兼容l 2KB可重编程FLASH存储器(1000次)l 2.7-6V电压范围l 全静态工作:0Hz-24KHzl 2级程序存储器保密锁定l 128*8位内部RAMl 15条可编程I/O线l 两个16位定时器/计数器l 6个中断源l 可编程串行通道l 高精度电压比较器(P1.0,P1.1,P3.6)l 直接驱动LED的输出端口由于完成核心功能音频输出只需一个I/O口,并且额外功能LED移位显示可根据所选单片机的剩余I/O口进行设计,因此AT89C2051

13、足以满足基本要求。其20个引脚体积小巧,内部2k字节的程序存储器容量适中,低压低频工作条件,并且价格低廉容易购得。(二)LED显示方式动态显示。对一幅画面进行分割,对组成画面的各部分分别显示,是动态显示方式。动态显示方式,可以避免静态显示的问题。但设计上如果处理不当易造成亮度低,闪烁问题。因此合理的设计既应保证驱动电路易实现,又要保证图像稳定、无闪烁。动态显示采用多路复用技术的动态扫描显示方式,复用的程度不是无限增加的,因为利用动态扫描显示使我们看到一幅稳定画面的实质是利用了人眼的暂留效应和发光二极管发光时间的长短,发光的亮度等因素。通过实验发现,当扫描刷新频率(发光二极管的停闪频率)为50H

14、z,发光二极管导通时间1ms时显示亮度较好,无闪烁感。(三)LED驱动模式采用动态扫描方式,通过三极管驱动并联在一起的LED发光管的一端(共阴或共2端),LED发光管的另一脚接通用I/O口,控制其亮灭。该方法能驱动较多的LED,控制方式较灵活,而且节省单片机的资源。(四)系统总体结构框图系统结构框图如图1所示:图1系统结构框图三、系统硬件的设计本设计中用到了AT89C51单片机,4*4键盘,蜂鸣器,2 LCD等硬件电路常用元器件。(一)AT89C51 芯片功能和硬件连接AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL

15、高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。1.AT89C51的主要特性与MCS-51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年 全静态工作:0Hz-24Hz 三级程序存储器锁定 128*8位内部RAM 32可编程I/O线 两个16位定时器/计数器 5个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路2.管脚说明 管脚说明如图2所示:图2管脚VCC:供电

16、电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部

17、上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并

18、用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下所示:管口管脚备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:

19、当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器

20、时,这两次有效的/PSEN信号将不出现。 /EA/VPP:/EA保持低电平时,在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。3.振荡器特性XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号

21、要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。4.芯片擦除整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。(二)LED显示器LED(

22、Light Emitting Diode)是发光二极管英文名称的缩写。LED显示器是由发光二极管构成的,所以在显示器前面冠以“LED”。LED显示器在单片机系统中的应用非常普遍。1.LED显示器的结构常用的LED显示器为8段。每一个段对应1个发光二极管,这种显示器有共阳极和共阴极两种:共阴极LED显示器的发光二极管的阴极连接在一起,通常此公共阴极接地。当某个发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。同样,共阳极LED显示器的发光二极管的阳极连接在一起,通常此公共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。为了使LED显示器显示不同的符号或

23、数字,就要把不同段的发光二极管点亮,这样就要为LED提供代码,因为这些代码可使LED相应的段发光,从而显示不同字型,因此该代码称为段码。7段发光二极管,再加上1个小数点位,共计8位。因此提供给LED显示器的段码正好是1B。各段与字节中各位对应关系如下表5所示:表5 8段LED结构及外形代码位D7D6D5D4D3D2D1D0显示位dpgfEdcba2.LED显示器工作原理由N个LED显示块可以拼接成N位的LED显示器。如图是LED显示器的结构原理图3所示:图3 LED显示器结构原理图N个LED显示器有N个位选线和8*N位 根段码线。段码线控制显示字符的字型,而位选线为各个LED显示块中各段的公共

24、端,它控制该LED显示位的亮或暗。LED显示器有静态显示和动态显示两种。(三)键盘键盘在单片机应用系统中能实现向单片机输入数据,传送命令等功能,是人工干预单片机的主要手段。1.键盘输入的特点键盘实质上是一级按键开关的集合。通常,键盘开关利用了机械触点的合、断作用。2.按键的确认键的闭合与否,反映在行线输出电压上就呈现高电平或低电平,如果高电平表示键断开,低电平则表示键闭合,通过对行线电平高低状态的检测,便可确认按键按下与否。为了确保CPU对一次按键动作只确认一次按键有效,必须消除抖动的影响。按键输入电路由4*4矩阵键盘组成, P1口作为输入控制按键,其中P1.0P1.3扫描行,P1.4P1.7

25、扫描列。3.如何消除按键的抖动采用软件来消除按键抖动的基本思想是:在一次检测到有键按下时,该键所对应的行线为低电平,执行一段延时10MS的子程序后,确认该行线电平是否仍为低电平,如果仍为低电平,则确认为该行确实有键按下。当按键松开时,行线的低电平变为高电平,执行一段延时10MS的子程序后,检测该行线为高电平,说明按键确实已经松开。(四)系统复位电路的设计智能系统一般应有手动或上电复位电路。复位电路的实现通常有两种方式:RC复位电路和专用监控电路。前者实现简单,成本低,但复位可靠性相对较低;后者成本较高,但复位可靠性高,尤其是高可靠重复复位。对于复位要求高、并对电源电压进行监视的场合,大多采用这

26、种方式。本次课程设计采用了上电按钮电平复位电路,如图4所示: 图4 复位电路(五)时钟电路模块时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟是保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢。为达到振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,另外有两个22P的独石电容,两晶振引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。时钟电路模块连接图如图5所示:图5 时钟电路模块连接图(六)输出显示电路用P2.0P2.2作为LCD的RS、R/W、E的控制信号;用P0.0P0.7作为LC

27、D的D0D7的控制信号。由于P0口作为输出,应加上拉电阻。(七)音频输出部分整个输出部分由一个100uF电容、两个S9013 NPN三极管和一个蜂鸣器/喇叭组成,音频输出原理图如图所示:100uF电容是用来滤波的,两个NPN三极管起到放大信号的作用,最后由蜂鸣器/喇叭表现出信号。用P3.7口控制蜂鸣器。输出显示电路如图6所示: 图6 音频输出原理图 (八)整体硬件电路整体硬件电路图如图7所示:图7 整体硬件电路原理图1.原理说明当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。同时启动定时器T1,显示乐曲播放的时间,并驱动LCD,显示歌曲号及播放时间。(1)

28、硬件电路中用P1.0P1.7控制按键,其中P1.0P1.3扫描行,P1.4P1.7扫描列;(2)用P2.0P2.2作为LCD的RS、R/W、E的控制信号;(3)用P0.0P0.7作为LCD的D0D7的控制信号;(4)用P3.7口控制蜂鸣器;(5)电路为12MHz晶振频率工作,起振电路中C1,C2均为30pf。2.键盘按键键盘按键分布如下:0123ABCD按键功能说明:13三首歌曲A下一首歌曲B上一首歌曲C暂停D开机画面四、系统软件设计(一)主模块的设计主模块是系统软件的主框架。结构化程序设计一般有“自上而下”和“自下而上”两种方式,“自上而下”法的核心就是主框架的构建。它的合理与否关系到程序最

29、终的功能的多少和性能的好坏。本系统的主模块的程序框图如下图8所示:图8 主模块程序框图(二)外部中断源系统设计在本设计中中断源是采用外部中断0方式,其入口地址是0003H。其中断响应级别最高。1.定时器/计数器工作方式寄存器TMOD用于选择定时器/计数器的工作方式和工作模式。其格式如下表6:表6 定时器/计数器工作方式寄存器TMOD格式TMODD7D6D5D4D3D2D1D0GATEM1M0GATEM1M0T1方式字段T0方式字段下面表7是对TMOD各位进行说明:表7对TMOD各位功能M1M0工作方式00方式0,为13位定时器/计数器01方式1,为16位定时器/计数器10方式2,8位的常数自动

30、重新装载的定时器/计数器11方式3,仅适用于T02.门控位GATE工作方式选择位M1、M0。其中,在本设计中采用方式1的16位定时器/计数器。计数器模式和定时器模式选择位。=0,为定时器模式。=1,为计数模式。定时器/计数器控制寄存器TCON,其格式如下表8所示:表8 定时器/计数器控制寄存器TCON格式TCOND7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0ITO其各位的功能如下:TF1、TF0计数溢出标志位当计数器溢出时,该位置1。TR1、TR0计数运行控制位。(三)基本显示模块设计基本显示模块设计的重点是由显示代码取得相应的段码,显示段码数据的并行发送,高精度的

31、计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。程序流程如图9所示。图9 程序流程图(四)系统初始化程序RS BIT P2.0 RW BIT P2.1E BIT P2.2L50MS EQU 60HL1MS EQU 61HL250MS EQU 62HSEC EQU 65HMIN EQU 64HHOU EQU 63HORG

32、0000HLJMP MAINLJMP TT0ORG 001BHLJMP T1INTORG 1000HMAIN: MOV SP,#70H MOV P0,#01H CALL ENABLEMOV P0,#38H LCALL ENABLE(五)音调、节拍以及编码的确定方法一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和节拍表示一个音符唱多长的时间。1.音调的确定不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO

33、、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即Tone。把C、D、E、F、G、A、B这一组音的距离分成12个等份,每一个等份叫一个“半音”。两个音之间的距离有两个“半音”,就叫“全音”。在钢琴等键盘乐器上,CD、DE、FG、GA、AB两音之间隔着一个黑键,他们之间的距离就是全音;EF、BC两音之间没有黑键相隔,它们之间的距离就是半音。通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它们的左上角加上号或者b号的叫变化音。叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。例如高

34、音DO的频率(1046Hz)刚好是中音DO的频率(523Hz)的一倍,中音DO的频率(523Hz)刚好是低音DO频率(266 Hz)的一倍;同样的,高音RE的频率(1175Hz)刚好是中音RE的频率(587Hz)的一倍,中音RE的频率(587Hz)刚好是低音RE频率(294 Hz)的一倍。(1)要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。(2)利用AT89C51的内部定时器使其工作在计数器模式MODE1下,改

35、变计数值TH0及TL0以产生不同频率的方法。此外结束符和休止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。(3)例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次技术956次时将I/O反相,就可得到中音DO(523Hz)。计数脉冲值与频率的关系公式如下:N=Fi2FrN:计算值;Fi:内部计时一次为1us,故其频率为1MHz;其计数值的求法如下:T=65536-N=65536-Fi2Fr例如:设K=65536,F=Fi=1MHz,球低音DO(261Hz)。中音DO

36、(523Hz)。高音的DO(1046Hz)的计算值T=65536-N=65536-Fi2Fr=65536-Fr=65536-/Fr低音DO的T=65536-/262=63627低音DO的T=65536-/523=64580低音DO的T=65536-/1047=65059C调各音符频率与计数值T的对照表如表9所示:表9 C调各音符频率与计数值T的对照表低音频率T参数中音频率T参数高音频率T参数Do2621908229Do523956115Do10465757Do2771805217Do554903108Do11095454Re2941701204Re587852102Re11755151Re31

37、11608193Re62280497Re12454848Mi3301515182Mi65975991Mi13184545Fa3491433172Fa69871686Fa13974343Fa3701351162Fa74067681Fa14804141So3921276153So78463877So15683838So4151205145So83160272So16613636La4401136136La88056868La17603434La4641078129La93253664La18653232Si4941012121Si98850661Si197630302.节拍的确定若要构成音乐,光有

38、音调是不够的,还需要节拍,让音乐具有旋律,而且可以调节各个音的快满度。“节拍”,即Beat.若1拍实0.5s,则1/4 拍为0.125s。至于1拍多少s,并没有严格规定,就像人的心跳一样,大部分人的心跳是每分钟72下,有些人快一点,有些人慢一点,只要听的悦耳就好。音持续时间的长短即时值,一般用拍数表示。休止符表示暂停发音。一首音乐是由许多不同的音符组成的,而每个音符对应着不同频率,这样就可以利用不同的频率的组合,加以与拍数对应的延时,构成音乐。对于单片机来说,产生不同频率的脉冲是非常方便的,利用单片机的定时/计数器来产生这样的方波频率信号。因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定

39、时计数的关系。表10节拍与节拍码对照节拍码节拍数节拍码节拍数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拍每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,图11为节拍码的对照。如果1拍为0.4秒,1/4拍实0.1秒,只要设定延迟时间就可求得节拍的时间。假设1/4拍为1DELAY,则1拍应为4DELAY,以此类推。所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如表11所示为1/4和1/8节拍的时间设定。表1

40、1 1/4和1/8节拍的时间设定曲调值DELAY曲调值DELAY调4/4125毫秒调4/462毫秒调3/4187毫秒调3/494毫秒调2/4250毫秒调2/4125毫秒3.编码do re mi fa so la si分别编码为17,重音do编为8,重音re编为9,停顿编为0。播放长度以十六分音符为单位(在本程序中为165ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码,以0xff作为曲谱的结束标志。举例1:音调do,发音长度为两拍,即二分音符,将其编码为0x18。举例2:音调re,发音长度为半拍

41、,即八分音符,将其编码为0x22歌曲播放的设计。先将歌曲的简谱进行编码,储存在一个数据类型为unsigned char 的数组中。程序从数组中取出一个数,然后分离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;接着分离出该数的低4位,得到延时时间,接着调用软件延时。表12 简谱对应的简谱码、T值、节拍数简谱发音简谱码T值节拍码节拍数5低音SO16426011/4拍6低音LA26440022/4拍7低音TI36452433/4拍1中音DO46458041拍2中音RE56468451又1/4拍3中音MI66477761又1/2拍4中音FA76482082拍5中音

42、SO864898A2又1/2拍6中音LA964968C3拍7中音TIA65030F3又3/4拍1高音DOB650582高音REC651103高音MID651574高音FAE651785高音SOF65217(六)程序流程本设计的程序流程如下:先从主程序开始,接着初始化变量及 LCD 接口,然后初始化方波发生器、晶振管,使 LCD 显示信息,就进入了开机状态,等待动作选择按键,包括播放键,暂停键,停止键,当然也可以选择返回;加入选择的是播放键,LCD 上就会 -7-现实歌曲编号,与此同时演奏相应的乐曲,此时,你可以按上一曲或下一曲键,使其演奏上一个或者先一个乐曲。 图11 LCD显示流程图10 主

43、程序流程图(七)文档顶端程序清单RS BIT P2.0RW BIT P2.1E BIT P2.2L50MS EQU 60HL1MS EQU 61HL250MS EQU 62HSEC EQU 65HMIN EQU 64HHOU EQU 63H ORG 0000H LJMP MAIN ORG 000BH LJMP TT0ORG 001BH LJMP T1INT ORG 1000HMAIN: MOV SP,#70H MOV P0,#01H CALL DISPLAYMOV P0,#38H LCALL DISPLAYMOV P0,#0FH LCALL DISPLAY MOV P0,#06H LCALL

44、DISPLAYLCALL INITIL WAIT: LCALL KEY LCALL MODD LJMP WAITKEY: NOP NOP LCALL KS JNZ K1 LCALL KAIJI LCALL SOPXN: LJMP KEYK1: LCALL MODD LCALL MODD LCALL KS JNZ K2 LJMP KEYK2: MOV R2,#0FEH MOV R4,#00HK3: MOV A,R2 MOV P1,A MOV A,P1JB ACC.4,L1 MOV A,#00H LJMP LKL1: JB ACC.5,L2 MOV A,#04H LJMP LKL2: JB ACC

45、.6,L3 MOV A,#08H LJMP LKL3: JB ACC.7,NEXT1 MOV A,#0CHLK: ADD A,R4 PUSH ACCK4: LCALL DELAY1 LCALL KS JNZ K4 MOV R3,#07H CLR A MOV R0,#30H MOV R1,#31HMM1: MOV A,R1 MOV R0,A INC R0 INC R1 DJNZ R3,MM1 POP ACC MOV R0,A RETNEXT1: INC R4 MOV A,R2 JNB ACC.3,N2 LJMP N1N2: LJMP KEYN1: RL A MOV R2,A LJMP K3KS:

46、 MOV A,#0F0H MOV P1,A NOP NOP MOV A,P1 CPL A ANL A,#0F0H RETDELAY1: SETB RS0DL1: MOV R5,#0AHDL2: MOV R6,#63DL3: NOP NOP DJNZ R6,DL3 DJNZ R5,DL2 CLR RS0 RETINITIL: MOV R3,#08H MOV R0,#30HM1: MOV R0,#00H INC R0 DJNZ R3,M1 RETMODD: MOV P0,#8EH CALL DISPLAY MOV A,37H MOV DPTR,#TABLE3 MOVC A,A+DPTR CALL WRITE2 RETKAIJI: MOV A,37HCJNE A,#0FH,DFF MOV P0,#80H CALL DISPLAY MOV DPTR,#TABLE1 CALL WRITE1 DFF: RETSOP: MOV A,37H CJNE A,#01H,A11 LCALL MODD MOV 52H,#HIGH TABLE10 MOV 53H,#LOW TABLE10 LCALL INITILE2 LCALL MAIN0A11: CJNE A,#02H,A22 LCALL MODD MOV 52H,#HIGH TABLE20 MOV 53H,#LOW TABLE20 LCAL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论