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