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

下载本文档

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

文档简介

兰州理工大学技术工程学院2014年春季学期汇编语言实训课程设计题 目:_钢琴键盘演奏专业班级:__2012级计算机科学与技术韩国娟姓名:韩国娟学号: 12730103指导教师: 刘树群 成绩:_________________________摘要汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。此次的课程设计正是利用这个学期所学的汇编语言来设计一个键盘钢琴的应用程序,要求该汇编语言程序能实现键盘钢琴的功能,就是在键盘上按下自定义的按键之后,可以从主板的蜂鸣器上发出一定频率的音调,而这些音调的频率都是相应音阶的特征频率,故发出的声正好就是音乐的各个音阶声调。通过这个应用程序,按照音乐的谱子连续的按下相应按键,就可以像钢琴那样发出音乐来,但是局限于扬声器的原因,所发出的音乐没有真正的钢琴那样美妙。但是现在的一些键盘钢琴的软件已经能驱动声卡,来获得更好更逼真的钢琴音乐效果了。关键字:汇编;键盘钢琴;音阶;声卡AbstractTheassemblerlanguageisafunctionalprogramminglanguage,isusingthecomputerallhardwarefeaturesandcandirectlycontrolthehardwarelanguage.Assemblylanguage,asalanguage,correspondingtothehigh-levellanguagecompiler,theneedfora"assembler"totheassemblylanguageoriginaldocumentscompiledintoexecutablemachinecode.Thecoursedesignistousewhattheyhavelearnedthissemesterofassemblylanguagetodesignakeyboardpianoapplication,askedtheassemblylanguageprogramcanrealizethefunctionofthepianokeyboard,ispressingthecustombuttonsonthekeyboard,canacertainfrequencyfromthemainboardofthebuzzertones,andthefrequencyofthesetonesarethecorrespondingcharacteristicfrequencyofthescale,sothesoundfromtherightisthemusicofeachtonescale.Throughthisapplication,inaccordancewiththemusicscoreofcontinuouspressthecorrespondingbutton,youcanplaymusiclikethepiano,butlimitedtothecauseoftheloudspeaker,themusichasnorealmadebythepianosowonderful.Butnowsomeofthepianokeyboardsoftwarecanalreadydrivesoundcard,toobtainabetterandmorerealisticeffectofpianomusic.Keywords:assembly;keyboardpiano;scales,;audiocard目录TOC\o"1-5"\h\z\o"CurrentDocument"摘要 1目录 3\o"CurrentDocument"系统分析 4\o"CurrentDocument"问题描述 4\o"CurrentDocument"任务目标 4\o"CurrentDocument"需求规定 4\o"CurrentDocument"系统总体设计 6\o"CurrentDocument"2.1设计要求 6\o"CurrentDocument"2.2设计原理 6\o"CurrentDocument"详细设计 8\o"CurrentDocument"3.1主程序流程图 8\o"CurrentDocument"3.2暂停程序流程图 9\o"CurrentDocument"3.3错误程序流程图 10\o"CurrentDocument"程序段落说明 11\o"CurrentDocument"4.1初始化窗口 11\o"CurrentDocument"4.2创建声音 14对声卡的调用 16\o"CurrentDocument"程序调试运行 17\o"CurrentDocument"5.1程序运行结果 17\o"CurrentDocument"5.2测试结果分析 18\o"CurrentDocument"软件使用说明书 19\o"CurrentDocument"设计总结 20参考文献 21致谢 22\o"CurrentDocument"附录 231系统分析问题描述在windows环境下写一个程序,能够提供简单的用户图形界面,启动程序后进入该界面,用户界面由一行字母与数字构成。用户可以根据相应的程序进行一些功能上的选择,如1234567代表其钢琴键盘的音阶。当单击开始时,计算机将按照不同的功能发出不同的声音,此外,可以根据乐谱弹奏出不同的音乐。任务目标设计汇编语言程序,实现键盘钢琴功能,具体功能要求如下:1>在键盘上自定义若干键对应钢琴键。2>单击钢琴键,计算机发出相应音阶,发生时间自定义。3>单击“ESC”键退出程序。需求规定表1.1 产品功能需求表功能设置界面运行出的界面可以可以扩大与缩小,并且可以随意移动设置ESC键的功能,使其退出设置相应键的音调、全音与半音

