基于单片机的音乐盒设计课程设计说明书.doc_第1页
基于单片机的音乐盒设计课程设计说明书.doc_第2页
基于单片机的音乐盒设计课程设计说明书.doc_第3页
基于单片机的音乐盒设计课程设计说明书.doc_第4页
基于单片机的音乐盒设计课程设计说明书.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

*课程设计说明书题目: 基于单片机的音乐盒设计 院(部): 专业班级: 学 号: 学生姓名: 指导教师: 年 月 日目录摘要i绪论11 概述21.1课题意义21.2设计任务和要求21.3总体设计21.4主要设计软件介绍3 1.4.1 protues软件简介3 1.4.2 keil软件简介32 硬件设计5 2.1各部分硬件设计及其原理52.1.1 at89c51简介52.1.2 led显示电路52.1.3时钟振荡电路52.1.4按键电路62.1.5复位电路62.2硬件电路图及其功能63 软件设计7 3.1程序流程图7 3.2音调、节拍以及编码的确定方法74 调试11 4.1检查硬件连接11 4.2检查软件系统11 4.3总体运行图115 电路板调试12设计体会及改进意见13附录14参考文献23基于单片机的音乐盒设计摘要随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。我们都会抽空欣赏世界名曲,作为对精神的洗礼。本次设计一个基于单片机的简易音乐盒。单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可或缺的一部分。本系统是以51系列单片机at89c51为主控制器,附有独立按键、数码管、扬声器组成。系统完成显示歌曲曲目、播放音乐等基本功能。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。关键词:at89c51,独立按键,数码管,扬声器,仿真i绪论21世纪,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着cmos化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。单片机应用的重要意义还在于它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能ic卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。随着科学技术的进步和社会的发展,人类所接触的信息也在不断增加并且日益复杂。面对浩如烟海的信息,人们已经能够利用计算机等工具高效准确地对之进行处理,但要想将处理完的信息及时,清晰地传递给别人,还必须通过寻求更加卓越的显示技术来实现。单片机技术与液晶显示技术的结合,使信息传输交流向着智能可视化方向迅速发展。随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。传统音乐盒多是机械型的,体积笨重,发音单调,不能实现批量生产。本文设计的音乐盒是以单片机为核心元件的电子式音乐盒,体积小,重量轻,能演奏和旋音乐,功能多,外观效果多彩,使用方便,并具有一定的商业价值。1概述本设计是以at89c51芯片的电路为基础,外部加上放音设备,以此来实现音乐演奏控制器的硬件电路,通过软件程序来控制单片机内部的定时器使其演奏出优美动听的音乐。用户可以按照自己的喜好选择音乐并将其转化成机器码存入单片机的存储器中。对于不同型号的单片机只需要相应的改变一下地址即可。该软、硬件系统具有很好的通用性,很高的实际使用价值,为广大的单片机和音乐爱好者提供了很好的借鉴。1.1 课题意义音乐盒的起源,可追溯至中世纪欧洲文艺复兴时期。当时为使教会的钟塔报时,而将大小的钟表装上机械装置,被称为“可发出声音的组钟”。音乐盒有着300多年的发展历史,是人类文明发展的历史见证。传统的音乐盒多是机械音乐盒,其工作原理是通过齿轮带动一个带有铁钉的铁桶转动,铁桶上的铁钉撞击铁片制成的琴键,从而发出声音。但是,机械式的音乐盒体积比较大,比较笨重,且发音单调。水、灰尘等外在因素,容易使内部金属发音条变形,从而造成发音跑调。另外,机械音乐盒放音时为了让音色稳定,必须放平不能动摇,而且价格昂贵,不能实现大批量生产。本文设计的音乐盒,是基于单片机设计制作的电子式音乐盒。与传统的机械式音乐盒相比更小巧,音质更优美且能演奏和弦音乐。电子式音乐盒动力来源是电池,制作工艺简单,可进行批量生产,所以价格便宜。基于单片机制作的电子式音乐盒,控制功能强大,可根据需要选歌,使用方便。根据存储容量的大小,可以尽可能多的存储歌曲。另外,也可以设计彩灯外观效果,使音乐盒的功能更加丰富。1.2 设计任务和要求(1)利用i/o口产生方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲。(2)采用七段数码管显示当前播放的歌曲序号。(3)可通过功能键暂停,播放,下一曲。1.3 总体设计音乐盒总体设计由四个模块构成:晶振电路,89c51单片机,数码管显示模块,发声模块,三个模块连接在89c51单片机上构成一个完整的系统。有两个按键,一个用来实现暂停和播放功能,另一个实现选择下一曲的功能。原理框图如图1.1所示: 图1.1 系统组成框图1.4 主要设计软件介绍本设计利用keil编程软件对音乐盒源程序进行编程并调试,配合proteus仿真软件对硬件进行仿真调试,两种软件的简介如下:1.4.1 proteus软件简介proteus软件是英国labcenter electronics公司出版的eda工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它eda工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。proteus是世界上著名的eda工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到pcb设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、pcb设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、hc11、pic10/12/16/18/24/30/dspic33、avr、arm、8086和msp430等,2010年即将增加cortex和dsp系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持iar、keil和mplab等多种编译器。 1.4.2 keil软件简介单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为cpu可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于mcs-51单片机的汇编软件有早期的a51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,keil软件是目前最流行开发mcs-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持keil即可看出。keil提供了包括c编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uvision)将这些部份组合在一起。运行keil软件需要pentium或以上的cpu,16mb或更多ram、20m以上空闲的硬盘空间、win98、nt、win2000、winxp等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用c语言编程,那么keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用c语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。keil c51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。2硬件设计2.1 各部分硬件设计及其原理2.1.1 at89c51简介at89c51是一种带4k字节闪存可编程可擦除只读存储器(fperomflash programmable and erasable read only memory)的低电压,高性能cmos 8位微处理器,俗称单片机。at89c51是一种带2k字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用atmel高密度非易失存储器制造技术制造,与工业标准的mcs-51指令集和输出管脚相兼容。由于将多功能8位cpu和闪烁存储器组合在单个芯片中,atmel的at89c51是一种高效微控制器,at89c51是它的一种精简版本。at89c51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图2.1所示。 图2.1 at89c51原理图2.1.2 led显示电路本次课程设计的显示电路采用led数码管显示, led有单个led和八段led之分,也有共阴和共阳两种。本次设计采用共阳极。由于 led是属于电流控制器件,使用时必须加限流电阻。通过单片机查表得出数码管显示编码,传送给数码管显示,以此来实现按键与显示程序的一致性。2.1.3 时钟振荡电路at89c51中有一个用于构成内部振荡器的高增益反相放大器,引脚xtal1和xtal2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或者陶瓷谐振器一起构成自然振荡器。外接石英晶体及电容c1、c2接在放大器的反馈回路中构成并联振荡电路。对外接电容c1,c2虽然没有什么严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性。如果使用石英晶体,我们推荐电容使用30pf10pf,而如果使用陶瓷振荡器建议选择40pf10pf。用户也可以采用外部时钟。这种情况下,外部时钟脉冲接到xtal1端,即内部时钟发生器的输入端,xtal2则悬空。由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。振荡器电路图如图2.2所示。2.1.4 按键电路按键电路设有两个按键,按键s1控制音乐盒的选曲,每按一下系统将播放下一首歌曲,全部歌曲播放完会重新回到第一首歌曲;按键s2控制音乐盒的暂停与播放,两个按键均设为高电平有效。按键电路如图2.2所示。2.1.5 复位电路为了防止程序运行错误,系统加入了一个复位电路,必要时或者需要程序从头开始时,可以按下复位键,使程序从头开始运行。复位电路如图2.2所示。2.2 硬件电路图及其功能总体硬件电路实现功能如下,如图2.2所示(1)电路中用p3.3、p3.5控制按键。(2)p1.0p1.6控制led。(3)p2.0控制蜂鸣器。(4)电路为12mhz晶振频率工作,起振电路中c1、c2均为30pf。时钟振荡电路复位电路led显示电路按键电路图2.2 硬件电路图3软件设计3.1 程序流程图程序流程图如图3.1所示。3.2 音调、节拍以及编码的确定方法一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和节拍表示一个音符唱多长的时间。不同音高的乐音是用c、d、e、f、g、a、b来表示,这7个字母就是音乐的音名,它们一般依次唱成do、re、mi、fa、so、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叫降记音,表示在原来的基础上降低半音。例如高音do的频率(1046hz)刚好是中音do的频率(523hz)的一倍,中音do的频率(523hz)刚好是低音do频率(266 hz)的一倍;同样的,高音re的频率(1175hz)刚好 是中音re的频率(587hz)的一倍,中音re的频率(587hz)刚好是低音re频率(294 hz)的一倍。 图3.1程序流程图 (1)要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的i/o反相,然后重复计时此半周期时间再对i/o反相,就可在i/o脚上得到此频率的脉冲。(2)利用at89c51的内部定时器使其工作在计数器模式mode1下,改变计数值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;(4)其计数值的求法如下:t=65536-n=65536-fi2fr例如:设k=65536,f=1000000=fi=1mhz,球低音do(261hz)。中音do(523hz)。高音的do(1046hz)的计算值t=65536-n=65536-fi2fr=65536-10000002fr=65536-500000/fr低音do的t=65536-500000/262=63627低音do的t=65536-500000/523=64580低音do的t=65536-500000/1047=65059(5)c调各音符频率与计数值t的对照表如表3.1所示。表3.1 c调各音符频率与计数值t的对照表低音频率t参数中音频率t参数高音频率t参数do2621908229do523956115do10465757do2771805217do554903108do11095454re2941701204re587852102re11755151re3111608193re62280497re12454848mi3301515182mi65975991mi13184545fa3491433172fa69871686fa13974343fa3701351162fa74067681fa14804141so3921276153so78463877so15683838so4151205145so83160272so16613636la4401136136la88056868la17603434la4641078129la93253664la18653232si4941012121si98850661si19763030若要构成音乐,光有音调是不够的,还需要节拍,让音乐具有旋律(固定的律动),而且可以调节各个音的快满度。“节拍”,即beat,简单说就是打拍子,就像我们听音乐不自主的随之拍手或跺脚。若1拍实0.5s,则1/4 拍为0.125s。至于1拍多少s,并没有严格规定,就像人的心跳一样,大部分人的心跳是每分钟72下,有些人快一点,有些人慢一点,只要听的悦耳就好。音持续时间的长短即时值,一般用拍数表示。休止符表示暂停发音。一首音乐是由许多不同的音符组成的,而每个音符对应着不同频率,这样就可以利用不同的频率的组合,加以与拍数对应的延时,构成音乐。了解音乐的一些基础知识,我们可知产生不同频率的音频脉冲即能产生音乐。对于单片机来说,产生不同频率的脉冲是非常方便的,利用单片机的定时/计数器来产生这样的方波频率信号。因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。表3.2节拍与节拍码对照节拍码节拍数节拍码节拍数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位代表音符的节拍,图5.2为节拍码的对照。如果1拍为0.4秒,1/4拍实0.1秒,只要设定延迟时间就可求得节拍的时间。假设1/4拍为1delay,则1拍应为4delay,以此类推。所以只要求得1/4拍的delay时间,其余的节拍就是它的倍数,如图5.3为1/4和1/8节拍的时间设定。表3.3 1/4和1/8节拍的时间设定曲调值delay曲调值delay调4/4125毫秒调4/462毫秒调3/4187毫秒调3/494毫秒调2/4250毫秒调2/4125毫秒do re mi fa so la si分别编码为17,重音do编为8,重音re编为9,停顿编为0。播放长度以十六分音符为单位(在本程序中为165ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。以0xff作为曲谱的结束标志。举例1:音调do,发音长度为两拍,即二分音符,将其编码为0x18。举例2:音调re,发音长度为半拍,即八分音符,将其编码为0x22歌曲播放的设计。先将歌曲的简谱进行编码,储存在一个数据类型为unsigned char 的数组中。程序从数组中取出一个数,然后分离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;接着分离出该数的低4位,得到延时时间,接着调用软件延时。表3.4 简谱对应的简谱码、t值、节拍数简谱发音简谱码t值节拍码节拍数5低音so16426011/4拍6低音la26440022/4拍7低音ti36452433/4拍1中音do46458041拍2中音re56468451又1/4拍3中音mi66477761又1/2拍4中音fa76482082拍5中音so864898a2又1/2拍6中音la964968c3拍7中音tia65030f3又3/4拍1高音dob650582高音rec651103高音mid651574高音fae651785高音sof652174调试4.1 检查硬件连接在protues检查各硬件管脚是否连接正确,线路逻辑是否正确,例如:晶振电路的连接,复位电路是否设计正确。4.2 检查软件系统(1)根据系统的原理结构检查各流程图是否正确,再根据流程图来检查程序是否也正确。(2)将所有程序组织起来,在软件环境下运行,检查程序是否正确。通过对硬件和软件系统的认真检查,反复测试,如果没有出现问题即可把源程序编译成hex文件装载到单片机中,对硬件进行仿真。4.3 总体运行图图4.1 系统总体运行图5电路板调试首先要选择mcu的型号,在此次设计中选用的是stc89c52rc这种型号,然后再选择端口,最后再点击download下载按钮即可。电路板调试数据图如图5.1所示。图5.1 电路板调试数据图图5.2 电路板实物图数码显示管89c52单片机蜂鸣器首先要向单片机中写入程序,之后在给电路板进行通电,最后再按下开关按钮即可。电路板实物图如图5.2所示。设计体会及改进意见单片机的设计至今为止已经进入了令人鼓舞的阶段,在进行了长达四个星期的时间的摸索与实验,使我不仅仅是对于单片机入门软件与硬件的常用设计与功能,还使我对于一项设计研究的制作过程所需要的详细步骤和具体的实现方法的力度的掌握。 当然在这次宝贵的课程设计活动中,经验才是对于我们最大的收获,而且还增强了自身对未知问题以及对知识的深化认识的能力,用受益匪浅这个词语来概括这次难忘的活动我觉得再合适不过了。但是,光是完成了作品还是不可以自我满足的,在从一开始的时候就怀着将作品制作得更加人性化,更加令人满意,更加地使功能完美又方便地被应用领域这个最终目的下,随着对单片机这门学科的认识加深,到达了拓展的程度,我想这个目的将在不远的时期内被实现。这次设计从软件编写、调试到软硬件联机调试,我倾注了大量的时间和心血。真是曾经为程序的编写而冥思查找过,曾经为无法找出错误而郁闷苦恼过,也曾经为某一功能不能实现而犹豫彷徨过,但最终我成功了。对于这次的课程设计,我认为还可以实践到现实生活中,在以后的设计中还可以尝试设计实物,毕竟理论的东西还是很抽象,一切还是要以实际为准。总之对于这次课程设计我不仅品味到了结果的喜悦,更明白了过程的弥足珍贵。附录out bit p2.0 ;定义音频输出端口,p2.0n equ 6;歌曲总数out_num equ p1;数码管显视当前所放歌曲曲数 org 0000h ajmp main org 0003h ajmp last_song ;外部中断0用于接上一曲歌按键 org 000bh ajmp f_t0 ;定时器0用于定时,作音符发生器用 org 0013hq4: ajmp next_song ;外部中断1接下一曲歌按键 org 001bh ajmp start_pause ;定时器1用计数,这里用作中断,接开始/暂停键,初值为0ffh,方式2 org 0030hmain: mov sp,#60h mov dptr,#table ;dprt指向每首歌曲的入口地址的地址。 mov r0,#30h ;r0中存入数据30h,这里在以30h开始的单元存放每首歌曲的入口地址,其中30h,31h存放 ;歌曲的节拍入口地址,32h,33h存放歌曲音符入口地址,每首歌占用四个存储存单元。 mov r5,#00h ;r5中存放表table中正在执行操作的序号 mov r6,#1 ;r6存放正在设置入口信息的歌曲数set_tab: mov a,r5 ;设置每首歌曲的入口信息,存放在以30h开始的存储单元中。 movc a,a+dptr mov r0,a inc r5 inc r0 mov a,r5 movc a,a+dptr mov r0,a inc r5 inc r0 mov a,r5 movc a,a+dptr mov r0,a inc r0 inc r5 mov a,r5 movc a,a+dptr mov r0,a inc r0 inc r5 inc r6 ;设置完一首歌曲后,歌曲数加一 cjne r6,#n+1,set_tab ;是否设置完,没有便继续,否则进行下面的操作 ;* 对中断,计数器的相关参数进行设置 mov tmod, #61h;计数器0工作方式1,计数器1工作方式2 mov th1,#0ffh;给计数器1置初值0ffh,又由于是工作方式2,所以 mov tl1,#0ffh;计数器计数为1,相当于一外部中断。 setb et1 ;允许计数器1中断 setb et0 ;允许计数器具0中断 clr pt0 ;计数器0为低优先级 setb pt1 ;计数器1为高优先级 setb it0 ;外部中断0为跳沿触发 setb px0 ;高优先级 setb it1 ;外部中断1为跳沿触发 setb px1 ;高优先级 setb ex1 ;允许外部中断1中断 setb ex0;允许外部中断定0中断 setb ea ;开中断总开关 setb tr1 ;定时器1开始工作,作中断用 setb out;音频输出端口初始化 ;* ;设置结束 clr f0 ;设置f0=0,用来作暂停/播放的标置位用 mov 22h,#01h ;22h单元中存放正在播放的歌曲编号 mov dptr,#out_tab ;将正在播放的歌曲编号送数码管显视 mov a,22h movc a,a+dptr mov out_num,a mov r7,#00h ;r7中存放歌曲总信息的入口地址start0:mov r4,#00h ;r4存放当前正在播放歌曲的第几个节拍数 mov r0,#30h ;30h开始的单元中存放歌曲的入口信息 mov a,r7 ;将歌曲的节拍表的入口地址送到dptr add a,r0 mov r0,a mov dph,r0 inc r0 mov dpl,r0 inc r0 mov a,r4 inc r4 movc a,a+dptr ;取出第一节拍数,其实第一个节拍不是歌曲的第一个节拍,而是表示几分音符;* mov 26h,a;将取出的音符数+节拍数保存在职26h单元中next: mov r0,#30h ;开始取出歌曲的第一个数据 mov a,r7 add a,r0 mov r0,a mov dph,r0 inc r0 mov dpl,r0 inc r0 mov a,r4 inc r4 movc a,a+dptr ;放在a中;* jz end0 ;若为0,则表示为休止符,不唱,本次音符不唱, mov r1,a ;不为0,取出节拍数 anl a,#0fh mov r2,a mov a,r1 swap a anl a,#0fh jnz sing ;音符不为0,唱 clr tr0 ;为0,不唱,关频率发生器 sjmp sing1sing: dec a ;开始唱,进行相应的数据处理 mov r3,a rl a mov dph,r0 inc r0 mov dpl,r0 inc r0 movc a,a+dptr mov 21h,a mov th0,a mov a,r3 rl a inc a movc a,a+dptr mov 20h,a mov tl0,a setb tr0 ;开唱sing1:lcall delay ;每个音符唱多久 jb f0,for ;是否暂停, ajmp next ;没有暂停,继续for: clr tr0;暂停,不唱 jb f0,$;等待播放 ajmp next ;开始播放end0: clr tr0 ;不唱 mov a,22h ;唱完处理 cjne a,#n,ww ;是不是全部歌曲都唱完 mov 22h,#01h ;全部唱完,则从第一首开始再唱 mov r7,#00h mov out_num,#11111001b ;数码管显视第一首歌曲编号 ajmp wwwww: mov a,r7 ;没有全部唱完,唱下一首,歌曲的入口信息调整 add a,#4 mov r7,a inc 22h clr ea push dph push dpl mov a,22h mov dptr,#out_tab movc a,a+dptr mov out_num,a ;数码管显视相应的歌曲编号 pop dpl pop dphwww: setb ea ajmp start0 ;开始下一首的演唱f_t0: mov th0,21h ;定时器0置初值 mov tl0,20h cpl out ;频率产生 retinext_song: push acc ;下一曲中断程序处理,保护现场 push dph push dpl clr ea ;关中断 mov a,22h cjne a,#n,q ;是最后一首吗? mov r7,#00h ;是最后一首,则r7指向第一首,演唱第一首 mov 22h,#01h ajmp backq: inc 22h ;不是最后一首,唱下一首,r7内容加4,歌曲数加1 mov a,r7 add a,#4 mov r7,aback: mov r4,#00h ;数码管显视相应的歌曲编号 mov a,22h mov dptr,#o

温馨提示

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

评论

0/150

提交评论