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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

微机原理课程设计电子琴的设计之欧阳化创编.docx

1、微机原理课程设计电子琴的设计之欧阳化创编课程设计任务书时间:2021.02.06创作:欧阳化学生姓名: 刘沛 专业班级: 电气0901 指导教师: 张 锐 工作单位: 自动化学院 题 目:计算机电子琴软件软件设计初始条件:1.用于调试程序的IBM兼容PC机一台;2.安装DOS/WIN98操作系统或运行于DOS/ WIN98兼容方式;3. EDIT 等文本编辑器输入80x86汇编程序,MASM 5.0编译及链接程序。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.使用汇编语言设计一个运行于计算机的电子琴软件,软件应实现弹奏功或演奏。其中弹奏:用户每按一琴键弹

2、奏相应音符;演奏:按下某键后自动弹奏预存琴谱功能;还可以附加变调、变速和记录创作等其它功能。2.说明书撰写格式应符合课程设计说明书统一书写格式。时间安排:1.程序框图设计,3天2.编程,4天3.调试,3天4.编写设计报告,4天指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日摘要1 设计任务和思路11.1设计任务11.2设计思路12更件部分工作原理22.1 8255工作原理22.2 8253工作原理23程序流程图43.1主程序流程图43.2演奏子程序流程53.3音乐播放子程序流程63.4弹奏子程序流程图63.5发音子程序流程图 74各部分功能实现说明74.1 发音部分功能实现74

3、.2 变调功能的实现84.3 弹奏功能的实现84.4演奏功能的实现9 4.4.1歌曲选择功能实现9 4.4.2 音乐播放功能实现95 程序运行结果10结束语12参考文献13附录 程序清单14成绩评定表19摘要汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。利用汇编语言能够直接访问与硬件相关的存储器或I/O端口,从而最大限度地发挥硬件的功能。本文主要介绍了利用汇编语言设计一个运行于计算机的电子琴软件,软件能够实现弹奏,演奏的功能,当按下弹奏键时,实现弹奏功能,发出音符对应频率的声音,按下演奏键时,实现演奏功能,播放预存的音乐,按下指定的音调选择按键后,选择

4、低音,中音或高音,则分别用低音,中音或高音进行弹奏或演奏。首先介绍了PC机内扬声器的控制电路,接着介绍了相关接口芯片8255和8253的内部结构和工作原理,接着讲述了各部分功能的具体实现方法。关键词:汇编语言,8255,8253,扬声器 计算机电子琴软件设计1 设计任务和思路1.1设计任务使用汇编语言设计一个运行于计算机的电子琴软件,软件应实现弹奏功能或演奏功能。其中弹奏:用户每按一琴键弹奏相应音符;演奏:按下某键后自动弹奏预存琴谱功能;还可以附加变调、变速和记录创作等其它功能。软件预想功能为:按数字1-8为弹奏功能;按字母p为演奏功能;按d选择低音,按z选择中意,按g选择高音。1.2设计思路

5、电子琴的设计实际上就是要设计一个程序,能够通过该程序控制PC机内扬声器的发声规律,按下相应的按键后,扬声器能发出指定频率的声音。PC机内的扬声器是通过并行接口芯片8255和定时芯片8253来控制发音的,其电路连接方式如下图所示。图1 PC机内扬声器控制电路由图可知,扬声器是由8253通道2产生的方波信号和8255的PB1 相与后驱动发声的,且通道2的门信号由8255的PB0提供,要想让扬声器发声,PB0和PB1必须同时为高电平,因此,可以通过对8255的PB0和PB1的设置来控制扬声器的开通和关断,而其发音频率可以通过对8253通道2的计数初值的设置来控制。所设计程序的任务就是要通过对按键的判

6、断来设置8255的PB0和PB1输出电平的高低,以及8253通道2计数初值的设置。计数初值N=时钟频率/音阶频率.各音阶的频率如下表所示。表1 各音符频率表音符1234567频率(低)131147165175196220247频率(中)262294330349392440494频率(高)5245886606987848809882硬件部分工作原理2.1 8255工作原理8255的内部结构图如图2所示,它有3个数据端口,分为两组,A组由A口和C口高四位组成,B组由B口和C口低四位组成。其方式控制字如图3所示。图2 8255内部结构图PC机内8255的A口,B口,C口和控制口的端口地址分别为:60

