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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

汇编模拟电子琴程序2.docx

1、汇编模拟电子琴程序2汇编语言程序设计课程设计报告题目: 模拟电子琴(音乐播放项目子程序) 指导老师: 学生姓名: 学 号: 专 业: 班 级: 2011年6月20日(一)程序设计任务:1.1题目:模拟电子琴1.2要求:设计一个可模拟发声的电子琴程序,并实现功能,附加显示。(二) 课题背景: 2.1汇编语言的优点:汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。用汇编语言等非机

2、器语言书写好的符号程序称为源程序,运行时汇编程序要将源程序翻译成目标程序。目标程序是机器语言程序,它一经被安置在内存的预定位置上,就能被计算机的CPU处理和执行。汇编语言像机器指令一样,是硬件操作的控制信息,因而仍然是面向机器的语言,使用起来还是比较繁琐费时,通用性也差。但是,汇编语言用来编制系统软件和过程控制软件,其目标程序占用内存空间少,运行速度快,有着高级语言不可替代的用途。设计一个可模拟发声的电子琴程序,作为音乐播放项目的子程序。2.3程序设计目的:利用汇编功能实现一个小的电子琴程序,主要功能是根据键盘上的按键发出不同的音符,并记录播放每个音符。每个音符由它的音调和频率以及时间来决定。

3、(三)运行环境: 硬件:8086以上CPU,内存256M以上。 软件:WINDOWS操作系统,MASM,LINK汇编编译链接件。(四)程序概要设计:4.1课程设计基础知识(附图):8253A内部结构: 4.2程序设计思想:音乐发声是根据频率和它的延时实现的,不同的音符有不同的频率和时间,根据任务要求先设计一个可视菜单,应用系统显示功能,设置一定的显示方式,在对每个音符1-8定义应有的频率和时间,插入发声子程序,利用DOS功能输入相应数字发出相应的音,整个程序利用栈来实现,这样就做成了一个简单的模拟电子琴程序。1.系统概述1.1系统方案综述从系统实现的功能上来看,简易电子琴的课程设计主要分为手动

4、弹奏乐曲和自动播放音乐两大部分组成。手动弹奏乐曲是根据PC机硬件键盘设置功能键并通过不同频率使其发出不同的声音就,即音阶,自动播放音乐则是通过中断的方法来实现。从系统硬件结构上来看,我们主要使用到PC机、8086单片机、8253定时器芯片、8255可编程并行接口芯片、蜂鸣器等等。将这些硬件电路有机地结合起来使之满足电子琴的实现硬件需要。从系统软件设计角度来看,将电子琴的课程设计采用程序模块化设计方法,将程序分为主程序、键盘扫描程序模块、中断发音程序模块等等。此外,采用程序设计思想,将中断定时方式与外部按键查询方式相结合,实现手动弹奏乐曲和自动播放音乐两部分的切换和启动。从音乐产生原理方面来看,

5、通过控制8253芯片定时器的定时时间产生不同频率的音频脉冲,从而驱动蜂鸣器发出不同音乐的声音。用软件延时来控制发音时间的长短,控制节拍。把音乐的音符和相应的节拍变换为定时常数和延时常数,作为数据表格存放在存储器中,由程序查表得到定时常数和延时常数,分别用来控制8253定时器芯片产生的脉冲频率和发出该音频脉冲的持续时间。因此,我们可以综合上述的方案设计原理,从软件和硬件两大部分进行有计划有步骤的系统分析和设计。总设计图参见附件。1.2系统设计思路(1)手动弹奏乐曲和自动播放音乐用PC机键盘来实现。手动弹奏乐曲中PC机键盘的8个键分别设置不同的音符,同时用一个键作为中断控制程序的控制键,通过其可实

