ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:251.80KB ,
资源ID:1958294      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-1958294.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(音乐播放器课程设计.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

音乐播放器课程设计.docx

1、音乐播放器课程设计课程设计任务书学生姓名: 宋晓阳 专业班级: 电气0805班 指导教师: 刘永红 工作单位: 自动化学院 题 目: 键盘电子乐器初始条件:掌握汇编语言程序设计方法,所设计的程序运行后可通过键盘控制,满足系统功能,并实现该系统设计方案。在DOS,windows,汇编软件环境下运行。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.设计一个用键盘演奏音乐的程序,计时器系统设计编程定时输出电子音调,用pc机内部8253time使扬声器发声。用汇编语言对8253进行编程,使其OUT0上输出一定的频率,将其一定频率输出到喇叭上,演奏出不同的音节。pc

2、机的数字键(17)作为电子音调的音调选择2. 课程设计说明书应包括:a)设计任务及要求b)方案比较及认证c)程序设计基本思想,程序流程图,部分源程序及注解d)调试记录及结果分析e)参考资料f)附录:全部源程序清单g)总结时间安排: 2011年元月07日-元月09日 选题、查阅资料和方案设计2011年元月10日-元月14日 编程2011年元月15日-元月16日 调试程序,改进与提高2011年元月17日 撰写课程设计报告(有调试过程及结果的截屏)2011年元月18日 答辩和交课程设计报告指导教师签名: 2011 年 元 月 6 日系主任(或责任教师)签名: 年 月 日摘要利用PC上的定时/计数芯片

3、8253A控制PC扬声器发声。编写内核模块,直接操作扬声器相关端口,或字符设备驱动,供应用程序调用,用键盘使其发出不同的声音。关键字:8253 定时器 中断键盘电子乐器1.方案比较1.1 发声程序循环优点:简单,易于思维缺点:程序过于长,比较繁琐1.2 调用宏,进行发声优点:程序短缺点:不易想到2.芯片介绍 2.1 8255芯片简述 图1-1 8255引脚图 8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,+5V单电源供电。 2.1.1 8255三种方式下工作方式0基本输入/输出方式方式1选通输入/输出方式方式2双向选通输入/输出方式 2.

4、1.2 8255引脚图如右图所示,各引脚功能如:D7D0与CPU侧连接的八条双向数据线;WR(低电平有效) 写输入信号;RD(低电平有效) 读输入信号;CS(低电平有效) 片选输入信号;A0、A1 片内寄存器选择输入信号;PA7PA0 A口外设双向数据线;PB7PB0 B口外设双向数据线;PC7PC0 C口外设双向数据线; RESET 复位输入信号 2.1.3 8255端口地址寄存器A口B口C口控制寄存器端口地址60H61H62H63H 2.2 8253芯片简述 8253可编程定时/计数器是Intel公司生产的通用外围芯片之一,有3个独立的十六位计数器,技术频率范围为02MHz,它所有的技术方

5、式和操作方式都通过编程控制。图1-2 8253引脚图 2.2.1 8253六种工作方式方式0:计数结束中断方式1:可编程频率发生器方式2:频率发生器方式3:方波频率发生器方式4:软件触发的选通信号方式5:硬件触发的选通信号2.2.2 8253引脚图如上图所示,各引脚功能如下:D7D0 八条双向数据线;WR(低电平有效) 写输入信号;RD(低电平有效) 读输入信号;CS(低电平有效) 片选输入信号;A0、A1 片内寄存器地址输入信号;CLK 计数输入,用于输入定时基准脉冲或计数脉冲;OUT 输出信号,以相应的电平指示计数的完成,或输出脉冲波形;GATE 选通输入,用于启动或禁止计数器的操作,以使

6、计数器和计测对象同步。2.2.3 8253端口地址寄存器0#计数器1#计数器2#计数器控制寄存器端口地址40H41H42H43H 本次课设要求用8253做。计算机中可以利用8253/54定时器来驱动扬声器。连接到扬声器上的是定时器2,GATE2与端口61H的PB0相连,当PB0=1时,GATE2获得高电平,使定时器2可以在模式3下工作。定时器2的OUT2与端口61H的PB1通过一个与门与扬声器的驱动电路相连。当PB1=1时,允许OUT2的输出信号到达扬声器电路。下面是控制扬声器的代码:IN AL,61H ;get the current setting of port BMOV AH,AL ;

