钢琴键盘演奏说明书_第1页
钢琴键盘演奏说明书_第2页
钢琴键盘演奏说明书_第3页
钢琴键盘演奏说明书_第4页
钢琴键盘演奏说明书_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、兰州理工大学技术工程学院2014年春季学期 汇编语言实训 课程设计题 目:_ 钢琴键盘演奏_ 专业班级:_2012级计算机科学与技术_姓 名:_ 韩国娟_ 学 号: 12730103 指导教师: 刘树群 成 绩:_ _摘要汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。此次的课程设计正是利用这个学期所学的汇编语言来设计一个键盘钢琴的应用程序,要求该汇编语言程序能实现键盘钢琴的功能,就是在键盘上按下自定义的按键之后,可以从主板的蜂鸣器上发出一定频率的

2、音调,而这些音调的频率都是相应音阶的特征频率,故发出的声正好就是音乐的各个音阶声调。通过这个应用程序,按照音乐的谱子连续的按下相应按键,就可以像钢琴那样发出音乐来,但是局限于扬声器的原因,所发出的音乐没有真正的钢琴那样美妙。但是现在的一些键盘钢琴的软件已经能驱动声卡,来获得更好更逼真的钢琴音乐效果了。关键字:汇编;键盘钢琴;音阶;声卡 Abstract The assembler language is a functional programming language, is using the computer all hardware features and can directly

3、control the hardware language.Assembly language, as a language, corresponding to the high-level language compiler, the need for a "assembler" to the assembly language original documents compiled into executable machine code. The course design is to use what they have learned this semester

4、of assembly language to design a keyboard piano application, asked the assembly language program can realize the function of the piano keyboard, is pressing the custom buttons on the keyboard, can a certain frequency from the main board of the buzzer tones, and the frequency of these tones are the c

5、orresponding characteristic frequency of the scale, so the sound from the right is the music of each tone scale. Through this application, in accordance with the music score of continuous press the corresponding button, you can play music like the piano, but limited to the cause of the loudspeaker,

6、the music has no real made by the piano so wonderful.But now some of the piano keyboard software can already drive sound card, to obtain a better and more realistic effect of piano music.Key words: assembly; keyboard piano; scales,;audio card 目录摘要1目录31系统分析41.1问题描述41.2任务目标41.3需求规定42系统总体设计62.1设计要求62.2

7、设计原理63详细设计83.1主程序流程图83.2暂停程序流程图93.3错误程序流程图104程序段落说明114.1初始化窗口114.2创建声音144.3对声卡的调用165程序调试运行175.1程序运行结果175.2测试结果分析186软件使用说明书197设计总结20参考文献21致 谢22附录231系统分析1.1问题描述 在windows环境下写一个程序,能够提供简单的用户图形界面,启动程序后进入该界面,用户界面由一行字母与数字构成。用户可以根据相应的程序进行一些功能上的选择,如1234567代表其钢琴键盘的音阶。当单击开始时,计算机将按照不同的功能发出不同的声音,此外,可以根据乐谱弹奏出不同的音乐

8、。 1.2任务目标 设计汇编语言程序,实现键盘钢琴功能,具体功能要求如下: 1>在键盘上自定义若干键对应钢琴键。 2>单击钢琴键,计算机发出相应音阶,发生时间自定义。 3>单击“ESC”键退出程序。 1.3需求规定表1.1 产品功能需求表功能1. 设置界面2. 运行出的界面可以可以扩大与缩小,并且可以随意移动3. 设置ESC键的功能,使其退出4. 设置相应键的音调、全音与半音5. 调用声卡的代码表1.2 用户界面需求表需求名称详细要求窗体界面友好人机交互,爱好者可以很方便进行操作支持声音可以弹奏出美妙的音乐界面大小能改变界面大小,满足需求表3 软硬件环境需求表需求名称详细要求

9、硬件要求Intel Pentium III 800/AMD A8以上处理器、512M以上内存支持标准网络协议的网卡系统平台Windows7/WinXP/Win2003 运行环境Windows 系列2系统总体设计2.1设计要求 目录从系统实现的功能上来看,键盘钢琴的设计主要为手动弹奏乐曲。手动弹奏乐曲是根据具体的硬件键盘设置了7个音符按键,3个高、中、低音模式切换键和1个功能转换键。 从系统硬件结构上来看,主要使用到52系列单片机、7个键输入电路、LED数码管显示电路、扬声器以及电源电路等等。将这些硬件电路有机地结合起来使之满足键盘钢琴设计的基本硬件要求。从系统软件设计角度来看,将键盘钢琴的设计