调用声卡的代码表1.2用户界面需求表需求名称详细要求窗体界面友好人机父互,爱好者可以很方便进行操作支持声音可以弹奏出美妙的音乐界面大小能改变界面大小,满足需求表3软硬件环境需求表需求名称详细要求硬件要求IntelPentiumIII800/AMDA8以上处理器、512M以上内存支持标准网络协议的网卡系统平台Windows7/WinXP/Win2003运行环境Windows系列系统总体设计设计要求目录从系统实现的功能上来看,键盘钢琴的设计主要为手动弹奏乐曲。手动弹奏乐曲是根据具体的硬件键盘设置了7个音符按键,3个高、中、低音模式切换键和1个功能转换键。从系统硬件结构上来看,主要使用到52系列单片机、7个键输入电路、LED数码管显示电路、扬声器以及电源电路等等。将这些硬件电路有机地结合起来使之满足键盘钢琴设计的基本硬件要求。从系统软件设计角度来看,将键盘钢琴的设计采用程序模块化设计方法,将程序分为主程序、键盘扫描程序模块、数码显示模块、转换控制模块、音乐产生模块等等。此外,采用程序设计思想,将中断定时方式与外部按键查询方式相结合,实现手动弹奏。设计原理从音乐产生原理方面来看,通过控制单片机的定时器的定时时间产生不同频率的音频脉冲,经放大后驱动扬声器发出不同音乐的声音。用软件延时来控制发音时间的长短,控制节拍。把音乐的音符和相应的节拍变换为定时常数和延时常数,作为数据表格存放在程序存储器中,由程序查表得到定时常数和延时常数,分别用来控制定时器产生的脉冲频率和发出音频脉冲的持续时间。对此次汇编语言,通过在图书馆、网络上收集资料,小组成员得到一致结论用Windows平台下32位汇编为最佳选择。对钢琴键盘演奏项目计划划分为两个模块,分别为初始化设置和窗口函数相关模块、对相应键的操作模块。其中对声音的分配是先决条件。在该模块完成的基础上,初始化设置和窗口函数相关模块才能得以实现。各模块分配如下:初始化设置和窗口函数相关模块:王超对相应键的操作模块:韩国娟对初始化设置和窗口函数相关模块:该模块实现对全局变量的初始化,窗口函数则实现对窗口类的注册,生成窗口,以及对窗口事件的处理。其具体功能的实现是要用其他功能模块的子程序。该模块还需要实现窗口大小变换、窗口的随意移动等附加功能。详细设计主程序流程图由于此次课设程序较为复杂,包含多个跳转和子程序。故在此使用将主程序流程图和子程序流程图分开叙述的方法,叙述如下:主程序运行后进入windows界面,首先输出提示字符。接着用户通过键盘单击所设置的按键,对其进行判断识别并作出相应处理:ESC时退出程序;SPACE时暂停程序主程序流程图如图3-1所示:[开始j输出提示字符~~^串输入字符对8255、8253初始化设置全音设置半音调用声卡图3.1主流程图

暂停程序流程图当对输入字符判断为空格后,进入暂停子程序。换行后输出暂停信息,对8255进行清零使得扬声器停止工作。随后对下个输入字符进行判断,若为ESC则退出整个程序;若为空格则重新进入正常工作状态;若为其他字符则等待下个字符的输入。流程图如图3.2所示。图3.2暂停程序流程图错误程序流程图当对输入字符判断为空格、ESC、1234567qwrty以外的字符后,进入错误子程序。随后重新对输入字符进行判断。流程图如图2.3所示。图3.3错误程序流程图程序段落说明初始化窗口程序基本达到设计要求,由于使用了声卡调用功能,程序的操作更加简便,一般情况下能正确提示错误信息。但是在测试中也发现软件的一些不足与缺陷,需要进一步修改和维护时予以纠正。总的来说,程序通过了测试。程序开始后先将提示字符串输出,创建一个windows窗口。.dataClassNamedb"SimpleWinClass",0AppNamedb"SimpleVirtualPiano",0szTextdb'简单的虚拟钢琴小程序-->abcdefg调,1234567qwrty音',0h.data?hInstanceHINSTANCE?hdcHDC?midiPuDWORD?midiYuDWORD?midiFlagBYTE?midiPlayFlagBYTE?.codestart:invokeGetModuleHandle,NULLmovhInstance,eaxinvokeWinMain,hInstance,NULL,NULL,SW_SHOWDEFAULTinvokeExitProcess,eaxWinMainprochInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORDLOCALwc:WNDCLASSEXLOCALmsg:MSGLOCALhwnd:HWNDmovwc.cbSize,SIZEOFWNDCLASSEXmovwc.style,CS_HREDRAWorCS_VREDRAWmovwc.lpfnWndProc,OFFSETWndProcmov wc.cbClsExtra,NULLmov wc.cbWndExtra,NULLpushhInstpopwc.hInstancemovwc.hbrBackground,COLOR_WINDOW+1movwc.lpszMenuName,NULLmovwc.lpszClassName,OFFSETClassNameinvokeLoadIcon,NULL,IDI_APPLICATIONmovwc.hIcon,eaxmovwc.hIconSm,eaxinvokeLoadCursor,NULL,IDC_ARROWmovwc.hCursor,eaxinvokeRegisterClassEx,addrwcINVOKECreateWindowEx,NULL,ADDRClassName,ADDRAppName,\WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\hInst,NULLmovhwnd,eaxINVOKEShowWindow,hwnd,SW_SHOWNORMALINVOKEUpdateWindow,hwnd.WHILETRUEINVOKEGetMessage,ADDRmsg,NULL,0,0.BREAK.IF(!eax)INVOKETranslateMessage,ADDRmsgINVOKEDispatchMessage,ADDRmsg.ENDWmoveax,msg.wParamretWinMainendpWndProcprochWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAMlocal@stPs:PAINTSTRUCTlocal@stRect:RECTlocal@hDclocal@playf:WORD.IFuMsg==WM_DESTROYinvokemidiOutClose,hdcinvokePostQuitMessage,NULL.ELSEIFuMsg==WM_PAINTinvokeBeginPaint,hWnd,addr@stPsmov@hDc,eaxinvokeGetClientRect,hWnd,addr@stRectinvokeDrawText,@hDc,addrszText,-1,addr@stRect,\DT_SINGLELINEorDT_CENTERorDT_VCENTERinvokeEndPaint,hWnd,addr@stPs.ELSEIFuMsg==WM_CHARmov@playf,0hpushwParampopmidiPu创建声音对于最简单音调的建立,使其高音与低音分明,并对全音与半音进行相应操作。-、■音====.ifmidiPu==-、■音====movmidiYu,-24.elseifmidiPu—62h;'b'movmidiYu,-12.elseifmidiPu==63h,,;'c'movmidiYu,0.elseifmidiPu==64h;'d'movmidiYu,12.elseifmidiPu==65h,,;'e'movmidiYu,24.elseifmidiPu==66h;'f'movmidiYu,36.elseifmidiPu==67h,,;'g'movmidiYu,48.elseifmidiPu==31hmovmidiPu,3chmov@playf,1.elseifmidiPu==32hmovmidiPu,3ehmov@playf,1.elseifmidiPu==33hmovmidiPu,40hmov@playf,1.elseifmidiPu==34hmovmidiPu,41h===============全mov@playf,1.elseifmidiPu==35hmovmidiPu,43hmov@playf,1.elseifmidiPu==36hmovmidiPu,45hmov@playf,1.elseifmidiPu==37hmovmidiPu,47hmov@playf,1・ 斗乙Mr ;================半音====.elseifmidiPu==71h;'q'movmidiPu,3dhmov@playf,1.elseifmidiPu==77h;'w'movmidiPu,3fhmov@playf,1.elseifmidiPu==72h;'r'movmidiPu,42hmov@playf,1.elseifmidiPu==74h;'t'movmidiPu,44hmov@playf,1.elseifmidiPu==79h;'y'movmidiPu,46hmov@playf,1.endif对声卡的调用对于声卡的调用,主要是为了用户能够弹奏出不一样的声音,这样就能够具体的使用每一个键所对应的声调。.if@playf==1moveax,midiYuaddmidiPu,eaxmovcl,8shlmidiPu,clandmidiPu,0ff00haddmidiPu,680090h.ifmidiPlayFlag==1h程序调试运行程序运行结果在程序运行一步完成之后,桌面会出现一个windows窗口,并且在窗口中出现了所输入的字符串,单击该窗口后,可以单击相对应控制键,发出不同的音调。图5.1初始界面图5.2操作界面

测试结果分析界面设计相对单一,界面不够完美,代码设计不够完整而系统。程序的主要缺陷是在进弹奏的时候不是很顺畅,需要改进程序,以方便操作和声音的美妙。图5.3键盘控制6软件使用说明书1:此键盘钢琴演奏是作为汇编语言课程设计作品,仅供参考。2:此作品所用汇编为Windows32汇编,所用开发工具为MASMPlus欲打开工程项目需先安装该软件。3:欲编译后成功运行键盘钢琴演奏需在键盘上单击所设置的按键。4:只有严格按照上面所要求操作,该钢琴键盘演奏才能正确使用。7设计总结在课程设计开始阶段,我感到无从下手,毕竟上课时学到的都只是汇编的基本知识,用来做课程设计时远远不够的。后来,经过上网查阅相关资料和翻阅书籍,并学习汇编语言的新知识,心中才有了一个基本的思路。之后便和小组成员投入到了为期一周的汇编课设中。本次课程设计的主要任务是钢琴键盘演奏,这其中涉及到8255A,8254芯片的利用,这让我加深了对这些芯片的认识。而这其中用到了端口地址及工作方式这些接口技术。经过小组成员的共同努力,我们确定了设计思路和流程图,在编写程序的过程中遇到了很多困难,但我们齐心协力,化解了一个又一个难题,总的来说,这次课程设计让我收获颇多,不但巩固了汇编语言这门课的学习,还学到了许多没有学到了,增强了我独立去分析问题与解决问题的能力。参考文献【1】王爽.汇编语言(第二版).清华大学出版社,2008。【2】沈美明,温冬婵.IBM-PC汇编语言程序设计(第二版).清华大学出版社,2001。【3】[美]KipR.Irvine著,温玉洁,等译.Intel汇编语言程序设计(第五版).电子工业出版社,2007。【4】钱晓捷.汇编语言程序设计(第二版).电子工业出版社,2003。【5】罗云彬.Windows环境下32位汇编语言程序设计(第二版).电子工业出版社,2006。【6】WindowsAPI函数参考手册.人民邮电出版社,2002。致谢我认为,在这学期的实验中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教老师和同学。使我再专业知识和动手实践方面都得到了很好的提升,在此,要对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!课设的成功,少不了老师的耐心指导和同学的热心帮助,以及小组中其他成员的大力配合。没有大家的默契,也收获不了今日的成功,在课设的过程中每一个人都努力查找资料,仔细检查,认真核对,都付出了自己的努力和艰辛,在此,谢谢所有人的努力和帮助,才使实验能够得以顺利地完成。附录源程序.386.modelflat,stdcalloptioncasemap:noneWinMainproto:DWORD,:DWORD,:DWORD,:DWORDincludeD:\masmplus\include\windows.incincludeD:\masmplus\include\user32.incincludeD:\masmplus\include\kernel32.incincludeD:\masmplus\include\gdi32.incincludeD:\masmplus\include\winmm.incincludelibD:\masmplus\lib\user32.libincludelibD:\masmplus\lib\kernel32.libincludelibD:\masmplus\lib\gdi32.libincludelibD:\masmplus\lib\winmm.lib.dataClassNamedb"SimpleWinClass",0AppNamedb"SimpleVirtualPiano",0szTextdb简单的虚拟钢琴小程序-->abcdefg调,1234567qwrty音',0h.data?hInstanceHINSTANCE?hdcHDC?midiPuDWORD?midiYuDWORD?midiFlagBYTE?midiPlayFlagBYTE?.codestart:invokeGetModuleHandle,NULLmovhInstance,eaxinvokeWinMain,hInstance,NULL,NULL,SW_SHOWDEFAULTinvokeExitProcess,eaxWinMainprochInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,

CmdShow:DWORDLOCALwc:WNDCLASSEXLOCALmsg:MSGLOCALhwnd:HWNDmovmovmovmovmovpushpopmovmovmovwc.cbSize,SIZEOFWNDCLASSEXwc.style,CS_HREDRAWorCS_VREDRAWwc.lpfnWndProc,OFFSETWndProcwc.cbClsExtra,NULLwc.cbWndExtra,NULLhInstwc.hInstancewc.hbrBackground,COLOR_WINDOW+1wc.lpszMenuName,NULLwc.lpszClassName,OFFSETClassNameinvokeLoadIcon,NULL,IDI_APPLICATIONmovmovwc.hIcon,eaxwc.hIconSm,eaxinvokeLoadCursor,NULL,IDC_ARROWmovwc.hCursor,eaxinvokeRegisterClassEx,addrwcINVOKECreateWindowEx,NULL,ADDRClassName,ADDRAppName,\WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\hInst,NULLmovhwnd,eaxINVOKEShowWindow,hwnd,SW_SHOWNORMALINVOKEUpdateWindow,hwnd.WHILETRUEINVOKEGetMessage,ADDRmsg,NULL,0,0.BREAK.IF(!eax)INVOKETranslateMessage,ADDRmsgINVOKEDispatchMessage,ADDRmsg.ENDWmoveax,msg.wParamretWinMainendpWndProcprochWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAMlocal@stPs:PAINTSTRUCTlocal@stRect:RECTlocal@hDclocal@playf:WORD.IFuMsg==WM_DESTROYinvokemidiOutClose,hdcinvokePostQuitMessage,NULL.ELSEIFuMsg==WM_PAINTinvokeBeginPaint,hWnd,addr@stPsmov@hDc,eaxinvokeGetClientRect,hWnd,addr@stRectinvokeDrawText,@hDc,addrszText,-1,addr@stRect,\DT_SINGLELINEorDT_CENTERorDT_VCENTERinvokeEndPaint,hWnd,addr@stPs.ELSEIFuMsg==WM_CHARmov@playf,0hpushwParampopmidiPu;===============ESC键的功能================;1bh.ifmidiPu==WM_DEVMODECHANGE;1bhinvokemidiOutClose,hdcinvokePostQuitMessage,NULL.endif; 音调 TOC\o"1-5"\h\z.ifmidiPu==61h ;'a'movmidiYu,-24.elseifmidiPu==62h ;'b'movmidiYu,-12.elseifmidiPu==63h ;'c'movmidiYu,0.elseifmidiPu==64h ;'d'movmidiYu,12.elseifmidiPu==65h ;'e'movmidiYu,24.elseifmi

温馨提示

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

评论

0/150

提交评论