7、save itOR AL,00000011B ;make PB0=1 and PB1=1OUT 61H,AL ;turn the speaker on. ;how long the beep sound goes hereMOV AL,AH ;get the original setting of port BOUT 61H,AL ;turn off the speaker 对于IBM PC兼容机来说,无论是8086,80486还是Pentium,驱动扬声器的过程是相同的。至于音调发出的时间量(音长),则取决于它的延迟的时间,这个延迟时间可以在PC机的80x86主处理器的帮助下实现。3.通用发

8、声程序BIOS中的BEEP子程序能根据BX中给出的计数值控制8253/54定时器,产生频率为896Hz的声音。实际上BEEP是一个很好的通用发声程序。首先,BEEP程序只能产生896Hz的声音,通用发声程序应能产生任一频率的声音。其次BEEP产生声音的持续时间(音长)只能是.5s的倍数,我们希望声音的持续时间更易于调整,例如是10ms的倍数。给计数器2装入计数值533H就能产生896Hz的声音(1.1931MHz/896Hz=1331=533H),同样,产生其他频率声音的计数值也可以用下式计算出来: 假设发声频率存放在DI寄存器中,下面的指令使AX中得到送往定时器2的计数值:MOV DX,12

9、HMOV AX,348CHDIV DI利用CPU来产生延迟时间是最常用的一种方法,但对8088/86,80286,386,486以及Pentium来说,它们产生的延迟时间都是不一样的。对基于8088/86的PC/XT,PS/2等PC机,可用下面的程序来产生时间延迟:MOV CX,NDELAY: LOOP DELAY在8088/86CPU中,执行一条LOOP指令需要17个时钟周期,因此,执行上面的指令大约需要N*17*T时钟周期。在BIOS中,利用上述方法来产生250ms延迟时间的程序如下:SUB CX,CXG7: LOOP G7 ;如果要产生与10ms成倍数的延迟时间,可在BX寄存器中放入倍数

10、。例如,要产生1s的持续时间,则在BX中放入100,以控制LOOP指令执行次,也就是10ms的100倍。指令如下: MOV BX,100WAIT: MOV CX,2800DELAY: LOOP DELAY DEC BX JNZ WAIT上述流程图为:图2-1程序流程图下面在修改后的BEEP程序的基础上,为8088/86编写一个任一频率(由DI指定)和任一持续时间(由CX和BX指定)的通用发声程序。此程序包括三个步骤:(1)在8253/54中的43端口送一个控制字0B6H(10110110B),该控制字对定时器2进行初始化,使定时器2准备接收计数初值。(2)在在8253/54中的42端口(Tim

11、er2)装入一个16位的计数值(533H*896/频率),以建立将要产生的声音频率。(3)把输出端口61H的0/1两位置1,发出声音。GENSOUND PROC NEAR ;* PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI ;* MOV AL,0B6H ;写8253的控制字 选中8253通道1 读写16位 工作方式3 二进制计数方式 OUT 43H,AL ;向8253中写入上述功能的控制字 MOV DX,12H ;假定发生频率存放在DI寄存器中,下面的三行指令使AX中得到送往定时器2的计数值 MOV AX,348ch ;1193100HZ/freq DIV D

12、I ;value of freq OUT 42H,AL ;将AL中数放到8253计数器中 MOV AL,AH OUT 42H,AL ;将AL中数放到8253计数器中 IN AL,61H ;从61h号端口读取PB口现在的状态 MOV AH,AL ;将PB口的状态放进AH OR AL,3 ;将AL低两位置1 OUT 61H,AL ;向61h号端口写入一个字节,打开扬声器 WAIT1: MOV CX,2000 ;3314 call waitf DELAY1: DEC BX JNZ WAIT1 MOV AL,AH ;recover value of port OUT 61H,AL ;从61h号端口读入

13、一个字节 ;* POP DI POP DX POP CX POP BX POP AX ;* RET GENSOUND ENDPWAITF PROC NEAR PUSH AX WAITF1: IN AL,61H AND AL,10H ;check pb4 CMP AL,AH ;did it change JE WAITF1 ;wait for change MOV AH,AL ;save the new pb4 status LOOP WAITF1 ;continue until cx becomes 0 POP AX RET WAITF ENDPGENSOUND程序能产生1965536Hz的声