10、采用程序模块化设计方法,将程序分为主程序、键盘扫描程序模块、数码显示模块、转换控制模块、音乐产生模块等等。此外,采用程序设计思想,将中断定时方式与外部按键查询方式相结合,实现手动弹奏。2.2设计原理 从音乐产生原理方面来看,通过控制单片机的定时器的定时时间产生不同频率的音频脉冲,经放大后驱动扬声器发出不同音乐的声音。用软件延时来控制发音时间的长短,控制节拍。把音乐的音符和相应的节拍变换为定时常数和延时常数,作为数据表格存放在程序存储器中,由程序查表得到定时常数和延时常数,分别用来控制定时器产生的脉冲频率和发出音频脉冲的持续时间。对此次汇编语言,通过在图书馆、网络上收集资料,小组成员得到一致结论

11、用Windows平台下32位汇编为最佳选择。对钢琴键盘演奏项目计划划分为两个模块,分别为初始化设置和窗口函数相关模块、对相应键的操作模块。其中对声音的分配是先决条件。在该模块完成的基础上,初始化设置和窗口函数相关模块才能得以实现。各模块分配如下: 初始化设置和窗口函数相关模块:王超 对相应键的操作模块:韩国娟对初始化设置和窗口函数相关模块:该模块实现对全局变量的初始化,窗口函数则实现对窗口类的注册,生成窗口,以及对窗口事件的处理。其具体功能的实现是要用其他功能模块的子程序。该模块还需要实现窗口大小变换、窗口的随意移动等附加功能。3详细设计3.1主程序流程图由于此次课设程序较为复杂,包含多个跳转

12、和子程序。故在此使用将主程序流程图和子程序流程图分开叙述的方法,叙述如下:主程序运行后进入windows界面,首先输出提示字符。接着用户通过键盘单击所设置的按键,对其进行判断识别并作出相应处理:ESC时退出程序;SPACE时暂停程序主程序流程图如图3-1所示:开始 对8255、8253初始化输出提示字符串调用声卡 设置全音设置半音是1234567qwrty键吗?错误是空格吗?是ESC吗?输入字符返回主程序结束图3.1 主流程图NYYNNY暂停3.2暂停程序流程图当对输入字符判断为空格后,进入暂停子程序。换行后输出暂停信息,对8255进行清零使得扬声器停止工作。随后对下个输入字符进行判断,若为E

13、SC则退出整个程序;若为空格则重新进入正常工作状态;若为其他字符则等待下个字符的输入。流程图如图3.2所示。入口输入输出暂停信息停止发声Y是ESC吗?N返入口输入输出暂停信息停止发声是ESC吗程回主程序N输出字符是空格吗?Y出口图3.2 暂停程序流程图3.3错误程序流程图当对输入字符判断为空格、ESC、1234567qwrty以外的字符后,进入错误子程序。随后重新对输入字符进行判断。流程图如图2.3所示。入口换行输出错误信息N是空格吗?Y输出字符出口图3.3 错误程序流程图4 程序段落说明4.1 初始化窗口程序基本达到设计要求,由于使用了声卡调用功能,程序的操作更加简便,一般情况下能正确提示错

14、误信息。但是在测试中也发现软件的一些不足与缺陷,需要进一步修改和维护时予以纠正。总的来说,程序通过了测试。程序开始后先将提示字符串输出,创建一个windows窗口。.dataClassName db "SimpleWinClass",0AppName db "SimpleVirtualPiano",0szText db'简单的虚拟钢琴小程序 -> abcdefg调,1234567qwrty音',0h.data?hInstance HINSTANCE ?hdc HDC ?midiPu DWORD ?midiYu DWORD ?midi

15、Flag BYTE ?midiPlayFlag BYTE ?.codestart:invokeGetModuleHandle, NULLmov hInstance, eaxinvokeWinMain, hInstance, NULL, NULL, SW_SHOWDEFAULTinvokeExitProcess, eax WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORDLOCAL wc:WNDCLASSEXLOCAL msg:MSGLOCAL hwnd:HWNDmov wc.cbSize

16、, SIZEOF WNDCLASSEXmov wc.style, CS_HREDRAW or CS_VREDRAWmov wc.lpfnWndProc, OFFSET WndProcmov wc.cbClsExtra, NULLmov wc.cbWndExtra, NULLpush hInstpop wc.hInstancemov wc.hbrBackground, COLOR_WINDOW+1mov wc.lpszMenuName, NULLmov wc.lpszClassName, OFFSET ClassNameinvokeLoadIcon, NULL, IDI_APPLICATIONm

17、ov wc.hIcon, eaxmov wc.hIconSm, eaxinvokeLoadCursor, NULL, IDC_ARROWmov wc.hCursor, eaxinvokeRegisterClassEx, addr wcINVOKECreateWindowEx, NULL, ADDR ClassName, ADDR AppName,WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL,hInst, NULLmovhwnd, eaxINVOKEShowWi