7、H,61H,62H,63H。2.2 8253工作原理8253芯片中有3个计数通道,称为通道0,1,2,它们与外部电路相连的信号线有3根:CLK,GATE,OUT,CLK是脉冲输入端,GATE是门控信号,OUT是输出信号,计数器工作在减1状态。其内部结构图和方式控制字格式如图4,图5所示。其中当计数器工作在方式3时,输出信号为方波信号。图4 8253内部结构图D7D6D5D4D3D2D1D0图5 8253控制字格式PC机内8253的通道0,通道1,通道2,控制口的端口地址分别为:40H,41H,42,43H。因为扬声器是由通道2来控制的,故应选择通道2,工作方式选为方式3,输出的信号则为方波信号

8、。3程序流程图3.1主程序流程图 主程序的流程图如下图所示:图6 主程序流程图3.2演奏子程序流程图当按键为p为时,调用音乐播放子程序,音乐播放子程序的流程图如下图所示。图7 音乐播放子程序流程图3.3 音乐播放子程序流程图 演奏时,通过判断按键为1或2来调用音乐播放子程序1或2,音乐播放子程序流程图如图8所示。图8 音乐播放子程序流程图3.4弹奏子程序流程图 当按键为1-8时,调用演奏子程序,演奏子程序的流程图如下图所示:图9 演奏子程序流程图3.5 发音子程序流程图在弹奏和演奏时都需调用发音子程序,发音子程序的作用是控制扬声器的发音,其流程图如下:图10 发音子程序流程图4 各部分功能实现

9、说明4.1 发音部分功能实现由更件的连接形式可知,扬声器的开断是由8255的PB0和PB1以及8253通道2同时控制的,PB0和PB1同时为高电平时,扬声器开,有一个为低电平时,扬声器关断,又知8255 B口地址为61H,8253通道2地址为42H,控制口地址为43H。具体程序编写如下。 8253初始化程序段:mov al,10110110b ;选择8253的通道2,并设置为工作方式3out 43h,almov ax,bxout 42h,al ;将计数初值的低8位写入计数通道mov al,ahout 42h,al ;将计数初值的高8位写入计数通道开扬声器程序段:in al,61h ;读入B口数

10、据or al,03h ;将PB0 和PB1置1out 61h,al ;将设置好的数据送回B口关扬声器程序段:in al,61h ;读入B口数据 and al,0fch ;将PB0 和PB1置0out 61h,a ;将设置好的数据送回B口4.2 变调功能的实现 扬声器发音的频率是由8253产生方波的频率决定的,而方波频率又是由通道的计数初值来决定的,因此可以通过改变通道的计数初值来实现变调功能。计数初值N=时钟频率/音阶频率,时钟频率为1.19318MHZ=1234DCH,可以将相应音调对应的时钟频率存入内存单元,当选择相应的音调时,计算计数初值时,采用对应的时钟频率值,具体程序如下。 cmp

11、al,d ;为d则选择低音 jne j1 mov num2,50 jmp choice j1:cmp al,z ;为z则选择中音jne j2 mov num2,12h jmp choice j2:cmp al,g ;为g则选择高音 jne loop0mov num2,06h其中,num1和num2中存放的是时钟频率值,num1中固定为34DCH,选择低音时,num2值设为50,中音时设为12H,高音时设为06H。计算计数初值程序如下:mov ax,num1mov dx,num2div 音符频率通过这样的设置,即可实现电子琴的变调功能。4.3 弹奏功能的实现当按键为数字1-8时,选择弹奏功能,通

12、过对按键的判断,求得其偏移地址,然后通过查表得其相应频率值,再由上述计算计数初值的方法求得计数初值,然后将计数初值送人8253的通道2,最后调用发音子程序即实现弹奏功能。具体程序段如下:sub al,31h ;求偏移量 shl al,1 mov bl,al ;保存偏移量 mov bh,0 mov ax,num1 ;计算计数初值 mov dx,num2 div word ptrtab+bx mov bx,ax ;保存计数初值4.3 演奏功能的实现4.3.1 歌曲选择功能实现当按键为p时,选择演奏功能,播放预存的音乐,由于预存了两首歌曲,因此需进行选择,按下p后,显示输入提示信息,按1或2选择对应

