钢琴模拟程序.docx

上传人:b****2 文档编号:1074127 上传时间:2022-10-16 格式:DOCX 页数:22 大小:111.53KB
下载 相关 举报
钢琴模拟程序.docx_第1页
第1页 / 共22页
钢琴模拟程序.docx_第2页
第2页 / 共22页
钢琴模拟程序.docx_第3页
第3页 / 共22页
钢琴模拟程序.docx_第4页
第4页 / 共22页
钢琴模拟程序.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

钢琴模拟程序.docx

《钢琴模拟程序.docx》由会员分享,可在线阅读,更多相关《钢琴模拟程序.docx(22页珍藏版)》请在冰豆网上搜索。

钢琴模拟程序.docx

钢琴模拟程序

 

学号:

05

课程设计

 

题目

学院

专业

班级

姓名

指导教师

 

2013

1

9

课程设计任务书

学生姓名:

专业班级:

电气1107

指导教师:

陈静工作单位:

自动化学院

题目:

钢琴模拟程序设计

 

要求完成的主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

1.使用汇编语言设计一个弹奏程序,程序运行时使PC机成为一架可弹奏的“钢琴”。

2.屏幕显示钢琴图像;

3.当按下数字1-8时,依次发出1,2,3,4,5,6,7,i八个音调;按下CTRL-C则退出“钢琴”状态。

4.变调:

按下键“U”后,再弹奏和演奏时琴键相应的音符频率变高;按下键“D”后,再弹奏和演奏时琴键相应的音符频率变低;

5.撰写课程设计说明书。

内容包括:

摘要、目录、正文、参考文献、附录(程序清单)。

正文部分包括:

设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。

时间安排:

12月26日-----12月28日查阅资料及方案设计

12月29日-----1月2日编程

1月3日-----1月7日调试程序

1月8日-----1月9日撰写课程设计报告

 

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

本科生课程设计成绩评定表

摘要

汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。

汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。

高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。

在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。

而此次的《微机原理与接口技术(基于16位机)》的课程设计正是利用这个学期所学的汇编语言来设计一个键盘钢琴的应用程序,要求该汇编语言程序能实现键盘钢琴的功能,就是在键盘上按下自定义的按键之后,可以从主板的蜂鸣器上发出一定频率的音调,而这些音调的频率都是相应音阶的特征频率,故发出的声正好就是音乐的各个音阶声调。

通过这个应用程序,按照音乐的谱子连续地按下相应按键,就可以像钢琴那样发出音乐来,但是局限于扬声器的原因,所发出的音乐没有真正的钢琴那样美妙。

但是现在的一些键盘钢琴的软件已经能驱动声卡,来获得更好更逼真的钢琴音乐效果了。

关键词:

汇编接口钢琴模拟

 

1.设计意义

键盘钢琴,电脑键盘代替钢琴键演奏钢琴乐曲。

最原始、也是最流行的版本,音符以ABCDEGF为编排。

让不懂音乐的网友可以快速上手,其体积小,简单方便、易传播,因此在网上普及率最高。

键盘钢琴让人可以在闲暇时刻,可以小小地娱乐一下,增加生活的乐趣。

由于一架钢琴过于昂贵,对于一般的普通工薪阶层的人来说,还是很难接触到钢琴的,而键盘钢琴的出现正好让那些业余爱好者,既满足的对钢琴音乐艺术的追求,也更廉价和便捷。

对于初学音乐的人来说,这样的键盘钢琴软件更是训练的好助手,可以帮助你迅速熟悉各音阶音调和旋律节奏。

因此,这样的软件也很多版本,有专业版,也有简单的Flash版,当然也有此次课设要求设计的简陋版。

专业版能提供多种乐器音色、录放功能、音符显示。

不太好的地方是键盘要按下去才发音,没有延时,弹起来不太就手。

Flash版音色也比较好,提供了多键位,也可以自定义键位。

2.设计内容及其设计要求

1.使用汇编语言设计一个弹奏程序,程序运行时使PC机成为一架可弹奏的“钢琴”;

2.屏幕显示钢琴图像;

3.当按下数字1-8时,依次发出1,2,3,4,5,6,7,i八个音调;按下CTRL-C则退出“钢琴”状态;

4.变调:

按下键“U”后,再弹奏和奏时琴键相应的音符频率变高;按下键“D”后,再弹奏和演奏时琴键相应的音符频率变低。

3.总体方案论证

3.1按键与音调频率值的对应

设计汇编语言程序,要实现键盘钢琴,首先是按键的自定义设计,因为题中要求设计的按键音调有8个,并且按u和d可以设置升降调,经上网查找资料,设定钢琴频率如表1-1所示,其中设置了7个倍频,可用u和d来调整倍频数。

表1-1音调频率与倍频的对应关系

倍频数

1

2

3

4

5

6

7

i

1

65

73

82

87

98

110

123

130

2

130

146

164

174

196

220

246

260

3

260

292

328

348

392

440

492

520

4

520

584

656

696

784

880

984

1040

5

1040

1168

1312

1392

1568

1760

1968

2080

5

2080

2336

2624

2784

3136

3520

3936

4160

7

4160

4672

5248

5568

6272

7040

7872

8320

相邻倍频数音调频率之间有着两倍的关系,这样就很方便数据的储存了,只需要将其中一个倍频的频率值存储下了,再进行二倍关系的换算可得到所需要的频率,实际调试过程中最高设置到7倍频比较合适。

程序数据区可存储一倍频的数据:

FREQDB65,73,82,87,98,110,123,130

这样,不仅节省了存储空间,而且降低了存储数据的复杂程度。

倍频数的设置

在数据区设置一个倍频数并且使其初始倍率为1

DIAODB1

