版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘要音乐演奏器是为了解决音乐演奏的问题。本设计采用单片机89c51作为核心元件,利用蜂鸣器、三极管等元件设计的音乐演奏器,能满足演奏的需要。本文详细介绍了音乐演奏器硬件与软件的设计过程。由于单片机的集成度高,功能性强,通用性好,特别是它具有体积小、重量轻、能耗低、价格便宜、可靠性好、抗干扰能力强和使用方便等方面的独特的优点。采用该装置可以根据实际情况进行修改,具有低功耗、可靠性、安全性以及低成本等特点。目录1 设计目的32 硬件设计32.1 确定器件的型号及参数32.1.1 80c51单片机32.1.2 mcs-51的中断源.32.1.3 定时计数器.42.1.4 蜂鸣器52.1.5 三极管6
2、2.1.6 dip封装72.2 元器件清单72.3 工作原理及原理图83 软件设计93.1 音符发音原理93.2 乐曲的音调表示方法93.3 产生音乐频率103.3 歌谱103.4 程序设计103.4.1 程序流程图113.4.2 汇编语言编写的歌曲演奏程序代码如下124 参考文献14设计体会151 设计目的1、通过课程设计全面系统的了解单片机的设计苏醒及设计步骤.2、了解音乐演奏器的基本组成及开发设计过程中需要注意的问题.3、利用单片机设计一个演奏兰花草歌曲的音乐演奏器。4、熟悉音乐演奏的全过程,学会处理调试过程中出现的问题.2 硬件设计2.1 确定器件的型号及参数2.1.1 80c51单片
3、机80c51单片机的40个引脚大致可分为4类:电源、时钟、控制和i/o引脚。电源: vcc - 芯片电源,接+5v; vss - 接地端; 时钟:xtal1、xtal2 - 晶体振荡电路反相输入端和输出端。 控制线:控制线共有4根, ale/prog:地址锁存允许/片内eprom编程脉冲 ale功能:用来锁存p0口送出的低8位地址 prog功能:片内有eprom的芯片,在eprom编程期间,此引脚输入编程脉冲。 psen:外rom读选通信号。 rst/vpd:复位/备用电源。 rst(reset)功能:复位信号输入端。 vpd功能:在vcc掉电情况下,接备用电源。 ea/vpp:内外rom选择
4、/片内eprom编程电源。 ea功能:内外rom选择端。 vpp功能:片内有eprom的芯片,在eprom编程期间,施加编程电源vpp。 i/o线 80c51共有4个8位并行i/o端口:p0、p1、p2、p3口,共32个引脚。p3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。 2.1.2 mcs-51的中断源 (1) 8051有5个中断源,它们是两个外中断int0(p3.2)和int1(p3.3)、两个片内定时/计数器溢出中断tf0和tf1,一个是片内串行口中断ti或ri,这几个中断源由tcon和scon两个特殊功能寄存器进行控制。 计算机的中断系统能够加强cpu对多任务事件
5、的处理能力。从而使它的应用范围进一步扩大。在mcs-48结构的基础上,mcs-51在增强了i/o的种类、功能和数量的同时,也增强了中断能力。mcs-51提供了5个中断源,两个中断优先级控制,可实现两个中断服务嵌套。当cpu支持中断屏蔽指令后,可将一部分或所有的中断关断,只有打开相应的中断控制位后,方可接收相应的中断请求。程序设置中断的允许或屏蔽,也可设置中断的优先级。 (2)中断处理流程 cpu响应中断请求后,就立即转入执行中断服务程序。不同的中断源、不同的中断要求可能有不同的中断处理方法,但它们的处理流程一般都如下所述。现场保护和现场恢复中断是在执行其它任务的过程中转去执行临时的任务,为了在
6、执行完中断服务程序后,回头执行原先的程序时,知道程序原来在何处打断的,各有关寄存器的内容如何,就必须在转入执行中断服务程序前,将这些内容和状态进行备份即保护现场。就象文章开头举的例子,在看书时,电话玲响需传去接电话时,必须在书本上做个记号,以便在接完电话后回来看书时,知道从哪些内容继续往下看。计算机的中断处理方法也如此,中断开始前需将个有关寄存器的内容压入堆栈进行保存,以便在恢复原来程序时使用。 中断服务程序完成后,继续执行原先的程序,就需把保存的现场内容从堆栈中弹出,恢复积存器和存储单元的原有内容,这就是现场恢复。 如果在执行中断服务时不是按上述方法进行现场保护和恢复现场,就会是程序运行紊乱
7、,程序跑飞,自然使单片机不能正常工作。 中断打开和中断关闭 在中断处理进行过程中,可能又有新的中断请求到来,这里规定,现场保护和现场恢复的操作是不允许打扰的,否则保护和恢复的过程就可能使数据出错,为此在进行现场保护和现场恢复的过程中,必须关闭总中断,屏蔽其它所有的中断,待这个操作完成后再打开总中断,以便实现中断嵌套。中断服务程序 既然有中断产生,就必然有其具体的需执行的任务,中断服务程序就是执行中断处理的具体内容,一般以子程序的形式出现,所有的中断都要转去执行中断服务程序,进行中断服务。中断返回执行完中断服务程序后,必然要返回,中断返回就是被程序运行从中断服务程序转回到原工作程序上来。在mcs
8、-51单片机中,中断返回是通过一条专门的指令实现的,自然这条指令是中断服务程序的最后一条指令。2.1.3 定时计数器定时器/计数器通道内部结构及工作原理 在80c51单片机内部,有2个定时器/计数器,分别称为定时器/计数器0、定时器/计数器1。每个定时器/计数器都具有计数和定时两大功能,并具有4种工作方式。80c51单片机定时/计数器内的核心器件是加1计数器,加1计数器由两个特殊功能寄存器th0与tl0组成。当定时计数器工作于定时方式,加1脉冲由系统时钟fosc经12分频后产生。当定时计数器工作于计数方式,加1脉冲由t0引脚直接提供。定时器工作于定时还是计数方式,取决于选择开关 c/t ,当
9、c/t =0时工作于定时方式, c/t =1时工作于计数方式。加1脉冲要经过启动开关才能到达加1计数器,启动开关由与门的输出端控制,其输入端分别接启动控制位tr0与或门输出端。或门的输入端分别接gate位与外部中断引脚 。启动开关的控制方式将在下文中介绍。当加1 计数器溢出时,由硬件自动将中断标志tf0置1,以此向cpu发中断请求。定时的实质也是计数,不过定时时间不是对外来脉冲进行计数,而是对cpu的内部时钟脉冲的12分频(机器周期)进行计数,即每过一个机器周期就加一次1。例如:设计数器是8位的tl0,计数初值为100,cpu时钟频率为12mhz,则机器周期为1s,当产生计数溢出时,表示定时到
10、,从而就起到了定时器的作用。2.1.4 蜂鸣器 蜂鸣器是一种一体化结构的电子讯响器,本文介绍如何用单片机驱动蜂鸣器,他广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种. 电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.515v直流工作电压),多谐振荡器起振,输出1.
11、52.5khz的音频信号,阻抗匹配器推动压电蜂鸣片发声。 1.电磁式蜂鸣器驱动原理蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才电流放大的电路。s51增强型单片机实验板通过一个三极管c8550来放大驱动蜂鸣器,原理图见下面图3如图所示,蜂鸣器的正极接到vcc(5v)电源上面,蜂鸣器的负极接到三极管的发射极e,三极管的基级b经过限流电阻r1后由单片机的p3.7引脚控制,当p3.7输出高电平时,三极管t1截止,没有电流流过线圈,蜂鸣器不发声;当p3.7输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制p3.7脚的电
12、平来使蜂鸣器发出声音和关闭。程序中改变单片机p3.7引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。另外,改变p3.7输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小,这些我们都可以通过编程实验来验证。2.1.5 三极管1.晶体三极管,是最常用的基本元器件之一,晶体三极管的作用主要是电流放大,他是电子电路的核心元件,现在的大规模集成电路的基本组成部分也就是晶体三极管。 2. 三极管基本机构是在一块半导体基片上制作两个相距很近的pn结,两个pn结把正块半导体分成三部分,中间部分是基区,两侧部分是发射区和集电区,排列方式有pnp和npn两种, 从三个区引出相应的电极
13、,分别为基极b发射极e和集电极c。发射区和基区之间的pn结叫发射结,集电区和基区之间的pn结叫集电极。基区很薄,而发射区较厚,杂质浓度大,pnp型三极管发射区发射的是空穴,其移动方向与电流方向一致,故发射极箭头向里;npn型三极管发射区发射的是自由电子,其移动方向与电流方向相反,故发射极箭头向外。发射极箭头向外。发射极箭头指向也是pn结在正向电压下的导通方向。硅晶体三极管和锗晶体三极管都有pnp型和npn型两种类型。 3.三极管是一种控制元件,三极管的作用非常的大,可以说没有三极管的发明就没有现代信息社会的如此多样化,电子管是他的前身,但是电子管体积大耗电量巨大,现在已经被淘汰。三极管主要用来
14、控制电流的大小,以共发射极接法为例(信号从基极输入,从集电极输出,发射极接地),当基极电压ub有一个微小的变化时,基极电流ib也会随之有一小的变化,受基极电流ib的控制,集电极电流ic会有一个很大的变化,基极电流ib越大,集电极电流ic也越大,反之,基极电流越小,集电极电流也越小,即基极电流控制集电极电流的变化。但是集电极电流的变化比基极电流的变化大得多,这就是三极管的电流放大作用。 4. 刚才说了电流放大是晶体三极管的作用,其实质是三极管能以基极电流微小的变化量来控制集电极电流较大的变化量。这是三极管最基本的和最重要的特性。我们将ic/ib的比值称为晶体三极管的电流放大倍数,用符号“”表示。
15、电流放大倍数对于某一只三极管来说是一个定值,但随着三极管工作时基极电流的变化也会有一定的改变。根据三极管的作用我们分析它可以把微弱的电信号变成一定强度的信号,当然这种转换仍然遵循能量守恒,它只是把电源的能量转换成信号的能量罢了。三极管有一个重要参数就是电流放大系数。当三极管的基极上加一个微小的电流时,在集电极上可以得到一个是注入电流倍的电流,即集电极电流。集电极电流随基极电流的变化而变化,并且基极电流很小的变化可以引起集电极电流很大的变化,这就是三极管的放大作用。三极管的作用还有电子开关,配合其它元件还可以构成振荡器,此外三极管还有稳压的作用。2.1.6 dip封装80c51单片机采用双列直插
16、式dip,qf44和lcc形式封装。dip(dualinline package)是指采用双列直插形式封装的集成电路芯片,绝大多数中小规模集成电路(ic)均采用这种封装形式,其引脚数一般不超过100个。封装材料有塑料和陶瓷两种。采用dip封装的cpu芯片有两排引脚,使用时,需要插入到具有dip结构的芯片插座上。当然,也可以直接插在有相同焊孔数和几何排列的电路板上进行焊接。dip封装结构形式有:多层陶瓷双列直插式dip,单层陶瓷双列直插式dip,引线框架式dip(含玻璃陶瓷封接式,塑料包封结构式,陶瓷低熔玻璃封装式)等。dip封装具有以下特点:1.适合在pcb (印刷电路板)上穿孔焊接,操作方便
17、。2.比to型封装易于对pcb布线。3.芯片面积与封装面积之间的比值较大,故体积也较大。以采用40根i/o引脚塑料双列直插式封装(pdip)的cpu为例,其芯片面积/封装面积=(33)/(15.2450)=1:86,离1相差很远。(ps:衡量一个芯片封装技术先进与否的重要指标是芯片面积与封装面积之比,这个比值越接近1越好。如果封装尺寸2.2 元器件清单序号元件名称规格数量189c51单片机at89c51/at89s511个2晶振6 mhz立式1个3起振电容30 pf瓷片电容2个4复位电容22uf 16v电解电容1个5电阻100 1k 4.7k各1个6三极管90121个7蜂鸣器81个8dip封装
18、插座40 脚集成插座1个9万能板150mm*90mm1块2.3 工作原理及原理图单片机的p1.0引脚通过限流电阻r与三极管基极相接,三极管的集电极接有蜂鸣器。当单片机的p1.0引脚电平为0时,三极管导通,蜂鸣器有电流流过;当p1.0电平为1时三极管截止,蜂鸣器没有电流流过。这样,在蜂鸣器的两端就会出现波动的电流,波动的电流就会使蜂鸣器发声。 3 软件设计3.1 音符发音原理 1. 乐曲中的音符,实质就是不同频率的声音。通过单片机产生的不同频率的脉冲信号,经放大电路,由蜂鸣器放出,就产生了美妙和谐的乐曲。2.用软件延时来控制发音的长短,控制节拍。3.2 乐曲的音调表示方法单片机播放乐曲的过程,主
19、要是用单片机来识别所编辑的乐曲并播放出来。单片机需要识别乐曲中的音调和音长(音长亦称为节拍),本设计用字母az来代表乐曲的各个音调。数字0作为音调的结束标志,如表1所示。各调1/4节拍的时间曲调值延时时间曲调值延时时间调4/4125ms调2/4250ms调3/4187ms3.3 产生音乐频率:1.要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2, 即为半周期的时间,然后利用计时器计时此半周期时间,每当计时到后就将输出脉冲的i/o反相,然后重复计时此半周期时间再对i/o反相,如此就可在i/o 脚上得到此频率的脉冲.2.利用8051的内部计时器让其工作在计数模式mode1下,
20、改变计数值th0及tl0以产生不同的频率.3.例如以6mhz晶振为例:要产生频率为523hz,其周期t= 1/523= 1912us, 其半周期为1912/2=956us,因此只要令计数器计时956us/1us=956.所以在每计数956次时将i/o反相,就可得到中音do(523hz).计数脉冲值与频率的关系公式如下以: 6mhz晶振为例,故其频率为250000hz例4.其计数值的求法如下:t=(2*16-x)tcy例如:求低音do(262hz),中音do(523hz),高音do(1046hz) 的计数值?x=2*16-(t/tcy)低音do的 x=65536-125000/262=64582
21、中音do的 x=65536-125000/523=65058高音do的 x65536-125000/1047=652973.3 歌谱3.4 程序设计3.4.1 程序流程图开始初始化设置定时器初值存入乐谱代码读取音符(定时常数)a=ffh?读取节拍(延时常数)延时常数存入r2调用延时子程序结束yesnor2=0?yesno主程序t0重装定时值p1.0输出返回3.4.2 汇编语言编写的歌曲演奏程序代码如下org 0000horg 000bhljmp start org 0030h;伪指令,指定程序从0030h开始存放start1:mov tmod ,#00000001bmov ie ,#10000
22、010bhstart: mov r3,#00h ;r3清零(作为查表偏移)next:mov a,r3mov dptr,#table;查表movc a,a+dptrmov r7,a ;r7是查表的来的代码字节inc r3;读下一个代码字节mov a,r3movc a,a+dptrmov r2,aanl a,r7 cjne a,#0ffh,next0 sjmp nextnext0:mov th0,r7mov tl0,r2setb tr0jmp song;歌曲播放子程序song:mov a,r2 ;取出节拍rl a;左移节拍jnz keep ;如果节拍为0就让它等于1mov a,#01hkeep:
23、mov r2,arepeat: acall eighth djnz r2,repeat ret;产生1/8拍延时子程序eighth: mov a,r3 ;查表取出廷时参数,保存到r4 mov dptr,#delay_t movc a,a+dptr mov r4,a mov a,r3 ;查表取出1/8拍周期数,保存到r5 mov dptr,#s_para movc a,a+dptr mov r5,anextcyc: acall sound djnz r5,nextcyc ret;= 发声子程序 =sound: setb spk acall sdelaymov tho,r7mov tho,r3 c
24、lr spk acall sdelay ret;延时子程序sdelay: mov a,r4 ; 廷时值在r4内 mov r0,axl2: mov r1,#03hdl1: nop djnz r1,dl1 djnz r0,xl2 ret;1/8拍周期表s_para:ds 1dhdb 15h,16h,00db 19h,00h,1ch,00h,1fh,21h,00h,25hdb 00h,29h,2ch,00h,31h,34h,37h,00hdb 3eh,41h,00h,49h,00h,52h,57h,00hdb 62h;延时参数表delay_t:ds 1dhdb 7eh,77h,00hdb 6ah,00h,5eh,00h,54h,4fh,00h,46hdb 00h,3fh,3bh,00h,35h,32h,2fh,00hdb 2ah,27h,00h,23h,00h,1fh,1dh,0c0hdb 1ah;歌曲表table:dw 2202h,2902h,2902h,2902h,2906h,2702h ;我从山中来dw 2502h
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论