13、的歌曲,然后调用相应的音乐播放子程序,播放完后显示输入提示信息,按q退出,按c继续。具体程序实现如下:loop2: mov dx,offset mesg1 ;显示输入提示信息mov ah,09hint 21h mov ah,07h ;从键盘读入一个字符int 21hcmp al,q ;为q则退出je choicecmp al,1 ;为1则选择歌曲1jne next1 call music1jmp loop3next1:cmp al,2 ;为2则选择歌曲2jne loop2 ;不为q,1,2则重新选择call music2loop3:mov dx,offset mesg2 ;播放完后显示输入提示

14、信息 mov ah,09h int 21hmov ah,7 ;从键盘读入一个字符int 21hcmp al,q ;为q则返回je choicecmp al,c ;为c则继续播放je loop2jmp loop34.3.2 音乐播放功能实现 选择歌曲后,调用对应的音乐播放子程序,音乐播放需用到循环结构,首先将计数器清零,接着计数器自增1,求得偏移量,然后通过查表的到相应的频率,再计算计数初值,将计数初值送人8253计数通道,调用发音子程序,若计数器的值大于歌曲长度,则返回。具体程序段如下。 mov cl,0 ;将计数器清零ad:inc cl ;计数器值自增1cmp cl,31 ;计数器值若大于歌

15、曲长度,则返回je returnmov al,clsub al,1 ;求偏移量shl al,1mov bl,al ;保存偏移量mov bh,0mov ax,num1 ;计算计数初值mov dx,num2div word ptrsong2+bxmov bx,axcall speaker ;调用发音子程序jmp ad5 程序运行结果运行程序后,显示如下界面,等待输入字符。图11 程序运行结果图1 按提示输入字符,按q则退出,按d选择低音,按z选择中音,按g选择高音,选择音调后,显示如下界面:图12 程序运行结果图2等待输入字符,按q则退出,按p则演奏,按数字1-8则弹奏。按下p后,程序运行如下:图

16、13 程序运行结果图3按提示输入字符,按下q则返回,按下1或2进行歌曲选择,歌曲播放完后程序运行如下:图14 程序运行结果图4按提示按下键盘,若按下q,则推出,若按下c,则继续播放歌曲。下面是按下c后的运行结果: 图15 程序运行结果图5结束语通过这次课程设计,我从中学到了许多从课本上学不到的东西,锻炼了自己编程的能力,最后程序运行时能够实现目标,我感到很有成就感,从中也获得了很多乐趣,当然,最重要的是加深了我对课本理论知识的理解。当刚看到这个课设题目时,我感到无从下手,因为我都不知道PC机的内部具体结构,从理论课上只是了解了CPU的结构和工作原理,以及几个接口芯片的工作原理,还有汇编语言的一

17、些基本指令。但我没有被吓到,我冷静下来思考后,发现其本质就是控制PC机内扬声器的发音,通过查阅资料我了解了PC机内扬声器的电路连接形式,发现它是由接口芯片8255和8253共同控制的,8255的PB0作为8253通道2的门信号,而8255的PB1和8253通道2的输出相与后的信号作为扬声器的驱动信号,了解了其内部接线方式后,思路也就有了,要想让扬声器发声,8255的PB0和PB1必须同时为高电平,其中之一为低电平时,扬声器就不能发声,而发声的音调则可通过改变8253的计数初值来实现,接下来的任务就是通过编程来控制8255和8253,从而间接地控制扬声器的发声规律,而8255和8253这两个接口

18、芯片在理论课上都已介绍过,对其工作原理和编程方法都有一定的了解,看到这些熟悉的内容时,我淡定了很多。有了思路之后,我并没有急着写程序,因为我怀疑是不是每台PC机的扬声器接线方式都是这样的,所以我开始只编了一段控制扬声器发音的程序,来看看程序运行时扬声器到底发不发音,结果发声了,这让我很惊喜,也很有动力,更加激发了我的兴趣,接下来我就开始编写实现指定功能的程序了,首先是最简单的弹奏功能,通过对按键的判断来发出相应频率的声音,因为要判断按键,所以很自然地就想到了CMP指令,在计算计数初值时,因为要用到相应音符的频率,所以需要将按键转换为音符的频率,我开始想用课本上常见的XLAT换码指令,但AL存放

