微机原理课程设计——音乐播放器.doc_第1页
微机原理课程设计——音乐播放器.doc_第2页
微机原理课程设计——音乐播放器.doc_第3页
微机原理课程设计——音乐播放器.doc_第4页
微机原理课程设计——音乐播放器.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

一 课程设计目的 1.通过D/A装换器产生模拟信号,使PC机作为简易音乐播放器。 2.了解利用数模转换器产生音乐的基本方法。二课程设计任务设计并实现一个键控音乐播放器。要求:(1) 自己选用合适的芯片,不少于两种。(2) 自行设计电路并使用汇编语言编写程序完成键控音乐播放器功能。(3) 该播放器有若干首歌曲可以选择,开始时输出说明,要用户选择要播放的歌曲,然后根据用户按键进行播放、退出或出错提示。三、总体设计方案1、总体设计方案一所有音乐都是由各个不同频率的音阶和其延续时间的长短来实现的。不同的音乐是由各个音阶按某种排列各自播放一定时间形成的,将各音乐音阶和其延续时间存在数据段中,然后根据不同按键值选择不同的音阶和时间表,再使用计数器产生该音阶频率。而我们学过的有计数器可以产生各种频率,所以我们主要采用计数器8253产生各音符,用8255并行接口来控制扬声器的开关,达到播放音乐的功能。2、总体设计方案二可以使用0832(数模转换器)来产生频率,原理图: 提出这个方案是因为我想产生模拟信号,来驱动扬声器,这样产生的声音更加圆润感觉更连续,效果更好点。我们想把一个周期的波形分成32份,然后每份给8253一个值让他转换成模拟信号,不同的频率可以用8253计数器控制,比如要产生261Hz的频率,使用1MHz的话,周期就为1/261=3.83ms,分成32份,每份间隔时间就是3.83ms/32=0.12ms,换句话说就是送计数器0的初值为1M/261/32=120次。3、各个音符的对应频率表:音符 频率/HZ 半周期/us音符频率/HZ半周期/us低1DO2621908 #4FA#7400676#1DO#2771805中5SO7840638低2RE2941700#5SO#8310602#2RE#3111608中6LA8800568低3M3301516#6LA#9320536低4FA3491433中7SI9880506#4FA#3701350高1DO10460478低5SO3921276#DO#11090451#5SO#4151205高2RE11750426低6LA4401136#2RE#12450402#6LA#4661072高3M13180372低7SI4941012高4FA13970358中1DO5230956#4FA#14800338#1DO#5540903高5SO15680319中2RE5780842#5S0#16610292#2RE#6220804高6LA17600284中3M6590759#6LA#18650268中4FA6980716高7SI19760253四.部分电路设计及功能解说1、 频率发生电路使用8253产生音符频率。8253采用方式3,产生方波信号,根据输入计数初值的不同产生不同频率的方波信号来驱动扬声器。 设某音符频率为fHz,而CLK脉冲是1MHz,则计数初值N=1M/f。8253的控制端口为28BH,控制字为36H。2、扬声器开关控制电路使用8255并行接口芯片来控制扬声器的开和关,PC0始终接低电平,PA0和8253的OUT0接在与门上,这样只有PA0=1时扬声器才有可能开通,否则不发声。关闭的方法是,从PC口读入数据再从PA口输出;而开扬声器时只要在输出PA口数据前对数据进行一个取反操作就可以了。五.硬件接线图 六.软件设计流程图1、总流程图2、音乐播放子程序流程图七.程序段功能汇总1、MAIN程序MAIN程序是总程序,输出说明,等待用户按键并读取键值。根据不同的按键选择调用播音子程序播放不同的歌曲。2、PLAY子程序PLAY子程序是播音子程序,SI指向音节表中的频率,BP指向音节表中的时间。从SI的指向的音节表中取一个频率,只要不是-1,即有效就再读取时间,然后计算计数初值送入计数器,产生各种频率。开启扬声器,根据所取的时间调用若干次延时子程序。这段时间扬声器就发出该频率的声音,延时结束,就关闭扬声器,调用音节之间的小延时程序。最后修改SI和BP,指向下一个频率,重复上面的工作。3、DELAY子程序和DELAY_OFF子程序两个都是子程序,采用空操作循环多次的方法,只是第二个延时时间较短,大概为5ms。八.程序清单SSEG SEGMENT PARA STACK stack dw 100h dup(0) ;Resize the stack by changing the number 100SSEG ENDSDSEG SEGMENT ;TO DO: Add your programs data hereINFO1 DB 0DH,0AH,-,0DH,0AH,THERE ARE 3 SONGS:,0DH,0AH,0DH,0AH,$INFO2 DB 1.HAPPY BIRTHDAY,0DH,0AH,$INFO3 DB 2.SHEEP,0DH,0AH,$INFO4 DB 3.RIVER,0DH,0AH,$INFO5 DB 0.EXIT,0DH,0AH,$INFO6 DB YOU HAVE CHOSEN :$INFO7 DB THANK YOU FOR YOUR USE,0DH,0AH,$INFO8 DB -,0DH,0AH,PRESS THE KEY TO SELECT SONG!,0DH,0AH,$INFO9 DB 0DH,0AH,-,0DH,0AH,|INVALID SELECTION|,0DH,0AH,-,0DH,0AH,$FREG1 DW 2 dup(262),294,262,349,262,262,294,262,392,249,262,262,523,440,349 ;曲1的频率DW 330,294,466,266,440,349,392,349,-1TIME1 DW 1,1,2,2,2,4,1,1,2,2,2,4,1,1,2,2,2,2,4,1,1,2,2,2,4 ;曲1的时间FREG2 DW 330,294,262,294,3 DUP(330) ;曲2的频率DW 3 DUP(294),330,392,392DW 330,294,262,294,4 DUP(330)DW 294,294,330,294,262, -1TIME2 DW 6 DUP(1),2 ;曲2的时间DW 2 DUP(1,1,2)DW 12 DUP(1),4FREG3 DW 330,392,330,294,330,392,330,294,330,330,392,330,294,262,294,330,392,294 ;曲3的频率DW 262,262,220,196,220,262,294,332,262, -1TIME3 DW 3 DUP(2),1,1,2,1,1,4 ;曲3的时间DW 2 DUP(2,2,1,1),4DW 3 DUP(2,1,1,1),4DSEG ENDSCSEG SEGMENT assume cs:CSEG, ds:DSEG, es:DSEG, ss:SSEG INIT PROC ;Initialize procedure mov ax, dsegmov ds, axmov es, ax;TO DO: Add your initialize code here (as your requirement)ret ;return to the MAIN procedure INIT ENDP MAIN PROC ;Here is your program entry point call INIT ;call the INIT procedure to initialize the program ;*TO DO: Add your main code here* RE: MOV DX,28BH ;关闭扬声器MOV AL,89HOUT DX,ALMOV DX,28AHIN AL,DXMOV DX,288HOUT DX,AL LEA DX,INFO1 ;输出说明信息MOV AH,09HINT 21HLEA DX,INFO2INT 21HLEA DX,INFO3INT 21HLEA DX,INFO4INT 21HLEA DX,INFO5INT 21HLEA DX,INFO8INT 21HMOV AH,01H ;读取按键INT 21HCMP AL,1 ;根据不同的按键播放不同的曲子JE MUSIC1CMP AL,2JE MUSIC2CMP AL,3JE MUSIC3CMP AL,0JE EXITLEA DX,INFO9 ;无效选择,输出错误提示MOV AH,09HINT 21HJMP RE MUSIC1:MOV SI,OFFSET FREG1 ;指向曲1的表MOV BP,OFFSET TIME1CALL PLAYJMP REMUSIC2:MOV SI,OFFSET FREG2 ;指向曲2的表MOV BP,OFFSET TIME2CALL PLAYJMP REMUSIC3:MOV SI,OFFSET FREG3 ;指向曲3的表MOV BP,OFFSET TIME3CALL PLAYJMP REEXIT:MOV DX,28BH ;关闭扬声器MOV AL,89HOUT DX,ALMOV DX,28AHIN AL,DXMOV DX,288HOUT DX,ALLEA DX,INFO7 ;输出欢迎使用信息,增加界面友好度MOV AH,09HINT 21Hmov ax, 4c00h ;The end of the program, return to the system int 21h MAIN ENDP ;TO DO: Add other procedures(PROC) here (as your requirement) ;THE PROGRAMME OF PLAYING THE MUSIC PLAY PROC ;PLAY子程序,功能上面介绍过 L1:MOV BX,DS:SI ;取频率 CMP BX,-1 ;看是否有效 JE L0 ;无效就退出 MOV CX,DS:BP ;读取时间 MOV DL,CL ;保存时间 ADD DL,30H MOV AH,02H INT 21H MOV DX,0FH ;计算计数初值,1M的十六进制为0F4240H MOV AX,4240H DIV BX MOV BX,AX MOV DX,283H ;设置计数器工作方式 MOV AL,36H OUT DX,AL MOV DX,280H ;输入计数初值 MOV AX,BX OUT DX,AL MOV AL,AH OUT DX,AL MOV DX,28BH ;开扬声器MOV AL,89HOUT DX,ALMOV DX,28AHIN AL,DXNOT ALMOV DX,288HOUT DX,AL ROD:CALL DELAY ;延时 LOOP ROD MOV DX,28BH ;关扬声器MOV AL,89HOUT DX,ALMOV DX,28AHIN AL,DXMOV DX,288HOUT DX,ALCALL DELAY_OFF ;音节间延时 ADD SI,2 ADD BP,2 JMP L1 L0:RET PLAY ENDP DELAY PROC ;延时子程序 PUSH AX PUSH BX PUSH CX PUSH DX MOV BX,09FHLL1:MOV CX,0FFFFH ;循环这么多次LOP: LOOP LOPDEC BXJNZ LL1POP DX POP CX POP BX POP AX RET DELAY ENDP DELAY_OFF PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV BX,0FHLL2:MOV CX,0CFFFHLOP2: LOOP LOP2DEC BXJNZ LL2POP DX POP CX POP BX POP AX RETDELAY_OFF ENDPCSEG ENDS;TO DO: Add other segments here (as your requirement)END MAIN九.试验结果和分析1、试验结果:程序初始运行界面如果按错了键,会出现如下界面如果选择正确,将出现如下界面:2、分析这是按照方案一做的结果,按13分别播放“生日快乐”等歌,但由于本组人对音乐都是外行,各音阶频率的排序和延时时间搭配不好,导致音乐严重走调,但基本能听出不是噪音。按照方案二做的电路和程序,无论怎么样都不出声,后来我们直接送数据到0832产生三角波信号(程序在我们的一次作业中写的)。还是无法让扬声器发出声音,因此按这个方案失败了。十.课程设计总结和体会1. 实验过程中碰到了很多的难题和障碍,我认识到平时基础知识的重要性,只有能够熟练的掌握才能在实验过程中得心应手,否则一步错则整个试验都会陷入困境,因而,严谨的态度是试验成功的重

温馨提示

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

评论

0/150

提交评论