键盘钢琴汇编语言课程设计分析(DOC 24页)

上传人:cl****1 文档编号:470996315 上传时间:2023-07-19 格式:DOC 页数:24 大小:233KB
返回 下载 相关 举报
键盘钢琴汇编语言课程设计分析(DOC 24页)_第1页
第1页 / 共24页
键盘钢琴汇编语言课程设计分析(DOC 24页)_第2页
第2页 / 共24页
键盘钢琴汇编语言课程设计分析(DOC 24页)_第3页
第3页 / 共24页
键盘钢琴汇编语言课程设计分析(DOC 24页)_第4页
第4页 / 共24页
键盘钢琴汇编语言课程设计分析(DOC 24页)_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《键盘钢琴汇编语言课程设计分析(DOC 24页)》由会员分享,可在线阅读,更多相关《键盘钢琴汇编语言课程设计分析(DOC 24页)(24页珍藏版)》请在金锄头文库上搜索。

1、前 言汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。而此次的微机原理与接口技术(基于16位机)的课程设计正是利用这个学期所学的汇编语言来设计一个键盘钢琴的应用程序,要求该汇编语言程序能实现键盘钢琴的功能,就是在键盘上按下自定义的按键之后,可以从主板的蜂鸣器上发出

2、一定频率的音调,而这些音调的频率都是相应音阶的特征频率,故发出的声正好就是音乐的各个音阶声调。通过这个应用程序,按照音乐的谱子连续地按下相应按键,就可以像钢琴那样发出音乐来,但是局限于扬声器的原因,所发出的音乐没有真正的钢琴那样美妙。但是现在的一些键盘钢琴的软件已经能驱动声卡,来获得更好更逼真的钢琴音乐效果了。中文摘要采用16 位微处理器 8086 CPU 以及86 系列微型计算机的指令系统; 软件设计平台为多功能微型计算机实验软件MFS 中的微机原理实验集成环境MF2KP,仿真设计平台为Proteus 软件。 设计汇编语言程序,实现键盘钢琴功能,具体功能要求如下: (1)在键盘上自定义若干键

3、对应钢琴键; (2)单击钢琴键,计算机发出相应音阶,发声时间自定义;(3)单击”ESC”键退出程序。 关键字: 16位微处理器 集成环境 汇编语言 键盘钢琴 目 录1 设计意义及要求11.1 设计意义11.2 设计要求12 总体方案论证22.1按键与音调频率值的对应22.2 扬声器的驱动分析42.3 发声时间53 程序设计63.1 主程序设计及其流程图63.2 子程序设计及其流程图73.2.1 计算频率值的子程序FIFRE73.2.2 发声子程序SOUND83.2.3延时子程序DELAY94 结果分析104.1 程序调试与改进104.2 结果记录及分析11心得与体会12参考文献13致 谢14附

4、录 程序代码15III1 设计意义及要求1.1 设计意义键盘钢琴,电脑键盘代替钢琴键演奏钢琴乐曲。最原始、也是最流行的版本,音符以ABCDEGF为编排。让不懂音乐的网友可以快速上手,其体积小,简单方便、易传播,因此在网上普及率最高。键盘钢琴让人可以在闲暇时刻,可以小小地娱乐一下,增加生活的乐趣。由于一架钢琴过于昂贵,对于一般的普通工薪阶层的人来说,还是很难接触到钢琴的,而键盘钢琴的出现正好让那些业余爱好者,既满足的对钢琴音乐艺术的追求,也更廉价和便捷。对于初学音乐的人来说,这样的键盘钢琴软件更是训练的好助手,可以帮助你迅速熟悉各音阶音调和旋律节奏。因此,这样的软件也很多版本,有专业版,也有简单

5、的Flash版,当然也有此次课设要求设计的简陋版。专业版能提供多种乐器音色、录放功能、音符显示。不太好的地方是键盘要按下去才发音,没有延时,弹起来不太就手。Flash版音色也比较好,提供了多键位,也可以自定义键位。1.2 设计要求设计汇编语言程序,实现键盘钢琴功能,具体要完成的设计任务如下:(1) 在键盘上自定义若干键对应着钢琴键;(2) 单击钢琴键,计算机发出相应的音阶,发声时间自定义;(3) 单击“ESC”键退出程序音阶与频率的对应关系如下所示:音符45671234567频率/Hz1751962202472622943303493924404945235876592 总体方案论证2.1按键

6、与音调频率值的对应设计此汇编语言程序,要实现键盘钢琴,首先是按键的自定义设计,因为题中要求设计的按键音调音阶有十四个,但是从网上查资料得知,各音阶与其相应频率有如表1-1所示的关系。表1-1 音阶与频率的对应关系 单位:HzA11022044088017603520B12324749498819753950C131262523104620934186D147294587117523494698E165330659131826375277F175349698139727945587G196392784156831366271从表中可知:高低音之间有着大约两倍的关系,这样就很方便数据的储存了,只需