在程序中通过u或d的输入可以来修改DIAO中的数据,从而改变并且保持倍频数。

设定好倍频数之后,键盘输入1到8的数字,将输入的ascii码转换成一倍频数据区的所对应的偏移地址,就可以用查表的方法取出所需的一倍频频率,然后在乘上已经设置好的倍频数,即可得到所需要输出的音频。

3.2扬声器的驱动分析

所用该程序主要是驱动电脑主板上的扬声器,根据音阶音调不同的频率值,来是扬声器发出不同的声音,从而产生想弹钢琴一样的感觉,当然音质是不能相提并论的。

(在这里需要说明的是,现在大多数笔记本主板上已没有这个扬声器,但是台式机大多还是有的,在台式机上的效果更好点。

在电路上如下图3-1所示:

 

8255(PB1)

 

图3.18253的电路连接图

在PC/XT/AT家族中,计时器芯片的3个通道都用其专门的功能,通道2是用来控制计算机的扬声器的声音频率的。

通道2用于产生频率信号,故工作方式在方式3,计数值为6A4H=1190,方波输出频率为1.19MHz/1190=1KHz,此信号决定了扬声器的声调,而通道2的控制字则为0B6H,1.19M约等于十六进制12348CH。

由图3-1可知8253的通道2计数由8255A的PB0控制,当PB0输出为高电平的时候,是门GATE2为高电平。

此时,8253的通道2允许计数,故通道2的输出方波受PB0控制,从而控制扬声器的音调高低。

通道2的输出能否对扬声器产生持续控制还取决于8255A的PB1。

当PB1为“0”时,OUT2不能通过“与门”;反之则可通过“与门”控制扬声器。

所以,扬声器发音时间的长短取决于8255A的PB1信号。

另外,CPU通过8255A的C口,得知5283通道2的状态和扬声器驱动器的状态。

由上可知,需要扬声器正常发声,需要8253和8255A的协同工作,而8253的控制字在网上查的为43H,则同过下面的程序来初始化8253。

MOVAL,0B6H

OUT43H,AL

而通道2的端口地址为42H,由于N值一般计算得出都大于255,故需要一个字的写入,而又因为8253只有八位数据线,故字的写入需要两次,一般将N值直接给AX然后通过下面的程序即可完成。

OUT42H,AL

MOVAL,AH

OUT42H,AL

而8255A能控制8253和扬声器,但是只要PB0和PB1同时为高调平,扬声器就为开,则对8255A的控制就是在对扬声器的控制,在网上得知8255A的B口地址为61H,则可以通过下面的程序实现扬声器的开与关。

INAL,61H

ORAL,3;可以保证PB0和PB1同时为高调平

OUT61H,AL;打开扬声器

MOVAL,AH

ANDAL,0FCH;可以保证PB0和PB1同时为低调平

OUT61H,AL;关闭扬声器

3.3发声时间

因为只要通过8255A将扬声器打开而不关闭,那么只要8253正常工作,扬声器就会一直发声,需要发声时间多长,只需要写一个延时子程序即可,利用LOOP和跳转指令就可以得到一个双循环程序,在根据指令时间依次乘以LOOP循环的次和跳转指令的跳转次数就可以得到想要的延时时间。

子程序循环完毕在将扬声器关闭即可。

延时子程序时间的长短就是发声时间的长短。

 

4.程序设计

4.1主程序设计及其流程图

 

 

图4.1主程序的流程图

如图4-1,主程序的主要任务:

1)如果输入的KEY为“ESC”时,直接跳转至退出EXIT处;

2)如果出输入按键为u或d时,改变倍频并且返回输入;

3)如果输入为1到8时,发出相对应的频率的声音并返回输入;

4)如果输入为其他则直接返回输入。

 

4.2发声子程序SOUND

图4.2子程序SOUND流程图

子程序SOUND流程图如图3-3所示,其主要任务是完成发声,在该子程序中,分两次向通道2端口42H写入计数初值N的程序语句为:

OUT42H,AL

MOVAL,AH

OUT42H,AL

打开和关闭扬声器的程序为:

INAL,61H

ORAL,3;可以保证PB0和PB1同时为高调平

OUT61H,AL;打开扬声器

MOVAL,AH

ANDAL,0FCH;可以保证PB0和PB1同时为低调平

OUT61H,AL;关闭扬声器

 

5.结果分析

5.1程序调试

按上面的思路和流程图写好程序后,对程序进行调试:

在选择基频的时候,最初选择的是网上给的数据:

131,147,165,175,196,220,247,262,而在写好程序之后运行发现,输入1到7或u/d是,程序正常运行,但是一旦输入为8的时候,程序就会出现如图5-1所示错误,经过debug过程分析后,发现262超过了db类型的范围。

解决这个问题,最初的方案是把类型从db换成dw,但是认为还要修改后面的程序,所以选择了将基频存储区的数据降到原来的一半运行之后成功解决。

图5.1调试图

 

5.2结果记录及分析

调试之后,运行结果和课题的设计要求完全相符合。

开始运行程序,能看到如下图5-2所示的“Welcometo"PianoofKeyboard"”程序运行开始提示语和以及如下所示操作提示语,

图5-2操作界面图

进入操作界面之后,按下1到8键,pc机会发出一倍频的所对应的音调;每按下一次u键,倍频自动加1,直到倍频为7时,按下u键,倍频保持为7不变,此时按下1到8键,便会发出对应倍频对应按键的音调;每按下一次d键,倍频减1直到倍频等于1,此时按下1到8键,将发出对应倍频对应音调;当按下出esc、u、d、1到8以外的按键是,界面保持不变。

按esc键结束程序时,出现如图5-3所示的结束语。

图5-3结束界面图

 

结束语

通过这两周的硬

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1