18、ndow, hwnd, SW_SHOWNORMALINVOKEUpdateWindow, hwnd.WHILE TRUEINVOKEGetMessage, ADDR msg, NULL, 0, 0.BREAK .IF (!eax)INVOKETranslateMessage, ADDR msgINVOKEDispatchMessage, ADDR msg.ENDWmoveax, msg.wParamretWinMain endpWndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAMlocalstPs:PAINTSTRUCT

19、localstRect:RECTlocalhDc localplayf:WORD.IF uMsg = WM_DESTROYinvokemidiOutClose, hdcinvokePostQuitMessage, NULL.ELSEIF uMsg = WM_PAINTinvokeBeginPaint, hWnd, addr stPsmovhDc,eaxinvokeGetClientRect, hWnd, addr stRectinvokeDrawText, hDc, addr szText, -1, addr stRect,DT_SINGLELINE or DT_CENTER or DT_VC

20、ENTERinvokeEndPaint, hWnd, addr stPs.ELSEIF uMsg = WM_CHARmovplayf, 0hpushwParampopmidiPu4.2创建声音 对于最简单音调的建立,使其高音与低音分明,并对全音与半音进行相应操作。.if midiPu = 61h; 'a'movmidiYu, -24.elseif midiPu = 62h; 'b'movmidiYu, -12.elseif midiPu = 63h; 'c'movmidiYu, 0.elseif midiPu = 64h; 'd'

21、movmidiYu, 12.elseif midiPu = 65h; 'e'movmidiYu, 24.elseif midiPu = 66h; 'f'movmidiYu, 36.elseif midiPu = 67h; 'g'movmidiYu, 48;=全音=.elseif midiPu = 31hmovmidiPu, 3chmovplayf, 1.elseif midiPu = 32hmovmidiPu, 3ehmovplayf, 1.elseif midiPu = 33hmovmidiPu, 40hmovplayf, 1.elseif m

22、idiPu = 34hmovmidiPu, 41hmovplayf, 1.elseif midiPu = 35hmovmidiPu, 43hmovplayf, 1.elseif midiPu = 36hmovmidiPu, 45hmovplayf, 1.elseif midiPu = 37hmovmidiPu, 47hmovplayf, 1;=半音=.elseif midiPu = 71h; 'q'movmidiPu, 3dhmovplayf, 1.elseif midiPu = 77h; 'w'movmidiPu, 3fhmovplayf, 1.elseif

23、midiPu = 72h; 'r'movmidiPu, 42hmovplayf, 1.elseif midiPu = 74h; 't'movmidiPu, 44hmovplayf, 1.elseif midiPu = 79h; 'y'movmidiPu, 46hmovplayf, 1.endif4.3 对声卡的调用对于声卡的调用,主要是为了用户能够弹奏出不一样的声音,这样就能够具体的使用每一个键所对应的声调。.if playf = 1moveax, midiYuaddmidiPu, eaxmovcl, 8shlmidiPu, clandmidiP

24、u, 0ff00haddmidiPu, 680090h.if midiPlayFlag = 1h 5程序调试运行5.1程序运行结果在程序运行一步完成之后,桌面会出现一个windows窗口,并且在窗口中出现了所输入的字符串,单击该窗口后,可以单击相对应控制键,发出不同的音调。图5.1初始界面图5.2操作界面5.2测试结果分析界面设计相对单一,界面不够完美,代码设计不够完整而系统。程序的主要缺陷是在进弹奏的时候不是很顺畅,需要改进程序,以方便操作和声音的美妙。图5.3键盘控制6软件使用说明书1:此键盘钢琴演奏是作为汇编语言课程设计作品,仅供参考。2:此作品所用汇编为Windows 32汇编,所用开

25、发工具为MASMPlus欲打开工程项目需先安装该软件。3:欲编译后成功运行键盘钢琴演奏需在键盘上单击所设置的按键。4:只有严格按照上面所要求操作,该钢琴键盘演奏才能正确使用。7设计总结在课程设计开始阶段,我感到无从下手,毕竟上课时学到的都只是汇编的基本知识,用来做课程设计时远远不够的。后来,经过上网查阅相关资料和翻阅书籍,并学习汇编语言的新知识,心中才有了一个基本的思路。之后便和小组成员投入到了为期一周的汇编课设中。本次课程设计的主要任务是钢琴键盘演奏,这其中涉及到8255A,8254芯片的利用,这让我加深了对这些芯片的认识。而这其中用到了端口地址及工作方式这些接口技术。经过小组成员的共同努力

26、,我们确定了设计思路和流程图,在编写程序的过程中遇到了很多困难,但我们齐心协力,化解了一个又一个难题,总的来说,这次课程设计让我收获颇多,不但巩固了汇编语言这门课的学习,还学到了许多没有学到了,增强了我独立去分析问题与解决问题的能力。参考文献【1】 王爽.汇编语言(第二版).清华大学出版社, 2008。【2】 沈美明,温冬婵.IBM-PC汇编语言程序设计(第二版).清华大学出版社, 2001。【3】 美Kip R.Irvine著,温玉洁,等译.Intel汇编语言程序设计(第五版).电子工业出版社, 2007。【4】 钱晓捷.汇编语言程序设计(第二版). 电子工业出版社, 2003。【5】 罗云

