《钢琴模拟程序》由会员分享,可在线阅读,更多相关《钢琴模拟程序(22页珍藏版)》请在金锄头文库上搜索。
1、学学 号号: 0121114440105 课课 程程 设设 计计 题题 目目 学学 院院 专专 业业 班班 级级 姓姓 名名 指导教师指导教师 2013 年1月9日 武汉理工大学计算机控制技术课程设计说明书 课程设计任务书课程设计任务书 学生姓名:学生姓名: 专业班级:专业班级: 电气电气 11071107 指导教师:指导教师: 陈陈 静静 工作单位:工作单位: 自动化学院自动化学院 题题 目目: : 钢琴模拟程序设计钢琴模拟程序设计 要求完成的主要任务: : (包括课程设计工作量及其技术要求,以及说明书撰写等 具体要求) 1使用汇编语言设计一个弹奏程序,程序运行时使 PC 机成为一架可弹奏的
2、“钢琴” 。; 2屏幕显示钢琴图像; 3当按下数字 1-8 时,依次发出 1,2,3,4,5,6,7,i 八个音调;按下 CTRL-C 则退出“钢琴”状态。 4. 变调:按下键“U”后,再弹奏和演奏时琴键相应的音符频率变高;按下键 “D”后,再弹奏和演奏时琴键相应的音符频率变低; 5撰写课程设计说明书。内容包括:摘要、目录、正文、参考文献、附录(程序清 单)。正文部分包括:设计任务及要求、方案比较及论证、软件设计说明(软件思想, 流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。 时间安排: 12 月 26 日- 12 月 28 日 查阅资料及方案设计 12 月 29
3、 日- 1 月 2 日 编程 1 月 3 日- 1 月 7 日 调试程序 1 月 8 日- 1 月 9 日 撰写课程设计报告 指导教师签名:指导教师签名: 年年 月月 日日 系主任(或责任教师)签名:系主任(或责任教师)签名: 年年 月月 日日 武汉理工大学计算机控制技术课程设计说明书 目 录 摘摘 要要 .1 1.1.设计意义设计意义 2 2.2.设计内容及其设计要求设计内容及其设计要求 2 3.3.总体方案论证总体方案论证 2 3.1 按键与音调频率值的对应 2 3.2 扬声器的驱动分析 3 3.3 发声时间.4 4.4.程序设计程序设计 5 4.1 主程序设计及其流程图 5 4.2 发声
4、子程序 SOUND.6 5 5 结果分析结果分析 .7 5.1 程序调试 7 5.2 结果记录及分析 8 结束语结束语 9 参考文献参考文献 .10 附录:程序代码附录:程序代码 .11 本科生课程设计成绩评定表本科生课程设计成绩评定表 武汉理工大学微机原理及接口技术课程设计说明书 1 摘 要 汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接 控制硬件的语言。汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇 编器”来把汇编语言原文件汇编成机器可执行的代码。 高级的汇编器如 MASM,TASM 等等为我们写汇编程序提供了很多类似于高级语言 的特征,比如结构化、
5、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向 汇编器的伪指令,已经类同于高级语言。而此次的微机原理与接口技术(基于 16 位机) 的课程设计正是利用这个学期所学的汇编语言来设计一个键盘钢琴的应用程序,要求 该汇编语言程序能实现键盘钢琴的功能,就是在键盘上按下自定义的按键之后,可以从 主板的蜂鸣器上发出一定频率的音调,而这些音调的频率都是相应音阶的特征频率,故 发出的声正好就是音乐的各个音阶声调。 通过这个应用程序,按照音乐的谱子连续地按下相应按键,就可以像钢琴那样发出 音乐来,但是局限于扬声器的原因,所发出的音乐没有真正的钢琴那样美妙。但是现在 的一些键盘钢琴的软件已经能驱动声卡,
6、来获得更好更逼真的钢琴音乐效果了。 关键词:汇编 接口 钢琴 模拟 武汉理工大学微机原理及接口技术课程设计说明书 2 1. 设计意义 键盘钢琴,电脑键盘代替钢琴键演奏钢琴乐曲。最原始、也是最流行的版本,音符 以 ABCDEGF 为编排。让不懂音乐的网友可以快速上手,其体积小,简单方便、易传播, 因此在网上普及率最高。 键盘钢琴让人可以在闲暇时刻,可以小小地娱乐一下,增加生活的乐趣。由于一架 钢琴过于昂贵,对于一般的普通工薪阶层的人来说,还是很难接触到钢琴的,而键盘钢 琴的出现正好让那些业余爱好者,既满足的对钢琴音乐艺术的追求,也更廉价和便捷。 对于初学音乐的人来说,这样的键盘钢琴软件更是训练的
7、好助手,可以帮助你迅速熟悉 各音阶音调和旋律节奏。因此,这样的软件也很多版本,有专业版,也有简单的 Flash 版, 当然也有此次课设要求设计的简陋版。专业版能提供多种乐器音色、录放功能、音符显 示。不太好的地方是键盘要按下去才发音,没有延时,弹起来不太就手。Flash 版音色也 比较好,提供了多键位,也可以自定义键位。 2. 设计内容及其设计要求 1使用汇编语言设计一个弹奏程序,程序运行时使 PC 机成为一架可弹奏的“钢琴” ; 2屏幕显示钢琴图像; 3当按下数字 1-8 时,依次发出 1,2,3,4,5,6,7,i 八个音调;按下 CTRL-C 则退出“钢琴”状态; 4. 变调:按下键“U
8、”后,再弹奏和奏时琴键相应的音符频率变高;按下键“D”后, 再弹奏和演奏时琴键相应的音符频率变低。 3. 总体方案论证 3.1按键与音调频率值的对应 设计汇编语言程序,要实现键盘钢琴,首先是按键的自定义设计,因为题中要求设计 的按键音调有 8 个,并且按 u 和 d 可以设置升降调,经上网查找资料,设定钢琴频率如 表 1-1 所示,其中设置了 7 个倍频,可用 u 和 d 来调整倍频数。 表 1-1 音调频率与倍频的对应关系 倍频数 1234567i 16573828798110123130 2130146164174196220246260 3260292328348392440492520
9、 45205846566967848809841040 510401168131213921568176019682080 520802336262427843136352039364160 741604672524855686272704078728320 相邻倍频数音调频率之间有着两倍的关系,这样就很方便数据的储存了,只需要将其 武汉理工大学微机原理及接口技术课程设计说明书 3 中一个倍频的频率值存储下了,再进行二倍关系的换算可得到所需要的频率,实际调试 过程中最高设置到 7 倍频比较合适。 程序数据区可存储一倍频的数据: FREQ DB 65,73,82,87,98,110,123,13
10、0 这样,不仅节省了存储空间,而且降低了存储数据的复杂程度。 倍频数的设置 在数据区设置一个倍频数并且使其初始倍率为 1 DIAO DB 1 在程序中通过 u 或 d 的输入可以来修改 DIAO 中的数据,从而改变并且保持倍频数。 设定好倍频数之后,键盘输入 1 到 8 的数字,将输入的 ascii 码转换成一倍频数据区 的所对应的偏移地址,就可以用查表的方法取出所需的一倍频频率,然后在乘上已经设 置好的倍频数,即可得到所需要输出的音频。 3.2扬声器的驱动分析 所用该程序主要是驱动电脑主板上的扬声器,根据音阶音调不同的频率值,来是扬声 器发出不同的声音,从而产生想弹钢琴一样的感觉,当然音质是
11、不能相提并论的。 (在这 里需要说明的是,现在大多数笔记本主板上已没有这个扬声器,但是台式机大多还是有 的,在台式机上的效果更好点。 ) 在电路上如下图 3-1 所示: 图 3.1 8253 的电路连接图 在 PC/XT/AT 家族中,计时器芯片的 3 个通道都用其专门的功能,通道 2 是用来控制 计算机的扬声器的声音频率的。通道 2 用于产生频率信号,故工作方式在方式 3,计数值 为 6A4H=1190,方波输出频率为 1.19MHz/1190=1KHz,此信号决定了扬声器的声调,而通 道 2 的控制字则为 0B6H,1.19M 约等于十六进制 12348CH。 由图 3-1 可知 8253
12、 的通道 2 计数由 8255A 的 PB0 控制,当 PB0 输出为高电平的时候, 是门 GATE2 为高电平。此时,8253 的通道 2 允许计数,故通道 2 的输出方波受 PB0 控 8255(PB1) 武汉理工大学微机原理及接口技术课程设计说明书 4 制,从而控制扬声器的音调高低。通道 2 的输出能否对扬声器产生持续控制还取决于 8255A 的 PB1。当 PB1 为“0”时,OUT2 不能通过“与门” ;反之则可通过“与门”控制 扬声器。所以,扬声器发音时间的长短取决于 8255A 的 PB1 信号。另外,CPU 通过 8255A 的 C 口,得知 5283 通道 2 的状态和扬声器
13、驱动器的状态。 由上可知,需要扬声器正常发声,需要 8253 和 8255A 的协同工作,而 8253 的控制字 在网上查的为 43H,则同过下面的程序来初始化 8253。 MOV AL, 0B6H OUT 43H, AL 而通道 2 的端口地址为 42H,由于 N 值一般计算得出都大于 255,故需要一个字的写 入,而又因为 8253 只有八位数据线,故字的写入需要两次,一般将 N 值直接给 AX 然后 通过下面的程序即可完成。 OUT 42H, AL MOV AL, AH OUT 42H, AL 而 8255A 能控制 8253 和扬声器,但是只要 PB0 和 PB1 同时为高调平,扬声器
14、就为开, 则对 8255A 的控制就是在对扬声器的控制,在网上得知 8255A 的 B 口地址为 61H,则可 以通过下面的程序实现扬声器的开与关。 IN AL, 61H OR AL,3 ;可以保证 PB0 和 PB1 同时为高调平 OUT 61H,AL ;打开扬声器 MOV AL, AH AND AL,0FCH ;可以保证 PB0 和 PB1 同时为低调平 OUT 61H,AL ;关闭扬声器 3.3 发声时间 因为只要通过 8255A 将扬声器打开而不关闭,那么只要 8253 正常工作,扬声器就会 一直发声,需要发声时间多长,只需要写一个延时子程序即可,利用 LOOP 和跳转指令 就可以得到
15、一个双循环程序,在根据指令时间依次乘以 LOOP 循环的次和跳转指令的跳 转次数就可以得到想要的延时时间。子程序循环完毕在将扬声器关闭即可。延时子程序 时间的长短就是发声时间的长短。 武汉理工大学微机原理及接口技术课程设计说明书 5 4. 程序设计 4.1主程序设计及其流程图 图 4.1 主程序的流程图 如图 4-1,主程序的主要任务: 1) 如果输入的 KEY 为“ESC”时,直接跳转至退出 EXIT 处; 2) 如果出输入按键为 u 或 d 时,改变倍频并且返回输入; 3) 如果输入为 1 到 8 时,发出相对应的频率的声音并返回输入; 4) 如果输入为其他则直接返回输入。 取频率发音 修
16、改倍频数 输入是否为 ESC 按键输入 数据初始化(KYES、FREQ、DIAO 等 显示提示信息 开始 结束 返回 dos 结束提示语 判断输入 是 u/d 1-8 其他 武汉理工大学微机原理及接口技术课程设计说明书 6 4.2发声子程序 SOUND 读取 8253 计数初值和音长 8253 置初值 开启与门和 8253GATE 延时 关闭与门和 8253GATE 返回 图 4.2 子程序 SOUND 流程图 子程序 SOUND 流程图如图 3-3 所示,其主要任务是完成发声,在该子程序中,分两 次向通道 2 端口 42H 写入计数初值 N 的程序语句为: OUT 42H,AL MOV AL,AH OUT 42H,AL