电子琴毕业设计(论文).doc_第1页
电子琴毕业设计(论文).doc_第2页
电子琴毕业设计(论文).doc_第3页
电子琴毕业设计(论文).doc_第4页
电子琴毕业设计(论文).doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计(论文) ( 2013 届 )题 目 电子琴音乐的产生与 演奏电路的设计学 院 电子与电气工程系专 业 应用电子技术班 级 应电1001班学 号 1297810100465学生姓名 王雅琴指导教师 黎杨梅I武汉软件工程职业学院毕业设计(论文)摘要本文的主要内容是用STC89C51单片机为核心控制元件,设计一个可以实现演奏和播放音乐的简易电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块。在主控模块上设有16个按键和扬声器,应用中断系统和定时/计数原理控制其发声。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。关键词单片机;电子琴;键盘目 录1.引言12.总体方案12.1系统的设计要求12.2电子琴系统的组成22.3系统设计框图23. 硬件电路设计简介33.1单片机STC89C5133.1.1STC89C51的简介33.1.2管脚功能43.1.3在线编程53.1.4电子琴系统单片机最小系统设计图53.2矩阵式键盘63.2.1矩阵式键盘的结构与工作原理63.2.2矩阵式键盘的按键识别方法63.2.3键盘接口必须具备的4个基本功能73.2.4电子琴系统矩阵键盘硬件电路图73.3音频功放电路设计83.3.1LM386的结构与工作原理83.3.2LM386的主要特性83.3.3LM386的典型应用电路83.3.4电子琴中音频功放电路图94. 软件设计104.1音乐播放程序设计104.1.1音乐背景知识104.1.2单片机产生音乐的方法104.1.3音乐播放软件设计124.2放歌子程序设计134.3系统整体软件流程设计145. 系统调试145.1keil简介155.2硬件调试155.3软件调试155.4综合调试156. 结论16参考文献17谢辞18武汉软件工程职业学院毕业设计(论文)1. 引言 单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,他具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。它的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。电子琴是箱子电子科技与音乐结合的产物。之所以受到群众们喜爱,是因为它能模拟各种乐器的音色,如笛、号、琴、颤音、和旋音等以及打击乐板音、鼓乐、沙锤等。本设计介绍一种除有普通电子琴功能外,还有不需要按琴键就能模拟电子琴自动演奏乐曲的电子琴音乐的产生和演奏电路。若与音响放大器相结合,则乐曲的音响效果会更好。 20世纪80年代中期,出现的现场可编程门阵列(FPGA)具有体系结构、逻辑单元灵活、集成度高以及适用范围广等特点,可实现大规模和超大规模的集成电路,而且编程灵活。STC89C51单片机为核心控制元件,可提高开发效率,缩短研发周期,降低研发成本,且易于进行功能扩展。简易电子琴系统就是以单片机为核心部件设计的一个简易的电子琴,这只是单片机应用的一个点,由点及面,希望能更好的了解和应用单片机技术。我选单片机电子琴这个选题的目的在于通过从日常生活中的细微之处着手,将所学的理论知识与实践更好的结合起来,在设计制作电子琴的过程中,更加熟练的掌握单片机的应用,在更深刻的理解理论知识的同时锻炼提高自己的动手实践能力,使理论和实际能够相得益彰。2. 总体方案2.1系统的设计要求本系统设计的功能有两个部分,一个是音乐的播放功能,另一个就是电子琴乐曲的演奏功能。具体的要求如下所示:1. 产生各个音符的频率信号。2. 产生低、中、高三个音区的音符。3. 能播放预置的音乐,并能自动和人工选曲。2.2电子琴系统的组成本系统主要由两个部分组成:音乐播放部分和电子琴演奏部分。音乐的播放部分:一个乐音其实就是一个具有固定周期的信号。本设计就是用单片机STC89C51的两个定时器(T0,T1)控制,在P1.0脚上输出方波周期信号,产生其对应频率的乐音,通过矩阵式键盘的按键产生不同的音符,所以弹奏者可以随心所欲的弹奏出自己喜爱的音乐乐曲,不弹奏时也可以播放单片机程序设置的音乐歌曲来试听,共有十几首可以自由选择。电子琴演奏部分:实际上就是把弹奏的每个按键的所对应的值处理后送给单片机,然后在单片机内把处理后的数字当作指针指向所对应的音符,从而发出对应的声音4-6。2.3系统设计框图本系统通过矩阵式键盘按键随意键入乐曲的音符,作为电平送给主体电路单片机最小系统,中央处理器经过识别,解码输出音符,在扬声器中发出对应音符的准确发音。该系统的主要模块由四个部分组成,具体关系如图2-1所示7:图2-1总体设计系统框图由P0口的高四位和低四位作矩阵式键盘的键盘接口,用P1.0作信号输出口。3. 硬件电路设计简介3.1单片机STC89C513.1.1STC89C51的简介STC89C51单片机是一款增强型的单片机,它完全兼容MCS-51单片机。STC89C51不但可以代替AT89C51,而且速度更快,功能更强,寿命更长,价格更低,使用方便。该单片机共有40个引脚,采用的是双列直插式DIP-40的封装。STC89C51可以完成ISP在线编程功能,而AT89C51则不具备此功能。因此只需将AT89C51中的程序直接烧录到STC89C51中后,STC89C51就可以代替AT89C51在电路中工作,还可以在线修改下载,使用起来非常方便。STC推出的51系列单片机芯片全面兼容其他51单片机。它的内部有E2PROM,所以可以任意修改程序,而且断电也不会丢失数据。此外,还增加了两级中断优先级等等,此系列的单片机的基本特性如图3-1所示8,管脚如图3-2所示9:图3-1STC89系列单片机的基本特性结构图图3-2STC89C51管脚图3.1.2管脚功能VCC:供电电压。GND:接地。P0口:八位双向I/O口,P0口能够用于外部程序数据存储器,可以被定义为数据/地址的第八位。P1口:P1口是一个有上拉电阻的八位双向I/O口,P1口管脚写入“1”后,被内部上拉为高电平,可用作输入。当它被外部下拉为低电平时,将输出电流。P2口:P2口是一个提供上拉电阻的八位双向I/O口,P2口管脚写入“1”后,被内部上拉电阻拉高,且作为输入。所以在作为输入时,如果管脚被外部拉低,它将输出电流。在P2口用于外部程序存储器或16位地址外部存储器存取时,P2口则输出地址的高八位。在地址为1时,它利用内部上拉的优势,在对外部八位地址数据存储器进行读写时,P2口将输出其特殊功能寄存器的内容。P3口:P3口是8个带内部上拉电阻的双向I/O口,当它写入“1”时,内部则被上拉为高电平,并且用作输入。作为输入,由于外部下拉为低电平,P3口将会输出电流。同时,P3口还可以作为一些特殊功能口。RST:复位输出。当振荡器复位器件后,此脚要维持两个机器周期的高电平。ALE/PROG:在访问外部存储器的时候,地址锁存允许的输出电平用于锁存地址。在没有编程时,ALE端以固定的频率周期输出正脉冲信号,此信号的频率为振荡器频率的1/6。因此,它可以对外输出脉冲信号,也可以用于定时。PSEN:外部程序存储器的选通信号。在外部程序存储器取指期间,每个机器周期内两次PSEN有效,但是在访问外部数据存储器的时候,这两次有效的PSEN信号将不会出现。EA/VPP:当EA保持低电平的期间使用外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意为加密方式时,EA将内部锁定为RESET,当EA保持高电平时为内部程序存储器。XTAL1:反向振荡放大器的输入端以及内部工作时钟电路的输入端。XTAL2:反向振荡器的输出10。3.1.3在线编程STC支持ISP功能,编程的时候不需要拔出,也不需要专门的编程器,只需要一个MAX232做串口通信电路,利用串口进行在线编程,非常方便。3.1.4电子琴系统单片机最小系统设计图本设计的电子琴的单片机最小系统原理图如图3-3所示: 图3-3单片机最小系统电路图3.2矩阵式键盘3.2.1矩阵式键盘的结构与工作原理在键盘中按键的数目比较多时,为了减少I/O的占用,我们通常将按键排列成矩阵的形式。在矩阵式键盘中,每一条水平线和垂直线在交叉处并没有直接连通,而是通过一个个的按键加以连接。这样的话,每一个端口(例如P1口)连接构成4*4=16个按键,比直接用端口线接成键盘多了一倍,并且线数越多,区别就越明显,若再多加一条线就可以构成有20个按键的键盘了,而若直接用端口线的话,却只能多一个键(9键),因此,在需要按键的数目较多时,运用矩阵式键盘才是合理的11。显然,矩阵式键盘要比直接法复杂,识别时也要复杂一些,例如下图3-4所示12:图3-4矩阵式键盘结构垂直线即列线通过电阻接正电源,并且把水平线即行线所接的单片机的I/O口作为输出端,列线所接的单片机的I/O口作为输入端。这样,在没有按键被按下时,所有的输出端都是高电平,表示没有按键被按下,一旦有按键被按下,输入线则会被拉低,因此,只要读入输入线的状态就可以判断是否有按键被按下了。3.2.2矩阵式键盘的按键识别方法在判断矩阵式键盘上的哪个键被按下可以采用“行扫描法”。行扫描法又称逐行(或列)扫描查询法,是一种我们最常用的按键识别方法,具体过程如下:1、判断键盘中有无按键按下 将全部行线置低电平,然后监测列线的状态,只要有一列的电平为低电平,则表示有按键被按下,并且按下的键位于低电平的列线与4根行线相交叉的4个按键之中,若所有的列线均为高电平,则表示键盘中并没有按键按下。2、判断按下的按键的具体位置 在判断键盘中有按键被按下后,就可以开始确定被按下按键的具体位置了。具体方法是:依次将行线置为低电平,就是在把某根行线置为低电平的时候,要使其它的几根行线均为高电平。在确定某根行线为低电平后,再逐行检测各个列线的电平状态。如果某列线的电平为低电平,则此列线与置为低电平的行线交叉处的按键就是被按下的按键13。3.2.3键盘接口必须具备的4个基本功能去抖动:每个按键在按下或者松开时,都会产生短时间的抖动,对我们按键识别检测会有一定的影响。只有避开抖动处在稳定接通或者断开的状态才能保证按键识别准确无误。这个问题可以利用软件延时或者硬件电路来解决。防串键:防串键是为了解决多个按键同时被按下或者前一个按键还没有松开就有新的按键又被按下所产生的问题。这个问题我们常用双键锁定和N键轮回两种方法来解决。按键识别:如何识别被按下的按键是接口解决的主要问题,一般情况下,我们都是采用软硬结合的方法来解决此问题。常用的方法有行扫描法和线反转法。键码产生:我们一般是在内存区内建一个键盘编码表,通过查表获得被按键的键码。3.2.4电子琴系统矩阵键盘硬件电路图图3-5矩阵键盘硬件电路图 上图3-5即为本设计的电子琴系统中的按键键盘的电路原理图。3.3音频功放电路设计3.3.1LM386的结构与工作原理在一定频率范围内的振动能够产生乐音,但是用单片机产生的音频脉冲直接来驱动扬声器并不能够产生所要实现的音乐,因为它并没有足够大的驱动能力,这时就需要有音频功率放大电路。LM386是一种音频集成功放,具有自身消耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点,故广泛应用于录音机和收音机之中。其封装形式如下图3-6所示14:图3-6LM386的封装形式3.3.2LM386的主要特性1、静态功耗低,约为4mA,可用于电池供电。2、工作电压范围宽,4-12V或5-18V。3、外围元件少。4、电压增益可调,20-200.5、低失真度。3.3.3LM386的典型应用电路LM386应用十分广泛,如图3-7、3-8所示: 图3-7放大器增益为20(最少器件)图3-8低频提升放大器3.3.4电子琴中音频功放电路图图3-9电子琴系统音频功放电路图上图3-9所示即为本设计的电子琴系统的音频功放的电路原理图。4. 软件设计4.1音乐播放程序设计4.1.1音乐背景知识音高是由发音物体的振动频率的高低决定的,乐音持续时间的长短即时值,一般用拍数来表示,休止符的含义则是暂停发音。4.1.2单片机产生音乐的方法一首音乐是由许多不同的音符构成的,而每个音符则对应着不同的振动频率,这样,我们就可以利用不同频率的组合,加之与其拍数对应的延时来构成一首音乐。若要产生音频脉冲,只要计算出某一音频的周期(频率的倒数)即可,再将计算出的周期时间除以2,得到半周期的时间,利用单片机的定时器计时半周期的时间,每当计时终止后再反相并重复计时,这样循环计时反相就可以得到对应频率的方波脉冲15。计数脉冲值与频率的关系式是:N=fi2fr15式中,N是计数值;fi是机器的频率;fr是想要得到的频率。其计数初值T的计算方法如下:T=65536N=65536fi2fr 例如:设K=65536,fi=1MHz,求低音DO(262Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。 T=65536N=65536fi2fr=6553610000002fr=65536500000fr 利用上式可求出:低音DO的T=65536500000262=63628 中音DO的T=65536500000523=64580 高音DO的T=655365000001046=65058单片机若为12M晶振,高中低音符与其对应计数初值对照表如表4.1所示15:表4.1音符频率对照表音符频率(HZ)简谱码(T值)音符频率(HZ)简谱码(T值)休止00中4 FA69864820低1 DO26263628中5 SO78464898低2 RE29463835中6 LA88064968低3 M33064021中7 SI98865030低4 FA34964103高1 DO104665058低5 SO39264260高2 RE117565110低6 LA44064400高3 M131865157低7 SI49464524高4 FA139765178中1 DO52364580高5 SO156865217中2 RE58764684高6 LA176065252中3 M65964777高7 SI196765283因此,我们就可以在此基础上为音符建立一个表格,使单片机能够通过查表的方式获得相应的数据。除了音符以外,节拍也是一首音乐的关键的组成部分。节拍实际上就是乐音的发音的持续时间的长短,在单片机系统中,我们就可以利用软件延时来实现。如果1/4拍的延时时间为0.5秒,则1拍的延时时间即为2秒。因此,只要知道1/4拍的延时的时间,就可以计算出其与节拍的延时时间,均为1/4节拍延时时间的倍数。如果想让单片机自己播放音乐,就要注意必须在软件程序设计中考虑节拍的设置。不同的曲调节拍则需要用另一个定时/计数器来完成。所以在此设计中,我需要用到单片机的两个定时/计数器,一个用来产生音符,一个用来产生节拍。4.1.3音乐播放软件设计图4-2音乐播放程序流程图本设计的音乐播放程序流程图如上图4-2所示,此程序实现的一首音乐歌曲的播放,在程序中,我使用了两个定时/计数器,其中T0用来产生音符的频率,T1用来产生音符的节拍,两者结合从而产生完整好听的音乐。4.2放歌子程序设计图4-3放歌子程序程序流程图本设计的放歌子程序流程图如上图4-3所示,此程序实现的单首歌曲的循环播放,而没有办法在程序内部实现歌曲曲目的切换,只能通过外部的功能按键和键盘按键来实现功能的切换和歌曲曲目的切换,所以这是本设计的一个缺憾,相信如果有更多的时间来设计和调试的话,此次的电子琴设计肯定会更加的完美。4.3系统整体软件流程设计图4-4整体系统程序流程图 本设计的整体系统的程序流程图如上图4-4所示,它实现了电子琴音乐的播放与弹奏等基本的功能。系统默认的电子琴所处的状态为弹奏状态,我们可以通过功能选择键来改变它的状态(播放/弹奏)。矩阵键盘除了可以作为电子琴弹奏音乐的键盘,它还具有第二功能,就是对单片机内置的音乐进行曲目的选择,在播放音乐是可以通过弹奏/停止按键来结束放歌。5. 系统调试电路调试是整个系统设计的功能否能实现的关键的一步,一般情况下,我们将调试分为三个步骤:硬件调试、软件调试和综合调试。5.1keil简介单片机开发中除了必要的硬件外,还离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一个是手工汇编,另一个是机器汇编,目前已经几乎不用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断的发展,Keil软件是目前最流行的开发MCS-51系列单片机的软件,掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你平时使用C语言编程,那么Keil就是最好的选择,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。5.2硬件调试硬件调试是针对自己所做的电路板,对其几个功能块进行测试。在上电前,首先要确保电路没有短路或者断路的地方,这个是调试工作的第一步,同时也是整个调试过程的关键一步。在这部分测试过程中用到的重要的测试工具是万用表。在确保一切电路正常,无异常情况(断路或短路)后才可以上电调试。上电调试的目的是检查电路是否有接错的地方,同时还要检验原理是否正确。在本次设计中,主要的调试电路有矩阵键盘,单片机下载电路以及音频功放电路。若调试的结果达到预期并和原理一致即完成硬件调试。5.3软件调试软件调试的主要方法:一般情形下,一个调试程序需要具备至少四种性能:跟踪、断点、查看变量、更改数值。整个程序就是一个主程序通过调动各个子程序来实现功能的过程,要想使主程序和整个程序能够平稳运行,那就必须保证各个模块的子程序正确并且能够平稳运行,因此在软件调试的初始阶段,要首先对各个模块的子程序进行调试。5.4综合调试 在硬件调试与软件调试均通过的情况下,就可以对整个系统进行综合调试了。首先将整个程序下载到单片机中,然后再通过弹奏乐曲与播放音乐来检测电子琴的基本功能。通过调试,使电子琴能够达到设计的预期效果。6. 结论本次毕业设计通过设计电子琴,遇到了很多问题有硬件上的也有软件上的。每当遇到困难时我们都能够耐心的去解决。在每次解决问题的过程中我们都能够学到很多实际知识,很多是书本上学不到的。在设计制作简易电子琴的过程当中我们在很多方面都有很大的收获。在编制程序时遇到的困难是不可预料的,有时有了好的想法,可真正要用程序来实现时就会有很多问题出现,有时候你花两倍的时间来改错,编译通过后希望的功能还不一定能够实现,或许到后来你发现出发点就是错误的。这种情况出现的很多,这时就会感到自己的经验少的可怜。在解决问题时我们还体会到充分的调用用周围的资源是多么的重要。我们的一些问题都是自己首先通过查书查资料,通过图书馆,通过网络来解决的,最后,在还没有解决的情况下,再去问老师。这不仅培养了自己的解决问题的能力,同时,又熟悉了如何利用周边的资源快速有效的去解决问题。看的多了,自然就有想法了;查的多了,自然就了解的多了;试的多了,自然经验就多了;多向比自己强的人问,学的就会豁然开朗。给我最深刻的是作程序的要能够沉的住气,要有耐性,耐磨。多看些书也是必要的,多学些前辈的经验,就会少走些弯路,学的更快些最后,很大程度上提高了自己的动手实践能力。应用电子技术说明了动手能力反映了一个人的工作能力,这在将来对我更快更好的融入这个社会有很大的帮助。作为电子与电气工程系的一员让我更加清醒的认识到动手实践能力无比重要。在这次毕业设计电子琴实物电路板的制作中,使我的实际动手能力有了很大的提高。本设计还可以扩展其他功能,例如存储功能,可以将弹奏者自己弹奏的音乐存储起来并播放给弹奏者听,也可以更加娱乐一点,加一些变幻的彩灯,随着音符的变化出现不同的变化,使设计更加有趣 。 参考文献1 电工学 秦曾煌主编 高等教育出版社 2003年第五版2 数字电子技术 杨志忠主编 高等教育出版社 2000年第一版3 集成电路原理及应用 谭博学主编 电子工业出版社 2008第二版4 EDA技术基础 郭勇主编 机械工业出版社 2007年第二版5 电子技能实验与实训 周福平主编 科学出版社 2011年第一版谢辞毕业论文暂告收尾,这也意味着我在大学学习生活既将结束。回首既往,自己一生最宝贵的时光能于这样的校园之中,能在众多学富五车、才华横溢的老师们的熏陶下度过,实是荣幸之极。在这三年的时间里,我在学习上和思想上都受益非浅。这除了自身努力外,与各位老师、同学和朋友的关心、支持和鼓励是分不开的。首先,我需要特别感谢我的指导老师黎杨梅老师。老师在我做毕业设计的整个过程中给了我莫大的帮助和指导。从开始选题,到中期修稿,最后再到最终定稿,老师都给我提了很多宝贵的意见。老师渊博的专业知识,严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,平易近人的人格魅力对我的影响颇深。这不仅使我树立了远大的学术目标,熟练的掌握了一些基本的研究方法,还使我更加深刻的明白了许多待人接物与为人处事的一些道理。其次,我要感谢所有曾经为我们讲课的任课老师,从他们的身上,我不仅仅学到了很多专业知识,更多的明白了对待生活和人生的态度,对我的人生有很大的影响。再次,我要感谢我的父母,是他们一直默默的支持和鼓励我,只要有他们,不管我遇到多大的困难,我都会迎难而上,克服困难,走向成功。最后,我还要特别感谢我的室友及其他好友,因为有了他们,我的毕业设计才能顺利完成。大学的三年里是你们一直支持和鼓励我,在我不开心的时候让我开心起来,我永远不会忘记我们一起度过的美好时光。 毕业设计结束了,通过设计,学生深刻领会到基础的重要性,毕业设计不仅仅能帮助学生检验大学三年的学习成果,更多的是毕业设计可以帮助我们更加清楚的认识自我,磨练学生的意志与耐性,这会为学生日后的工作和生活带来很大的帮助。 附 录 附录1:原理设计图附录2:元器件清单元器件分类元器件名称元器件型号数量学生姓名指导教师备注电容、电阻电容C1-C81048C9-C1033pF2C11-C1510uF5电解电容电阻R1-R31K3R4-R154K712R16-R2010K5R20-R30010跳线用集成块单片机U1STC89C511模拟电路U2LM3861U3MAX2321CH1Female1串口晶振Y112M1显示模块数码管DS1共阳数码管1其它及专用模块LED灯L1-L3红绿黄3扬声器1蜂鸣器插槽40P 16P 8P3按键S1-S2020键盘单排排针2插针跳线20根焊锡丝热转印纸3单面板1附录3:PCB图PCB图1:音频放大电路PCB图2:单片机下载电路 PCB图3:键盘电路附录4:完整的程序27#include /#include /#include #include /#include #define uchar unsigned char#define uint unsigned intuchar STH0;/定时器计数初值uchar STL0;uchar Song_Index=0,Tone_Index=0;uchar k,key;bit FY=0; /放乐曲时FY=1,电子琴演奏时FY=0sbit SPK=P10;sbit LED1=P12;sbit LED2=P13;uchar code Song50= 1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,6,5,3,5,3,2,1,2,1,-1, 3,3,3,4,5,5,5,5,6,5,3,5,3,2,1,5,6,5,3,3,2,1,1,-1, 3,2,1,3,2,1,1,2,3,2,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,3,2,1,3,2,1,1,-1, 10,10,10,9,10,9,10,9,9,6,6,7,8,9,8,7,6,5,6,-1, 10,10,10,9,10,13,12,13,12,12,9,9,10,11,12,11,10,9,8,10,10,-1, 13,14,13,12,12,10,12,10,12,9,13,12,10,9,10,10,-1, 9,13,13,13,8,13,13,13,13,14,15,14,13,14,13,14,10,10,-1, 13,14,13,12,12,10,12,10,12,13,14,13,14,13,14,10,-1, 9,13,13,13,8,13,13,13,13,14,15,14,13,13,14,12,13,-1, 5,5,10,9,8,5,5,5,5,10,9,8,6,6,6,11,10,9,6,-1, 6,12,12,11,9,10,8,5,5,10,9,8,5,5,5,10,9,8,6,-1, 6,6,11,10,9,12,12,12,12,13,12,11,9,8,10,10,10,-1, 10,10,10,10,12,8,9,10,11,1,11,11,11,10,10,10,10,10,9,9,8,9,12,12,12,11,9,8,-1;uchar code Len50= /上表中几首音乐的旋律中的每一个音符所对应的节拍 1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,-1, 1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,-1, 1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,2,1,1,2,2,-1, 1,1,1,1,2,1,1,1,1,0,1,1,0,1,1,0,1,1,2,-1, 1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,1,3,1,-1, 0,1,1,0,1,1,2,1,1,0,1,1,0,1,1,2,-1, 0,1,1,2,0,1,1,0,1,1,0,1,1,0,1,1,2,1,-1, 0,1,1,0,1,1,2,1,1,0,1,1,0,1,1,4,-1, 0,1,1,2,0,1,1,0,1,1,0,1,1,0,1,4,-1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1;/*音符与计数值对应表*/uint code tab=0,63628,63835,64021,64103,64260,64400,64524, 64580,64684,64777,64820,64898,64968,65030, 65058,65110,65157,65178,65217,65252,65283;/*播放歌曲时实现节拍的延时函数*/void delay1ms(uint ms) uchar t; while(ms-) for(t=0;t0;i-);/*键扫描函数*/ uchar key_scan() uchar sccode,recode; P0=0xf0; /* 发全 0 的行扫描码,列线输入 */ if(P0&0xf0)!=0xf0) /* 若有键按下 */ delay1ms(2); /*延时去抖动*/ if(P0&0xf0)!=0xf0) /* 若有键按下 */ sccode=0xfe; /*逐行扫描初值*/ while(sccode&0x10)!=0) P0=sccode; /* 输出行扫描码 */ if(P0&0xf0)!=0xf0) /* 本行有键按下 */ recode=(P0&0xf0)|0x0f; P0=0xf0; /while(scan_key_port&0xf0)!=0xf0); P0 = 0xff; /*释放按键扫描端口*/ return(sccode)+(recode);/* 返回特征码 */ else sccode=(sccode1)|0x01; /* 行扫描左移一位 */ P0 = 0xff; /*释放按键扫描端口*/ return(0); /* 无键按下,返回值为0 */*外部中断0,这里

温馨提示

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

评论

0/150

提交评论