27、彬.Windows环境下32位汇编语言程序设计(第二版).电子工业出版社, 2006。【6】 Windows API函数参考手册.人民邮电出版社, 2002。致 谢我认为,在这学期的实验中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教老师和同学。使我再专业知识和动手实践方面都得到了很好的提升,在此,要对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!课设的成功,少不了老师的耐心指导和同学的热心帮助,以及小组中其他成员的大力配合。没有大家的默契,也收获不了今日的成功,在课设的过程中每一个人都努力查找资料,仔细检查,认真核对,都付出了自己的努力和艰辛,在

28、此,谢谢所有人的努力和帮助,才使实验能够得以顺利地完成。附录源程序.386.model flat,stdcalloption casemap:noneWinMain proto :DWORD,:DWORD,:DWORD,:DWORDinclude D:masmplusincludewindows.incinclude D:masmplusincludeuser32.incinclude D:masmplusincludekernel32.incinclude D:masmplusincludegdi32.incinclude D:masmplusincludewinmm.incincludel

29、ib D:masmpluslibuser32.libincludelib D:masmpluslibkernel32.libincludelib D:masmpluslibgdi32.libincludelib D:masmpluslibwinmm.lib.dataClassName db "SimpleWinClass",0AppName db "SimpleVirtualPiano",0szText db'简单的虚拟钢琴小程序 -> abcdefg调,1234567qwrty音',0h.data?hInstance HINSTA

30、NCE ?hdc HDC ?midiPu DWORD ?midiYu DWORD ?midiFlag BYTE ?midiPlayFlag BYTE ?.codestart:invokeGetModuleHandle, NULLmov hInstance, eaxinvokeWinMain, hInstance, NULL, NULL, SW_SHOWDEFAULTinvokeExitProcess, eax WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORDLOCAL wc:WNDCL

31、ASSEXLOCAL msg:MSGLOCAL hwnd:HWNDmov wc.cbSize, SIZEOF WNDCLASSEXmov wc.style, CS_HREDRAW or CS_VREDRAWmov wc.lpfnWndProc, OFFSET WndProcmov wc.cbClsExtra, NULLmov wc.cbWndExtra, NULLpush hInstpop wc.hInstancemov wc.hbrBackground, COLOR_WINDOW+1mov wc.lpszMenuName, NULLmov wc.lpszClassName, OFFSET C

32、lassNameinvokeLoadIcon, NULL, IDI_APPLICATIONmov wc.hIcon, eaxmov wc.hIconSm, eaxinvokeLoadCursor, NULL, IDC_ARROWmov wc.hCursor, eaxinvokeRegisterClassEx, addr wcINVOKECreateWindowEx, NULL, ADDR ClassName, ADDR AppName,WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,

33、NULL, NULL,hInst, NULLmovhwnd, eaxINVOKEShowWindow, hwnd, SW_SHOWNORMALINVOKEUpdateWindow, hwnd.WHILE TRUEINVOKEGetMessage, ADDR msg, NULL, 0, 0.BREAK .IF (!eax)INVOKETranslateMessage, ADDR msgINVOKEDispatchMessage, ADDR msg.ENDWmoveax, msg.wParamretWinMain endpWndProc proc hWnd:HWND, uMsg:UINT, wPa

34、ram:WPARAM, lParam:LPARAMlocalstPs:PAINTSTRUCTlocalstRect:RECTlocalhDc localplayf:WORD.IF uMsg = WM_DESTROYinvokemidiOutClose, hdcinvokePostQuitMessage, NULL.ELSEIF uMsg = WM_PAINTinvokeBeginPaint, hWnd, addr stPsmovhDc,eaxinvokeGetClientRect, hWnd, addr stRectinvokeDrawText, hDc, addr szText, -1, a

35、ddr stRect,DT_SINGLELINE or DT_CENTER or DT_VCENTERinvokeEndPaint, hWnd, addr stPs.ELSEIF uMsg = WM_CHARmovplayf, 0hpushwParampopmidiPu;=ESC键的功能=.if midiPu=WM_DEVMODECHANGE ;1bhinvokemidiOutClose, hdcinvokePostQuitMessage, NULL.endif;-音调-.if midiPu = 61h; 'a'movmidiYu, -24.elseif midiPu = 62h; 'b'movmidiYu, -12.elseif midiPu = 63h; 'c'movmidiYu, 0.elseif midiPu = 64h; 'd'movmidiYu, 12.elseif midiPu = 65h; 

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论