6、现手动弹奏乐曲与播放音乐之间的切换。(2)软件的设计主要包括PC机键盘扫描、音乐播放程序和手动弹奏程序。此次程序设计主要分为两大块:手动弹奏乐曲程序和自动播放程序。两者之间用功能转换程序对其进行结合,并实现各功能的控制。(四)程序设计流程图:实现功能健康离开家牛津布设置文本方式 程序设计功能图: (六)程序代码及其说明: DATA SEGMENT ERROR DB warning:please input the right number,0DH,0AH,$ FREQUENCY DW 262,294,330,347,392,440,494,523 RECORDER DW 300 DUP(?)

7、MESSAGE DB *WELCOME TO THE COMPUTER PIANO!*,0DH,0AH DB 1.please input the number 1-8,0DH,0AH DB 2.when you want to listen the recoreder,please input the SPACE,0DH,0AH DB 3.when you have listened the music,you can continue to input the number,0DH,0AH DB 4.when you want to quit,you can press the ESC k

8、ey,0DH,0AH DB 6.when you input the right number,the number will show in the screen ,0DH,0AH DB 0AH,0AH,0AH,0AH,0AH,0AH,0AH,0AH,0AH,0AH,0AH,0AH,0AH,0AH,$ DATA ENDS STACK SEGMENT PARA STACK ;定义堆栈段 DW 100 DUP(?) STACK ENDS ;堆栈结束 CODE SEGMENT ;给DS赋值 ASSUME CS:CODE, DS:DATA START: MOV AX, DATA ;给DS赋值 MOV

9、 DS, AX MOV BYTE PTR BP,0 MOV AX,0600H ;清屏程序 MOV BX,0754H MOV CX,0000H MOV DX,19F4H INT 10H LEA DX, MESSAGE ;取MESSAGE的有效地址给DX MOV AH, 09H INT 21H REAGAIN: LEA DI,RECORDER ;取RECORD的有效地址给DI MOV AL, 10110110B ;把控制字写入AL OUT 43H, AL ;通过AL将控制字写入43H端口, 工作在方式3,用计数器2 AGAIN: MOV AH,0 ;从键盘输入 INT 16H ;调用16号中断 M

10、OV DL,AL MOV AH,02H INT 21H CMP AL,1BH ;判断是不是ESC键 JZ EXIT ;若是ESC,则跳转到EXIT,则返回DOS MOV BX,OFFSET FREQUENCY ;取出频率组FREQUENCY的偏移地址给BX CMP AL, ;把输入的字符同SPACE的ASCII码值进行比较 JE RECYCLE ;若等于,则跳转到RECYCLE,说明要执行记忆循环播放 CMP AL,0 ;把输入的字符同0的进行比较 JB DISPLAY ;若小于,则跳转到DISPLAY,即输入错误,重新输入 CMP AL,8 ;输入的字符同8的ASCII码值进行比较 JA D

11、ISPLAY ;若大于,则跳转到DISPLAY,即输入错误,重新输入 AND AX,0FH ;接受数据,输入字符存入AX,取出低七位 SHL AX,1 ;左移一位 SUB AX,2 ;把移位后的值减2 MOV SI,AX ;把AX的值送给SI MOV CX,BXSI ;把所要取的频率值用相对基址变址的方式取出,送至CX NEXT: MOV AX, 34DCH ;DX:AX=1234DCH=1193180D MOV DX, 12H DIV CX MOV DI,AX ;把所输入的频率值记录到RECORDER中 INC DI ;改变DI所指向的RECORDER的地址,加2 INC DI INC BY

12、TE PTR BP ;用BP做计数器,计算RECORDER中所记下的频率值个数 MOV BX, AX ;把AX的值传给BX MOV AX, BX OUT 42H, AL ;把AX的低8位传入42H端口 MOV AL, AH ;把高8位传给低8位 OUT 42H, AL ;把AX的高八位传到42H端口 IN AL, 61H ;读取8255的状态,以控制PB0和PB1 OR AL, 03H ;将后两位置一,使扬声器发声 OUT 61H, AL ;写入61H端口 MOV CX, 2810H ;通过嵌套执行循环程序2810*4000 DELAY: MOV DX, 4000H DELAY2: DEC D

