单片机实现音乐盒设计.doc_第1页
单片机实现音乐盒设计.doc_第2页
单片机实现音乐盒设计.doc_第3页
单片机实现音乐盒设计.doc_第4页
单片机实现音乐盒设计.doc_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计说明书毕业生姓名:专业:学号:指导教师:所属系(部):二一年六月iv摘 要本设计是采用单片机为核心设计的数字音乐盒。具体硬件电路包括:at89c2051单片机、音频发生器、音频放大器、按键电路、复位电路、时钟电路。本音乐盒可以播放三首音乐,通过软件程序来控制单片机内部的定时器使其产生音乐频率,演奏出优美动听的音乐同时,用户通过选择按键电路来选择自己喜欢的音乐,同时具有播放暂停功能。与传统的机械式音乐盒相比,用单片机设计的音乐盒体积更小巧,且制作工艺简单,音质更优美能演奏出和弦音乐。关键词:音乐盒 at89c2051 播放暂停abstractthis design is used as the core design of single chip digital music box. specific hardware circuit includes: at89c2051 microcontroller, audio generator, audio amplifier, keypad circuit, reset circuit, clock circuit. the music box can play three songs, through the software program to control the microcontrollers internal timer frequency to produce music, playing the beautiful sounds of music at the same time, the user by selecting the button circuit to select your favorite music, both play pause function. with the traditional mechanical music box than a music box with a single chip design is more compact size and simple fabrication process, can play a sound more beautiful polyphonic music. keywords: music box at89c2051 broadcast pause 目 录摘 要iabstractii第一章 绪论1第一节 选题目的及国内外发展情况1一、选题目的1二、国内外发展情况1第二节 设计所研究的内容及所做工作2第二章 方案论证3第一节 设计方案3第二节 设计方案的确定4第三章 音乐盒的硬件系统设计5第一节 音乐盒的硬件电路设计框图5第二节 控制系统的设计5一、at89c2051介绍5二、时钟电路设计8三、复位电路的设计10第三节 音频放大器的设计13一、音频放大器的作用13二、lm386的性能介绍13第四节 按键选择输入电路15一、键盘接口设计15二、按键识别方式16三、键盘模块处理方式17四、键盘设计实用技巧19第四章 音乐盒的软件系统设计20第一节 音符盒的发音原理20一、音符频率20二、音符节拍21三、建立曲谱编码表23第二节 程序模块设计24一、主程序模块设计24二、音乐部分模块设计25三、外部中断模块设计30四、定时器模块设计31第五章 软硬件调试33第一节 硬件调试33第二节 软件调试34第三节 性能分析35第六章 抗干扰措施36第一节 干扰的来源及后果36一、干扰的来源36二、干扰产生的后果36第二节 硬件抗干扰设计37第三节 软件的抗干扰设计38结束语39参考文献40附录一:音乐盒硬件电路原理图41附录二:程序42外文资料47中文翻译53致 谢58第一章 绪论第一节 选题目的及国内外发展情况一、选题目的通过设计电子音乐盒这个系统,有利于进一步巩固单片机的知识,将所学知识综合运用到实际当中来,并且提高自身的设计能力、动手操作能力以及解决问题的能力。二、国内外发展情况音乐盒的起源,可追溯至中世纪欧洲文艺复兴时期。当时为使教会的钟塔报时,而将大小的钟表装上机械装置,被称为“可发出声音的组钟”。音乐盒有着300多年的发展历史,是人类文明发展的历史见证。传统的音乐盒多是机械音乐盒,其工作原理是通过齿轮带动一个带有铁钉的铁桶转动,铁桶上的铁钉撞击铁片制成的琴键,从而发出声音。但是,机械式的音乐盒体积比较大,比较笨重,且发音单调。水、灰尘等外在因素,容易使内部金属发音条变形,从而造成发音跑调。另外,机械音乐盒放音时为了让音色稳定,必须放平不能动摇,而且价格昂贵,不能实现大批量生产。音乐盒300多年的产品发展,同时也是人类文明300多年发 展的历史鉴证。每个不同时期的音乐盒造型,都能折射出当时不同的社会心态和文明发展现状,它也成了时代的一面镜子。现今,音乐盒的制造,延袭传统,结合现代,正日益成为人们或为了典藏一段岁月,或为了收藏一份情感,或出于对音乐的追求,或对于旧时代的怀念,或为了居室的美化,等等,而得到众多品位人士的追求。最重要的是现在的音乐盒体积小,轻巧易携带,且音质好,功能多,有时出现一些问题时只需要改一改软件部分的程序即可。本文设计的音乐盒,是基于单片机设计制作的电子式音乐盒。与传统的机械式音乐盒相比更小巧,音质更优美且能演奏和弦音乐。电子式音乐盒动力来源是电池,制作工艺简单,可进行批量生产,所以价格便宜。基于单片机制作的电子式音乐盒,控制功能强大,可根据需要选歌,使用方便。所放歌曲的节奏可以根据需要进行设置,根据存储容量的大小,可以尽可能多的存储歌曲。第二节 设计所研究的内容及所做工作本设计以at89c2051单片机为核心器件,外部加上时钟与复位电路、选择按键电路、音频发生器、音频放大器、扬声器,以此来实现音乐演奏控制器的硬件电路,通过汇编来控制单片机内部的定时器使其产生音频,演奏出优美动听的音乐。用户可以按照自己的喜好通过选择按键来选择音乐。设计完成的内容:1.提出了音乐盒的整体设计方案,以at89c2051单片机为核心器件,对硬件各个模块进行了设计2.对音符频率进行了编码,并对主流程图及各个子程序模块进行了设计3.完成了硬件和软件及软硬件联调,并针对工作中出现的噪音提出相应的一些防干扰措施4.通过加按键电路,采用中断方式,达到选曲的目的第二章 方案论证第一节 设计方案 设计中考虑了两种设计方案,两种设计方案中主要区别在于硬件电路的不同,对于本设计通过模拟电路和单片机设计均可以实现,最后根据设计要求、可行性和设计成本的考虑选择了单片机设计的方案。现在一一介绍论证如下: 方案一: 此方案采用的是模拟电路,其中涉及有几部分: 1.基准频率产生器,产生基准频率,其值应根据音调发生器的频率要求决定。 电路可由晶振构成时钟脉冲振荡器。 2.音调发生器,音调发生器产生各个音区与音符所对应的频率;音符代码存储器,用来存储与乐曲的音符对应的数字代码及乐曲的数量。 3.通常先将乐曲进行编码,再将其代码存储在eprom存储器。 4.节拍发生器与地址计数器,节拍发生器的振荡频率由乐曲演奏的速度所决 定。演奏的速度越快,节拍发生器的速度越高。 5节拍分配器,将节拍分配好,产生驱动打击的节拍信号。6.声音驱动电路,使乐曲的节拍和频率通过发音演奏出所想要的乐曲。方案二:采用单片机来设计电路。其中主要涉及以下几个部分:1.at89c2051单片机,通过对其进行编程,利用其内部的定时器/计数器改变计数初值,可以实现不同的音调。2.按键电路 每按一次按键就可顺序播放一首歌曲,实现选曲的目的。3.时钟与复位电路 由石英晶体振荡器产生单片机工作时所必须的时钟信号。振荡器采用12mhz的晶振,使之机器周期 tcy=1us,方便发音程序的计算和编译。 4.音频放大器 经过音频放大器,音频信号经过适当的功率放大,可以驱动扬声器使之发声。第二节 设计方案的确定经过查资料、构思和自己的设计,为保证电路基本功能实现,经过分析,从实现难度、性能、经济等方面综合就以上两种方案进行比较:1.从实现音乐盒电路的硬件方面看,用单片机实现所用硬件电路比用模拟电路实现所用器件少,接线图简单,功耗较小,稳定性和抗干扰性及相对方案1好 2.用单片机实现音乐盒,通过编程就可实现音频和节拍,省去了节拍发生器和节拍分配器,实现音乐的产生较简单3.at89c2051微处理器的性价比高,用它完全可以实现本设计当中要求的功能,且体积小,便于产品小型化,功耗小,工作电压范围宽。4.用单片机设计的音乐盒通过lm386功率放大器以后音质较方案一好5.用单片机设计的音乐盒电路可以加按键电路实现播放暂停及选曲功能综合以上因素,选择方案二比较可行。第三章 音乐盒的硬件系统设计 该设计选择at89c2051单片机,硬件电路包括时钟与复位电路、按键电路、音频放大器、音频发生器等几部分。其中通过t0定时中断,并配合p3.0引脚(p3.0引脚输出接扬声器)构成音频发生器输出音频频率,通过p3.2引脚接入“播放下一曲”选择按键,中断方式接入。在p1口接入64个发光二极管,可以输入音符的编码,将它们点亮,像“满天星”一样闪烁,能增加一些情趣。第一节 音乐盒的硬件电路设计框图音乐盒的硬件电路有六部分组成:单片机、时钟与复位电路、选择按键输入电路、音频发生器、音频放大器和扬声器。音乐盒的硬件电路设计框图如图3-1所示。图3-1 电路设计框图第二节 控制系统的设计一、at89c2051介绍1.at89c2051的特点at89c2051是美国爱特梅尔(atmel corporation)半导体制造公司生产的一种高性能的单片机,它的指令集和引脚结构与intel公司的mcs51系列单片机高度兼容、低功耗、可以在接近零频率下工作,广泛的应用于各种计算机系统、工业控制、电讯设备、宇航设备及消费类产品中。由于atmel是全球最大的flash和eeprom生产制造公司,加之以其eeprom技术与intel的80c31内核技术交换,使atmel从此拥有80c31内核的使用权,从而该公司的89c51系列单片机具有极高的性能价格比。 at89c2051的性能结构:at89c2051是一个功能强大的单片机,它将at89c51的p0口、p2口、ea/vcc、ale/prog、 口线简化后,形成的一种仅20个引脚的单片机,相当于intel8031的最小应用系统。这对于一些不太复杂的控制场合,仅用一片at89c2051就足够了。由于将多功能的8位cpu和2kb闪速存储器以及模拟电压比较器集成到单个芯片上,从而成为一种多功能的微处理器,这为许多嵌入式控制提供了一种极佳的方案,使传统的51系列单片机的体积大、功耗大、可选模式少等诸多困扰设计工程师们的致命弱点不复存在。 at89c2051的主要特点:2kb字节闪速可编程可擦除只读存储器(flash eeprom)和128bytes的随机存取数据存储器(ram),重复擦写1000次,数据保存时间10年,工作电压范围:2.76v,工作频率:024mhz ,5根可编程i/o引线,2个16位定时器/计数器,一个5向量两级中断结构,一个全双工串行口,一个精密模拟比较器,两级程序加密,输出口可直接驱动led显示,低功耗的闲置和调电保护工作方式,以及片内振荡器和时钟电路。如下:(1)与intel mcs-51系列和winbond-78系列单片机兼容;(2)2kb可重编程flash存储器;(3)耐久性高,1000次写/擦除;(4)2.76v的操作范围;(5)全静态操作,024mhz;(6)2级加密程序存储器;(7)1288位内部ram;(8)15条可编程i/o引线;(9)2个16位定时/计数器;(10)5个中断源;(11)编程串行通用异步接受发送器uart;(12)直接led驱动输出;(13)片内模拟比较器;(14)低功耗空闲和掉电方式; 2.引脚功能说明at89c2051的引脚结构如图3-2所示,各项功能说明如下所示。3-2 at89c2051引脚图(1)vcc:电源端。(2)gnd :接地端。(3)p1:p1是一个8位准双向i/o端口。引脚p1.2p1.7提供上拉电阻。p1.0和p1.1要求外部提供上拉电阻。p1.0和p1.1还可分别作为片内精密模拟比较器的同相输入(ain0)端和反相输入(ain1)端。当p1.0端输入的电压高于p1.1端的电压时,p3.6输出为高电平,否则为低电平。p1输出缓冲器可吸收20ma电流,并能直接驱动led显示。当p1引脚写入“1”后,才可以用作输入端,这也是准并行端口的含义。当引脚p1.2p1.7用作输入端并被外部拉低时,将因内部的上拉电阻而输出电流。p1还在flash编程和程序校验期间接受代码数据。(4)p3: p3的p3.0p3.5,p3.7是带有内部上拉电阻的7个双向i/o引脚。p3.6用于固定输入片内比较器的输出信号,不能作为一个通用i/o引脚来进行访问。p3缓冲器可吸收20ma电流。当p3引脚写入“1”时,它们被上拉电阻拉高并可用作输入端。在用作于输入端时,被外部拉低的p3引脚将会在上拉电阻的作用下输出电流。p3还可以用于实现at89c2051的其他功能,如表1示。另外p3还用于接收一些flash存储器编程和程序校验的控制信号。 端口引脚第二功能p3.0rxd串行输入端口p3.1txd串行输出端口p3.2外部中断0p3.3外部中断1p3.4t0定时器0外部中断p3.5t1定时器1外部中断表1 p3引脚功能(5)rst:复位输入。rst一旦变成高电平,所有的i/o端口就复位到“1”。当振荡器正在运行时,持续给出rst引脚两个机器周期的高电平便可完成复位。每一个机器周期需要12个振荡周期或时钟周期。(6)xtal1:作为振荡器反相放大器的输入和内部时钟发生器的输入。(7)xtal2:作为振荡器反相放大器的输出。(8)at89c2051不允许构造外部总线来扩充程序/数据存储器,所以它不需要ale、psen、ra、wr一类的引脚。 at89c2051型号的单片机性价比高,是51系列单片机的精简版,由于将多功能的8位cpu和2kb闪速存储器以及模拟电压比较器集成到单个芯片上,从而成为一种多功能的微处理器,这为许多嵌入式控制提供了一种极佳的方案,使传统的51系列单片机的体积大、功耗大、可选模式少等诸多困扰设计工程师们的致命弱点不复存在。且性价比高,工作电压范围宽,为2.7伏6伏,工作频率为024mhz ,且用该型号的单片机能满足该设计要求,所以选用at89c2051单片机。二、时钟电路设计1.内部时钟方式该单片机内部有一个用于构成振荡器的高增益反相放大器,引脚xtal1和xtal2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成一个自激振荡器。图3-3是51单片机内部时钟方式的振荡器电路。外接晶体(在频率稳定性要求不高而希望尽可能廉价时,可选用陶瓷谐振器)以及电容c和c构成并联谐振电路,接在放大器的反馈回路中。对外接电容的值虽然没有严格的要求,但电容的大小多少会影响振荡器频率的高低、振荡器的稳定性、起振的快速性和温度稳定性。外接晶体时,c1和c2的值通常选择为30pf左右;外接陶瓷谐振器时,c1和c2的典型值约为47pf。再设计印刷电路板时,晶体或陶瓷谐振器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证振荡器的稳定和可靠工作。为了提高温度稳定性,应采用具有温度补偿特性的单片陶瓷电容。 51单片机常选择振荡频率为6mhz或12mhz的石英晶体,随着集成电路制造工艺技术的发展,单片机的时钟频率也在逐步提高,现在的高速单片机时钟芯片的频率已达40mhz。图3-3 片内时钟方式2.外部时钟方式 外部时钟方式是使用外部振荡脉冲信号,常用于多片单片机同时工作,以便于同步。对外部脉冲信号只要求高电平持续时间内大于20微妙。一般为低于12 mhz的方波。这时,外部振荡器的信号接至xtal2,即内部时钟发生器的输入端,而内部反相放大器的输入端xtal1应接地,如图4-3所示。由于xtal2端的逻辑电平不是ttl的,故建议外接一个上拉电阻。图3-4 外部时钟方式本设计采用内部时钟方式即可,各参数如图3-5所示.由于内部时钟方式中的c1和c2电容起着系统时钟频率微调和稳定的作用,因此,在本系统中的实际应用中一定注意正确选择参数(3010pf),并保证电路的对称性(尽可能匹配),选用正牌厂家生产的瓷片或云母电容,如果可能的话,温度系数要尽可能低。该系统时钟电路的选的电容c1和c2的参数为22pf。图3-5 时钟电路三、复位电路的设计1.复位的作用在上电或复位过程中,控制cpu的复位状态:这段时间内让cpu保持复位状态,而不是一上电或刚复位完毕就工作,防止cpu发出错误的指令、执行错误操作,也可以提高电磁兼容性能。无论用户使用哪种类型的单片机,总要涉及到单片机复位电路的设计。而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。许多用户在设计完单片机系统,并在实验室调试成功后,在现场却出现了“死机”、“程序走飞”等现象,这主要是单片机的复位电路设计不可靠引起的。单片机在启动时都需要复位,以使cpu及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从rst引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果rst引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则cpu就可以响应并将系统复位。2.单片机的复位方式单片机系统的复位方式有:手动按钮复位和上电复位 (1)手动按钮复位手动按钮复位需要人为在复位输入端rst上加入高电平,如图3-5所示。一般采用的办法是在rst端和正电源vcc之间接一个按钮。当人为按下按钮时,则vcc的+5v电平就会直接加到rst端。手动按钮复位的电路如图3-5所示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以完全能够满足复位的时间要求。图3-6 手动复位(2)上电复位at89c2051的上电复位电路如图3-6所示,只要在rst复位输入引脚上接一电容至vcc端,下接一个电阻到地即可。对于cmos型单片机,由于在rst端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至1f。上电复位的工作过程是在加电时,复位电路通过电 容加给rst端一个短暂的高电平信号,此高电平信号随着vcc对电容的充电过程而逐渐回落,即rst端的高电平持续时间取决于电容的充电时间。为了保证系统能够可靠地复位,rst端的高电平信号必须维持足够长的时间。上电时,vcc的上升时间约为10ms,而振荡器的起振时间取决于振荡频率,如晶振频率为10mhz,起振时间为1ms;晶振频率为1mhz,起振时间则为10ms。在图3-7的复位电路中,当vcc掉电时,必然会使rst端电压迅速下降到0v以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。如果系统在上电时得不到有效的复位,则程序计数器pc将得不到一个合适的初值,因此,cpu可能会从一个未被定义的位置开始执行程序。图3-7 上电复位3.复位电路的实现设计复位电路的实现通常有两种方式:即专用&p监控电路和rc复位电路。前者电路实现简单,成本低,但复位可靠性相对较低;后者成本较高,但复位可靠性高,尤其是高可靠重复复位。对于复位要求高、并对电源电压进行监视场合,大多采用这种方式。(1)专用&p监控电路专用监控电路又称为电源监视电路,具有上电时可靠产生复位信号和电源电压跌落到“门槛值”时可靠产生复位信号等功能。按有效电平分,有高电平输出、低电平输出两种;按功能分,有简单的电源监视复位电路带“看门狗”定时器的监控电路和wdt+ eprom的监控电路等多种类型。比较常见的生产厂家有maxim、philips、imp及dalls等,51系列的微处理器中常用的型号有max813l 、max809、x25043/5等。(2)rc复位电路本系统采用的是rc复位方式。rc复位电路的实质是一阶充放电电路,此复位电路只要rst引脚处至少保持2个机器周期(24个振荡器周期)的高电平就可实现复位,在rst段出现高电平后的第二个周期,执行内部复位,以后每个周期重复一次,直至rst端变低。本设计采用的是rc复位电路,并采用上电复位与手动复位相结合的方案实现复位更加可靠。复位电路图如下3-8所示图3-8 复位电路第三节 音频放大器的设计一、音频放大器的作用由于单片机端口输出信号的电流较小,不能直接驱动音频电路使喇叭发出声音,因此,需要接一个音频放大器将信号经过适当的功率放大即可驱动扬声器发声。二、lm386的性能介绍本设计采用的是lm386音频放大器,lm386是美国国家半导体公司生产音频功率放大器,主要应用于低电压消费类产品。为使外围元件最少,电压增益内置为20。但在1脚和8脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至200。以下图3-9、 图3-10是不同的增益值的电路图。图3-9 放大增益为20图3-10 放大增益为200输入端以地位参考,同时输出端被自动偏置到电源电压的一半,在6v电源电压下,它的静态功耗仅为24mw,使得lm386特别适用于电池供电的场合,也因此本设计采用电池供电。lm386的封装形式有塑封8引线双列直插式和贴片式。 特性(features): 1.静态功耗低,约为4ma,可用于电池供电。 2.工作电压范围宽,4-12v or 5-18v。 3.外围元件少。 4.电压增益可调,20-200。 5.低失真度。图3-11 lm386的外形和引脚的排列lm386的外形和引脚如上图3-11所示,引脚2为反相输入端,3为同向输入端,引脚5为输出端,引脚6为电源端,引脚4为地,引脚1和8是电压增益设定端,使用时在引脚7和地之间接旁路电容,通常取10微法本设计中的音频放大器如下图3-12所示,采用音频放大器放大比用三极管放大后的音质要好一些,抗干扰相对好一些。图3-12 音频放大器电路图lm386电源电压4-12v,音频功率0.5w。音响功放是nsc制造的,它的电源电压范围非常宽,最高可使用到15v,消耗静态电流为4ma,当电源电压为12v时,在8欧姆的负载情况下,可提供几百毫瓦的功率,它的典型输入阻抗为50k。第四节 按键选择输入电路 在单片机应用中,人机交互对话最通用的方法就是通过键盘进行的。操作者通过键盘向系统发送各种指令或置入必要的数据信息。因此键盘模块设计的好坏,直接关系到系统的可靠性和稳定性。一、键盘接口设计常用的按键接口一般分为“独立式按键接口设计”、“专用芯片式设计“和“矩阵式接el设计”几种。具体采用哪种方式,应该根据所设计系统的实际情况而定。下面分别介绍不同接口方式的优缺点及适用场合。 1.独立式按键接口设计: 独立式按键接口设计优点是电路配置灵活。软件实现简单,但缺点也很明显,每个按键需要占用一根口线,若按键数量较多,资源浪费将比较严重,电路结构也变得复杂。因此本方法主要用于按键较少或对操作速度要求较高的场合。软件实现时,可以采用中断方式,也可以采用查询方式,示意图如图3-13和3-14所示。图3-13 中断方式图3-14 查询方式2.矩阵式接口设计 矩阵式按键设计适应于按键数量较多,又不想使用专用键盘芯片的场合。这种方式的按键接口由行线和列线组成,按键位于行、列的交叉点上。这种方式的优点就是相对于独立接口方式可以节省很多i0资源,相对于专用芯片式可以节省成本,且更为灵活。缺点就是需要用软件处理消抖、重键等问题。矩阵式按键接口根据采用的按键识别方法不同基本有两种接法:线反转法和扫描法。其中扫描法的列线始终为输入,行线始终为输出;线反转法则需要改变列线和行线的方向。二、按键识别方式 按键接口方式确定后,需要对按键进行编码 按键编码没有特殊约定,只要有利于按键处理即可,同时应根据情况确定是否对按键进行缓冲。但对于矩阵式按键接口一般是先获得按键的扫描码,然后将其转换为事先约定的按键编码。 1.按键识别方法 不同的按键接口方式对应不同的按键识别方法,但无论哪种接口方式,按键的闭合与否都反映在电压的高低上,因此系统可以通过检测不同的电平状态来识别按键是否按下。实际设计时可以根据需要设定键闭合或断开的电平状态。例如,我们利用低电平表示键按下,高电平表示键释放。 对应上述两种按键接口方法,独立式按键识别方法很简单,只需要检测相应口线的电平即可,没有键按下时为高电平,有键按下时为低电平;因此下面主要讲述矩阵式按键接口方式对应的按键识别方法。 2.按键识别原理 按键设置在行、列的交点上,行列线分别连接到按键开关的两端,行线或列线通过上拉电阻接到+5v上。平时无按键动作时,处于高电平状态,而当有键按下时,电平状态将发生改变。这一点是按键识别的关键所在。由于矩阵键盘中行线和列线为多键共用,各按键均影响该键所在的行和列的电平,即各键相互间有影响,必须协调处理。 (1)扫描法识别按键 扫描法识别按键分两步进行:第一步,识别有无按键按下;第二步,若有键按下,识别出该键。具体办法如下:识别键盘有无按键按下方法:让所有列线均置为0电平,检查各行线是否有变化,如果有变化,则说明有键被按下,如果没有变化,则说明无键被按下。 识别具体按键的方法:逐列置零电平,其余各列置为高电平,检查各行线电平的变化,如果某行电平由高电平变为低电平,则可确定此行此列交叉点处的按键被按下。 (2)线反转法识别按键 扫描法要逐列扫描查询,若被按下的键处于最后一列时,要经过多次扫描才能最后获得此按键的行列值。 线反转法则很简练,无论被按键处于第一列或是最后一列,均只需两步便能获得按键的行列值。 第一步:将行线编程为输入线,列线编程为输出线,并使输出线输出为全零电平,则行线中电平由高到低所在行为按键所在行。 第二步:吲第一步相反,将行线编程为输出线,列线编程为输入线,并f吏输出线输出为全零电、 ,则列线中电平由高到低所在行为按键所在列。综合一、二两步的结果,可确定按键所在行和列,从而识别所按的键。该方法的优点是:非常简单适用。 三、键盘模块处理方式 单片机应用系统中,键盘扫描只是mcu的工作之一。mcu在忙于各项工作任务时,如何兼顾键盘的输入,取决于键盘的工作方式。键盘工作方式的选取原则是既要保证能及时响应按键操作,也要不过多占用mcu的工作时间。一般而言,有三种工作方式:编程扫描、定时扫描和中断扫描。 1.编程扫描方式 本方式中mcu对键盘的扫描采取程序控制方式,一旦进入键扫描状态,则反复地扫描键盘,等待用户从按键上输入命令或数据。而在执行键入命令或处理键入数据过程中,mcu将不再响应键入要求,直到mcu返回重新扫描键盘为止。编程扫描程序流程图如图3-15所示图3-15 编程扫描程序流程图2.定时扫描方式 定时扫描工作方式是利用mcu内部的定时器产生定时中断,cpu响应中断时对键盘进行扫描,并在有键按下时识别出该键并执行相应的键功能程序。该种方式不再需要单独的延迟去抖动处理。 3.中断扫描方式 键盘工作在编程扫描方式时,mcu要不问断地对键盘进行扫描,其问mcu不能进行其它任何工作,若mcu工作量较大,该方式不适应;定时扫描方式前进了一大步,只是定时的监视一下键盘输入情况,其它时间mcu可以做其它事情;若想进一步提高mcu利用率,可以用中断扫描方式,即只有在有键按下时才理睬键盘,否则不理。 综上所述,键盘工作分为三个层次: 第一层:监视键盘输入。根据需要选择合适的键盘工作方式(如上所述三种方式)。 第二层:确定具体按键。根据需要选择合适的识别方法( 扫描法或线反转法)。 第三层:键功能程序执行。 上述三种键盘工作方式都可以根据系统需要灵活选用,并非任何情况下都要使用中断方式,也不是任何时候都不能用编程扫描方式。 四、键盘设计实用技巧 遵循上述方法,完全可以设计出适用于不同场合的按键输入接口,但实际设计过程中有很多设计技巧和方法可以增加系统的可靠性、灵活性。 软件消抖技术 按键在按下和释放地瞬问都将伴随一连串的抖动,抖动时间由按键的机械特性决定,一般为5l0ms。按键的稳定闭合的长短由操作人员决定。按键抖动的消除,通常有硬件和软件两种方法。硬件消抖除了成本增加外,当按键较多时实现非常困难,因此最好采用软件方法消除抖动。软件消抖一般都是第一次检测到有键按下时,延时通常的键抖动时间后再次检测按键是否仍按下,若仍按下则认为真正有键按下,从而消除了影响。 本设计按键电路的设计如下图3-16所示。因为该电路中按键不多,所以选择独立按键电路比较简单,采用中断方式,采用软件(通过延时)去抖。图3-16 按键电路图第四章 音乐盒的软件系统设计软件设计的重点在于如何产生不同的音调、怎样控制节拍以及怎样从表取相应的音调对应的编码,及按键过程中怎样用中断服务程序进行处理、消抖等问题。第一节 音符盒的发音原理一、音符频率1.音符频率概念一般来说,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样奏出多种音色的声音。因此单片机奏乐只需要弄清楚两个概念即可,也就是“音调”和“节拍”。音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。在音乐中所谓音调。其实就是我们通常说的“音高”,也就是其基本音调的频率,知道了一个音符的频率以后。怎样让单片机发出相应频率的声音呢?2.利用定时器计数器0产生音符频率一般来说,常采用的方法就是通过单片机的定时器定时中断,将单片机上对应扬声器的i/o口来回取反,从而让扬声器发出声音,为了让单片机发出不同频率的声音,我们只需将定时器预置不同的定时初值就可实现。那么怎样确定一个频率所对应的定时器的定时值呢?方法如下:例如:中音1(do)的频率=523hz,周期t=1/523s=1912us;定时器/计数器0的定时时间为:t/2=1912/2us=956us;定时956us的计数值=定时时间/机器周期=956us/1us=956(时钟频率=12mhz);装入tho、tlo的计数初值thtl=65536-956=64580。 将64580装入tho、tlo寄存器中,启动t1工作后,每计数956次时将产生溢出中断,进入中断服务程序时,每次对p3.0引脚的输出值进行取反,就可得到中音do(523hz)的音符频率。以下是对应不同音调的音符频率表4-1表 4-1 对应不同音调的音符频率表音符音调c262294330350393441495d294330371393441495556e330371416441495556624f350393441467525589661g393441495525589661742a441495556589661742833b495556589661742833935音符音调do1re2mi3fa4so5la6si7c523589661700786882990d5896617007868829901112e66170078688299011121284f700786882990111212481322g7868829901112124813221484a88299011121248132214841665b9901112124813221484166518693.编码及计数初值通过上面的分析可见,为了产生音符,必须求出音符c低音到高音的所有计数初值。例如:c调的低音do的thtl=65536-500000/262=63627,中音do的thtl=65536-500000/523=64580,高音do的thtl=65536-500000/1047=65059。为了编程记谱方便,对它们进行简单的音符编码,如表4-2所示,在编程时,歌曲音符用编码记谱,然后根据音符编码查找对应的计数初值。音符thtl音符编码音符thtl音符编码音符thtl音符编码642601464820765161d644002564898865200e645243664968965236f1645804765030a65269g264684565087b不发音0364777665136c表4-2 音符编码表二、音符节拍1.节拍的定义节拍就是一个音符唱多长的时间,例如,4/4是用来表示节拍的。以3/4为例加以说明,它表示乐谱中以四分音符为节拍,每一小节为三拍。比如:1=c 3/4 |1 2 3 4 5 6| ,其中1、2为一拍,3、4、5为一拍,6为一拍共三拍。1、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5分时长为四分音符的一半,即为八分音符,6的时长为四分音符长。那么一拍到底唱多长呢?一般来说,如果乐曲没有特殊说明,一排的时长大约为400-500ms,我们以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就是400ms,八分音符的时长就是200ms。2.节拍的产生在单片机上控制一个音符唱多长可采用循环延时的方法来实现,首先,我们确定一个基本时长的延时程序,比如十六分音符的时长为基本延时时间,那么,对于一个音符,若它为十六音符,则只需调用一次延时程序,其他一次为它的倍数即可。例如,1拍=0.4s,1/4拍=0.1s,以此类推;假设1/4拍执行一次延时程序,则1/2拍就执行两次延时程序,所以只要求出1/4延时时间,其余的节拍就是它的倍数。如表4-3所示。为了记谱方便,将节拍数也进行了编码。由于不同的音乐每小节的拍数不同,可以适当调节一个延时时间的长度。如表4-4所示按1/4拍为一个延时时间的节拍编码与节拍对应表按1/8拍为一个延时时间的节拍编码与节拍对应表节拍编码节拍节拍编码节拍节拍编码节拍节拍编码节拍11/46162821/483a3a4c41/2c5f5表4-3 节拍与节拍编码对照表乐谱节拍1/4拍的延时时间/ms乐谱节拍1/8拍的延时时间/ms1256218794250125表4-4 乐谱节拍建立了音符编码和节拍编码后,在编程时,每个音符占用一个字节,高4位是音符编码,低四位是节拍编码。根据上述原则建立乐谱编码表table,以及按照音符顺序对应的thtl值表table1。在程序运行的过程中顺序取出乐谱编码,然后查找到对应的thtl值。三、建立曲谱编码表1.按照音符的顺序建立定时器0的计数初值表。表的首地址位table,表table的内容是c调低音低音高音的计数初值。table: dw 64260 64400 64524 64580 64684 64777 64820 64898 dw 64968 65030 65087 65136 65161 65200 65236 652692.生日快乐歌词曲如图5-1所示,根据曲谱并按照音符编码写出曲谱编码表table1,高四位是音符编码,低四位是节拍编码。例如:第一个音符“5”的音符编码为“8”,见表5-2,第一个音符“5”的节拍是2/4拍节拍编码为“2”,见表5-3。为了好听两个同音符之间空1/4拍,即在5*5加入“01h”编码,生日快乐歌的乐谱(如图5-1所示)及对应的节谱编码表song00如下(乐谱为c调3/4拍):生日快乐歌c 3/4| 55 6 5 | 7 | 55 6 5 | |祝你 生 日 快 乐, 祝你 生 日 快 乐。| 55 | 7 6 | | |我们 高 声 歌 唱, 祝 你 生 日 快乐。 图5-1 生日快乐歌词曲(1)生日快乐歌:song00: db 82h, 01h, 81h ,94h db 84h, 0b4h,0a4h,04h db 82h, 01h, 81h ,94h,84hdb 0c4h,0b4h,04hdb 00h(2)新年快乐编码表song01: db 42h ,42h, 44h ,14h,02h db 62h,62h,64h,44h,04hdb 42h,62h,84h,84h,02hdb 72h,62h,54h,04hdb 00h (3)两只蝴蝶songo2: db 62h,52h,64h,04hdb 52h,62h,52h,44h,04hdb 22h,42h,54h,64h,52h,42h,22h,42h,14h,04hdb 62h,52h,64h,04h db 52h,62h,52h,44h,04hdb 22h,42h,54h,64h,52h,42h,22h,42h,54h,04hdb 00h第二节 程序模块设计一、主程序模块设计主程序安排的任务比较多,首先,要进行初始化工作,其次,计算出c调各个音符与计数初值t的对应值,然后查表取出各音调对应的的计数值,然后开定时器。利用at89c2051的p3.2引脚接收到的信号,判断是否有键按下,若有,则转到中断服务程序,可以实现选曲功能,

温馨提示

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

评论

0/150

提交评论