19、的数最大为128,很明显容量不够,于是我采用了基址+变址的寻址方法,在编程的过程中,由于要程序实现多个功能,所以用子程序的结构会比较方便,需要完成某个功能时,只需调用相应子程序就可以了,这样会使得程序的结构清楚明了;在开扬声器和关扬声器之间需要一定的延时,当把计数器置为0ffffh时,延时还是显得太短,于是延时我采用了AX和CX相配合的方式,使得延时达到预期的目的;在完成基本功能后,我还试着加上一些附加功能,比如变调,录音,通过我的不断尝试,终于把变调功能实现了,但录音功能没能像预期的那样。总之,这次课程设计让我学到了许多从课本上学不到的知识,加深了对理论知识的理解,激发了我对汇编语言的兴趣。

20、上理论课时,只是老师讲,我们听,那些指令让我感到很枯燥,因为不知道它到底有什么作用,而这次课程设计刚好把这些指令应用到了实际中来,加深了对各种指令功能的理解,最后功能实现时,感到很有成就感,觉得汇编语言很神奇,激发了我对它的兴趣。参考文献1 彭虎,周佩玲.微机原理与接口技术(第二版).电子工业出版社,20102 陈慧杰. 计算机扬声器发声的控制. 内蒙古民族大学出版社,20013 Peter Abel著,沈美明等译. IBM PC汇编语言设计程序. 人民邮电出版社,20024 冯继超.微机原理实验指导书.武汉理工大学出版社,2010附录 程序清单data segmentmesg db pres

21、s q to quit,press d or z or h to chose yin diao,0ah,0dh,$mesg1 db press q to return,press 1 or 2 to chose music,0ah,0dh,$mesg2 db press q to return,press c to continue,0ah,0dh,$mesg3 db press q to return,press p to play music,press 18 to hand play,0ah,0dh,$ num1 dw 34dchnum2 dw 12htab dw 262,294,330

22、,347,392,440,494,524 song1 dw 262,294,330,262,262,294,330,262 dw 330,347,392,330,347,392,392,440 dw 392,347,330,262,392,440,392,347 dw 330,262,392,262,392,392,262,392;两只老虎 song2 dw 330,330,347,392,392,347,330,294 dw 262,262,294,330,330,294,294,330 dw 330,347,392,392,347,330,294,262 dw 262,294,330,29

23、4,262,262 ;欢乐颂 data endscode segment assume cs:code,ds:datastart:mov ax,data mov ds,axloop0:mov dx,offset mesg ;显示输入提示信息 mov ah,09h int 21loop1:mov ah,07h ;读入字符 int 21h cmp al,q ;为q则退出 je done cmp al,d ;为d,选择低音 jne j1 mov num2,50 jmp choice j1:cmp al,z ;为z选择中音 jne j2 mov num2,12h jmp choice j2:cmp a

24、l,g ;为g选择高音 jne loop0 mov num2,06hchoice:mov dx,offset mesg3 mov ah,09h int 21h put1:mov ah,07h int 21h cmp al,q ;为q则返回 je loop0 cmp al,p ;为p选择演奏 jne next call play jmp put1next: cmp al,1 ;为1-8,选择弹奏 jl loop1 cmp al,8 jg put1 call hand jmp put1hand proc near ;弹奏子程序 sub al,31h shl al,1 mov bl,al mov b

25、h,0 mov ax,num1 mov dx,num2 div word ptrtab+bx mov bx,ax call speaker rethand endpplay proc near ;演奏子程序loop2: mov dx,offset mesg1 mov ah,09h int 21h mov ah,07h ;读入字符 int 21h cmp al,q ;为q则返回 je choice cmp al,1 ;为1,播放歌曲1 jne next1 call music1 jmp loop3next1:cmp al,2 ;为2,播放歌曲2 jne loop2 call music2loop

26、3:mov dx,offset mesg2 mov ah,09h int 21h mov ah,7 ;读入字符 int 21h cmp al,q ;为q则退出 je choice cmp al,c ;为c则继续 je loop2 jmp loop3 retplay endpmusic1 proc near ;音乐1播放子程序 mov cl,0 ad:inc cl cmp cl,33 je return mov al,cl sub al,1 ;取偏移量 shl al,1 mov bl,al ;保存偏移量 mov bh,0 mov ax,num1 ;计算计数初值 mov dx,num2 div word ptrsong1+bx mov bx

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

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