7、要将其中一个音度的频率值存储下了,再进行二倍关系的换算即可得到倍低音、低音、中音、高音、倍高音五种音度的音调频率值。因为题目中主要是对低、中、高音的要求,在这里就以低音为基准存储数据值和换算其他音调频率值,由表1-1中得知低音音符1 2 3 4 5 6 7的音调频率分别为131、147、165、175、196、220、247。其中,中音各音调的频率是相应低音音调频率的两倍, 高音各音调频率是低音的四倍的。又因为低音的频率值最大为247,正好小于一个无符字节数值的最大值255,因此,只需要在程序的数据区内安排七个字节来存放频率数据,即:FREQ DB 131,147,165,175,196,22

8、0,247这样,不仅节省了存储空间,而且降低了存储数据的复杂程度。考虑到字母键盘一共也只用26个,就不对所有音调都进行字母键盘的按键定义了,只补齐题目中所缺的高音和低音,共21个音阶。则可以按如下表1-2中的对应关系,设置21个按键分别对应着低、中、高三种音度的各音调的频率值。由于字母所对应的ASCII码并不是连续的,因此在这里就将其的ASCII码存储到数据区,然后根据变址寻址的方式音度音名1234567低音频率/Hz自定义按键131147165175196220247QWERTYU中音频率/Hz自定义按键131*2147*2165*2175*2196*2220*2247*2ASDFGHJ高音

9、频率/Hz自定义按键131*4147*4165*4175*4196*4220*4247*4ZXCVBNM表1-2 音阶频率与自定义按键的对应表对字母按键的ASCII码进行地址编码,可以将字母的ASCII码的按表1-2的顺序存放,即:KEYS DB QWERTYU , ASDFGHJ , ZXCVBNM这样看来,就是将这些ASCII码值分出三类,分别为低音类、中音类、高音类。根据输入KEY的ASCII码值利用一个21次的LOOP循环就可以找到对应的偏移地址,再将所得的偏移地址减去首地址的偏移地址得到该KEY的地址相对值,再把该相对值与6和13大小判断偏移地址的所属类别(小于等于6为低音类,大于6

10、小于等于13为中音类,大于13为高音类)。知道KEY的所属类别,就知道基准频率值应该乘以多大的倍数才是该KEY的真正的频率值,低音类倍数为1,中音类倍数为2,高音类倍数为4。接下来还要确定是哪个基准频率值,由于已经知道所属类别,如果是低音类则就是地址相对值,如果是中音类,则地址相对值要减去7,显然高音类则减去14,就得到了一个0至6的编码,再由换码指令XLAT对频率数据FREQ进行换码,可以很快得到该KEY的对应的基准频率值。最后是将得到的基准频率值乘以得到的类别倍数,就得到最后想要的输入KEY的音调频率值。举例如下:输入按键KEY的ASCII码值为“D”,其ASCII码是44H,在一个21次

11、的LOOP循环下,可以得到数据位44H的偏移地址DI,在将该偏移地址DI-首地址的偏移地址KEYS=偏移地址的相对值9。因为6913属于中音类,基准频率值的倍数为2。因为属于中音类KEY“D”编码为9-7=2,在换码可以知道,“D”对应的基准频率值为165,故最后得到“D”的频率值为165*2=330Hz。因此,用此算法得到各个按键的频率值是可行的。不仅节省了存储空间,而且降低了存储数据的复杂程度,在程序编写上可以将这一段写成子程序,更加使得程序简洁明了。2.2 扬声器的驱动分析该程序主要是驱动电脑主板上的扬声器,根据音阶音调不同的频率值,来是扬声器发出不同的声音,从而产生想弹钢琴一样的感觉,

12、当然音质是不能相提并论的。(在这里需要说明的是,现在大多数笔记本主板上已没有这个扬声器,但是台式机大多还是有的,在台式机上的效果更好点。)在电路上如下图2-1所示:8255(PB1)图2-1 8253的电路连接图在PC/XT/AT家族中,计时器芯片的3个通道都用其专门的功能,通道2是用来控制计算机的扬声器的声音频率的。通道2用于产生频率信号,故工作方式在方式3,计数值为6A4H=1190,方波输出频率为1.19MHz/1190=1KHz,此信号决定了扬声器的声调,而通道2的控制字则为0B6H,1.19M约等于十六进制12348CH。由图1-1可知8253的通道2计数由8255A的PB0控制,当

13、PB0输出为高电平的时候,是门GATE2为高电平。此时,8253的通道2允许计数,故通道2的输出方波受PB0控制,从而控制扬声器的音调高低。通道2的输出能否对扬声器产生持续控制还取决于8255A的PB1。当PB1为“0”时,OUT2不能通过“与门”;反之则可通过“与门”控制扬声器。所以,扬声器发音时间的长短取决于8255A的PB1信号。另外,CPU通过8255A的C口,得知5283通道2的状态和扬声器驱动器的状态。由上可知,需要扬声器正常发声,需要8253和8255A的协同工作,而8253的控制字在网上查的为43H,则同过下面的程序来初始化8253MOV AL,0B6HOUT 43H,AL 而

14、通道2的端口地址为42H,由于N值一般计算得出都大于255,故需要一个字的写入,而又因为 8253只有八位数据线,故字的写入需要两次,一般将N值直接给AX然后通过下面的程序即可完成。OUT 42H,ALMOV AL,AH OUT 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 ;关闭扬声器2.3 发声时间因为只要通过8255A将扬声器

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号