14、音,这个频率的下限19Hz是使除法不产生溢出的最小的DI值(DX)=12H=18d19)。其上限65536Hz是多余的,因为人们最高能听到的音频约为20000HZ。4.音调与频率和时间的关系 利用计算机控制发声的原理,可以编写演奏乐曲的程序。在一首乐曲中,每个音符的音高和音长与频率和节拍有关。图3-1音频频率对照表组成乐曲的每个音符的频率值和持续时间是乐曲程序发生所需要的两个数据。音符的频率可以从图3-1中查表得到,但实际上送入计数器2的是输入频率1.1932MHz与音符频率相除的值,通用发声程序SOUNDF的前半部分就是完成这个计算,并将计数值送入计数器2的功能。 ;MOV AL,0B6H

15、;写8253的控制字 选中8253通道1 读写16位 工作方式3 二进制计数方式 OUT 43H,AL ;向8253中写入上述功能的控制字 MOV DX,12H ;假定发生频率存放在DI寄存器中,下面的三行指令使AX中得到送往定时器2的计数值 MOV AX,348ch ;1193100HZ/freq DIV DI ;value of freq OUT 42H,AL ;将AL中数放到8253计数器中 MOV AL,AH OUT 42H,AL ;将AL中数放到8253计数器中 ;.附录附录一:程序一流程图附录二:程序一DATA SEGMENT PARA DATAINFO1 DB 0DH,0AH,W

16、ELCOME YOU TO COME HERE!$INFO2 DB 0DH,0AH,this is a Piano program!$INFO3 DB 0DH,0AH,please press!$INFO4 DB 0DH,0AH,INPUT ERROR!$INFO5 DB 0DH,0AH,PLEASE INPUT AGAIN!$MUSLIST DB 0DH,0AH,1 262 DB 0DH,0AH,2 294 DB 0DH,0AH,3 330 DB 0DH,0AH,4 347 DB 0DH,0AH,5 392 DB 0DH,0AH,6 440 DB 0DH,0AH,7 494 DB 0DH,0

17、AH,8 524 DB 0dh,0ah,$MUS_FREG1 DW 262,-1MUS_TIME1 DW 50,25MUS_FREG2 DW 294,-1MUS_TIME2 DW 50,25MUS_FREG3 DW 330,-1MUS_TIME3 DW 50,25MUS_FREG4 DW 347,-1MUS_TIME4 DW 50,25MUS_FREG5 DW 392,-1MUS_TIME5 DW 50,25MUS_FREG6 DW 440,-1MUS_TIME6 DW 50,25MUS_FREG7 DW 494,-1MUS_TIME7 DW 50,25MUS_FREG8 DW 524,-1M

18、US_TIME8 DW 50,25DATA ENDSSTACK SEGMENT PARA STACK STACK DB 200 DUP (STACK)STACK ENDSCODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODEMAIN PROC FAR MOV AX,DATA MOV DS,AX MOV AH,0 ;设置显示方式 MOV AL,4 ;设置显示方式 INT 10H ;调用显示器中断 MOV AH,0BH ;设置背景颜色或彩色组 MOV BH,0 ;设置背景颜色 MOV BL,2 ;蓝色 INT 10H ;调用显示器中断 MOV AH,0BH ;设置

19、背景颜色或彩色组 MOV BH,01H ;设置字体颜色 MOV BL,1 ;黑色 INT 10H ;调用显示器中断;*定义一个宏*;功能09H功能描述:输出一个字符串到标准输出设备上。;如果输出操作被重定向,那么,将无法判断磁盘已满入口参数:AH09HDS:DX待输出字符的地址;说明:待显示的字符串以$作为其结束标志SHOW MACRO b LEA DX,b MOV AH,9 INT 21H ENDM;* show INFO1 ;显示字符串 show INFO2 ;显示字符串 show INFO3 ;显示字符串 show MUSLIST ;显示字符串INPUT: MOV AH,01H ;设置光

20、标类型 INT 21H ;调用中断,返回dos CMP AL,Q ;是否按下Q JZ retu ;是则跳转,不是继续向下运行 CMP AL,1 ;是否按下1 JNZ B0 ;不是1跳转,是继续向下运行 CALL MUSIC1 ;跳转到MUSIC1程序 JMP EXIT1 ;跳转EXIT1B0: CMP AL,2 ;是否按下2 JNZ C0 ;不是2则跳转,是继续运行 CALL MUSIC2 ;调用 MUSIC2程序 JMP EXIT1 ;跳转到EXIT1C0: CMP AL,3 ;是否按下3 JNZ D0 ;不是3跳转,是继续运行 CALL MUSIC3 ;跳转到MUSIC3程序 JMP EX