13、X JNZ DELAY2 LOOP DELAY IN AL, 61H ;重新读取61H端口的状态 AND AL, 11111100B ;把PB0和PB1置0 OUT 61H, AL ;关闭扬声器 JMP AGAIN DISPLAY: LEA DX,ERROR ;显示调用,若输入的是0或9,则执行DISPLAY MOV AH,09H ;调用INT 21,显示ERROR字符串 INT 21H JMP AGAIN ;返回让用户重新输入 TEMP: JMP REAGAIN EXIT: MOV AH, 4CH ;返回DOS INT 21HRECYCLE: LEA DI,RECORDER ;启动记忆程序,

14、取RECORDER的有效地址RECORDRECYCLE:MOV AX,DI ;把所记忆的频率依次传送给AX MOV WORD PTR DI,0 ;取完后清除记忆值 INC DI ;取完后清除记忆值 INC DI ;把的值加 MOV BX, AX ;把AX的值传给BX MOV AX, BX OUT 42H, AL ;把AX的低8位传入42H端口 MOV AL, AH ;把高8位传给低8位 OUT 42H, AL ;把AX的高八位传到42H端口 IN AL, 61H ;读取8255的状态,以控制PB0和PB1 OR AL, 03H ;将后两位置一,使扬声器发声 OUT 61H, AL ;写入61H

15、端口 MOV CX, 4000H ;通过嵌套执行循环程序3000*4000 DELAY3: MOV DX, 5000H DELAY4: DEC DX JNZ DELAY4 LOOP DELAY3 IN AL, 61H ;重新读取61H端口的状态 AND AL, 11111100B ;把PB0和PB1置0 OUT 61H, AL ;关闭扬声器 DEC BYTE PTR BP ;每执行一次,BP的值减一 JZ TEMP ;当BP减到0,则返回REAGAIN重新让用户输入 JMP RECORDRECYCLE ;否则继续执行记忆播放 CODE ENDS ;代码段结束 END START(七)实现界面(

16、图) 由图可知:当弹出一段乐谱的时候(如上以小星星为例),屏幕上出现了历史显示,当按下空格键时,电脑开始回放之前弹奏的所有音符。当输入不为1-8时,如q,则出现了警告。(八)总结与体会:以前从没有学过关于汇编语言的知识,起初学起来感觉很有难度。当知道要做课程设计的时候心里面感觉有些害怕和担心, 担心自己不会或者做不好。但是当真的要做的时候也只好进自己作大的努力去做, 做到自己最好的。我们在这个过程中有很多自己的感受,我想很多同学都会和我有一样的感受,那就是感觉汇编语言真的是很神奇,很有意思。我们从开始的担心和害怕渐渐变成了享受,享受着汇编带给我们的快乐。看着自己做出来的东西,心里面的感觉真的很

17、好。虽然我们做的东西都还很简单,但是毕竟是我们自己亲手做出来的。很有成就感。在这次课程设计中,我真正体会到了合作的重要性,遇到很多问题时,当我看书查资料不能解决时,这是去找同学讨论一下,收获很大,可以使很多问题迎刃而解,直到问题最终解决。 我想汇编语言设计和其他课程设计有共同的地方,那就是不仅加深和巩固了我们的课本知识,而且增强了我们自己动脑,自己动手的能力。但是我想他也有它的独特指出,那就是让我们进入一个神奇的世界,那就是编程。对于很多学过编程或者其他的类似程序的同学来说,这不算新奇,但是对于我来说真的新奇,很有趣,也使我有更多的兴趣学习微机原理和其他的汇编。(九)参考文献:汇编语言程序设计齐志儒 高福祥 编微机原理实验与课程设计指导书 陆红伟编

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

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