21、IT1D0: CMP AL,4 ;是否按下4 JNZ E0 ;不是4跳转,是继续运行 CALL MUSIC4 ;跳转到MUSIC4程序 JMP EXIT1 E0: CMP AL,5 ;是否按下5 JNZ F0 ;不是5跳转,是继续运行 CALL MUSIC5 ;跳转到MUSIC5程序 JMP EXIT1F0: CMP AL,6 ;是否按下6 JNZ G0 ;不是6跳转,是继续运行 CALL MUSIC6 ;跳转到MUSIC6程序 JMP EXIT1G0: CMP AL,7 ;是否按下7 JNZ H0 ;不是7跳转,是继续运行 CALL MUSIC7 ;跳转到MUSIC7程序 JMP EXIT1

22、H0: CMP AL,8 ;是否按下8 JNZ exit ;不是8跳转,是继续运行 CALL MUSIC8 ;跳转到MUSIC8程序EXIT1: show INFO5 ;显示字符 JMP INPUT ;跳转到INPUTEXIT: call clear ;跳转到clear show INFO4 ;显示字符 show INFO5 ;显示字符 show INFO1 ;显示字符 show INFO2 ;显示字符 show INFO3 ;显示字符 show MUSLIST ;显示字符 jmp input ;跳转到INPUTRETU: MOV AH,4CH ;带返回码返回 INT 21H ;调用dos中断

23、MAIN ENDP MUSIC1 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG1 ;puts the freg table offset in SI LEA BP,DS:MUS_TIME1 ;puts the time table offset in BPFREG1: MOV DI,SI ;read next frequency CMP DI,-1 ;end of tone JE END_MUS1 ;if yes,exit MOV DX,DS:BP ;else,fetch the duration MOV BX,5400 CALL GE

24、NSOUND ;play the note ADD SI,2 ;update the table pointer ADD BP,2 JMP FREG1 ;go process next noteEND_MUS1: RETMUSIC1 ENDPGENSOUND PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV AL,0B6H ;写8253的控制字 选中8253通道1 读写16位 工作方式3 二进制计数方式 OUT 43H,AL ;向8253中写入上述功能的控制字 MOV DX,12H MOV AX,533H*896 DIV DI OUT

25、42H,AL ;将AL中数放到8253计数器中 MOV AL,AH OUT 42H,AL ;将AL中数放到8253计数器中 IN AL,61H ;从61h号端口读入一个字节 MOV AH,AL OR AL,3 OUT 61H,AL ;向61h号端口写入一个字节WAIT1: MOV CX,8FF0H ;向CX中写入数DELAY1: LOOP DELAY1 ;延时 DEC BX ;BX-1 JNZ WAIT1 ;运算结果不为0,则ZF=0,则转移 MOV AL,AH OUT 61H,AL ;从61h号端口读入一个字节 POP DI POP DX POP CX POP BX POP AX RETGE

26、NSOUND ENDPMUSIC2 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG2 LEA BP,DS:MUS_TIME2FREG2: MOV DI,SI CMP DI,-1 JE END_MUS2 MOV DX,DS:BP MOV BX,1400 CALL GENSOUND ADD SI,2 ADD BP,2 JMP FREG1END_MUS2: RETMUSIC2 ENDPMUSIC3 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG3 LEA BP,DS:MUS_TIME3FR

27、EG3: MOV DI,SI CMP DI,-1 JE END_MUS3 MOV DX,DS:BP MOV BX,1400 CALL GENSOUND ADD SI,2 ADD BP,2 JMP FREG1END_MUS3: RETMUSIC3 ENDPMUSIC4 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG4 ;puts the freg table offset in SI LEA BP,DS:MUS_TIME4 ;puts the time table offset in BPFREG4: MOV DI,SI ;read nex

28、t frequency CMP DI,-1 ;end of tone JE END_MUS4 ;if yes,exit MOV DX,DS:BP ;else,fetch the duration MOV BX,5400 CALL GENSOUND ;play the note ADD SI,2 ;update the table pointer ADD BP,2 JMP FREG4 ;go process next noteEND_MUS4: RETMUSIC4 ENDPMUSIC5 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG5 ;puts the freg table offset in SI LEA BP,DS:MUS_

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2