鋼琴鍵盤演奏說明書_第1頁
鋼琴鍵盤演奏說明書_第2頁
鋼琴鍵盤演奏說明書_第3頁
鋼琴鍵盤演奏說明書_第4頁
鋼琴鍵盤演奏說明書_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

PAGE2蘭州理工大學(xué)技術(shù)工程學(xué)院2014年春季學(xué)期匯編語言實(shí)訓(xùn)課程設(shè)計(jì)題目:_鋼琴鍵盤演奏_____專業(yè)班級(jí):__2012級(jí)計(jì)算機(jī)科學(xué)與技術(shù)____姓名:___韓國娟____學(xué)號(hào):12730103指導(dǎo)教師:劉樹群成績(jī):_______________摘要匯編語言是一種功能很強(qiáng)的程序設(shè)計(jì)語言,也是利用計(jì)算機(jī)所有硬件特性并能直接控制硬件的語言。匯編語言,作為一門語言,對(duì)應(yīng)于高級(jí)語言的編譯器,需要一個(gè)“匯編器”來把匯編語言原文件匯編成機(jī)器可執(zhí)行的代碼。此次的課程設(shè)計(jì)正是利用這個(gè)學(xué)期所學(xué)的匯編語言來設(shè)計(jì)一個(gè)鍵盤鋼琴的應(yīng)用程序,要求該匯編語言程序能實(shí)現(xiàn)鍵盤鋼琴的功能,就是在鍵盤上按下自定義的按鍵之后,可以從主板的蜂鳴器上發(fā)出一定頻率的音調(diào),而這些音調(diào)的頻率都是相應(yīng)音階的特征頻率,故發(fā)出的聲正好就是音樂的各個(gè)音階聲調(diào)。通過這個(gè)應(yīng)用程序,按照音樂的譜子連續(xù)的按下相應(yīng)按鍵,就可以像鋼琴那樣發(fā)出音樂來,但是局限于揚(yáng)聲器的原因,所發(fā)出的音樂沒有真正的鋼琴那樣美妙。但是現(xiàn)在的一些鍵盤鋼琴的軟件已經(jīng)能驅(qū)動(dòng)聲卡,來獲得更好更逼真的鋼琴音樂效果了。關(guān)鍵字:匯編;鍵盤鋼琴;音階;聲卡Abstract

Theassemblerlanguageisafunctionalprogramminglanguage,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目錄摘要 1目錄 31系統(tǒng)分析 41.1問題描述 41.2任務(wù)目標(biāo) 41.3需求規(guī)定 42系統(tǒng)總體設(shè)計(jì) 62.1設(shè)計(jì)要求 62.2設(shè)計(jì)原理 63詳細(xì)設(shè)計(jì) 83.1主程序流程圖 83.2暫停程序流程圖 93.3錯(cuò)誤程序流程圖 104程序段落說明 114.1初始化窗口 114.2創(chuàng)建聲音 144.3對(duì)聲卡的調(diào)用 165程序調(diào)試運(yùn)行 175.1程序運(yùn)行結(jié)果 175.2測(cè)試結(jié)果分析 186軟件使用說明書 197設(shè)計(jì)總結(jié) 20參考文獻(xiàn) 21致謝 22附錄 231系統(tǒng)分析1.1問題描述在windows環(huán)境下寫一個(gè)程序,能夠提供簡(jiǎn)單的用戶圖形界面,啟動(dòng)程序后進(jìn)入該界面,用戶界面由一行字母與數(shù)字構(gòu)成。用戶可以根據(jù)相應(yīng)的程序進(jìn)行一些功能上的選擇,如1234567代表其鋼琴鍵盤的音階。當(dāng)單擊開始時(shí),計(jì)算機(jī)將按照不同的功能發(fā)出不同的聲音,此外,可以根據(jù)樂譜彈奏出不同的音樂。1.2任務(wù)目標(biāo)設(shè)計(jì)匯編語言程序,實(shí)現(xiàn)鍵盤鋼琴功能,具體功能要求如下:1>在鍵盤上自定義若干鍵對(duì)應(yīng)鋼琴鍵。2>單擊鋼琴鍵,計(jì)算機(jī)發(fā)出相應(yīng)音階,發(fā)生時(shí)間自定義。3>單擊“ESC”鍵退出程序。1.3需求規(guī)定表1.1產(chǎn)品功能需求表功能設(shè)置界面運(yùn)行出的界面可以可以擴(kuò)大與縮小,并且可以隨意移動(dòng)設(shè)置ESC鍵的功能,使其退出設(shè)置相應(yīng)鍵的音調(diào)、全音與半音調(diào)用聲卡的代碼表1.2用戶界面需求表需求名稱詳細(xì)要求窗體界面友好人機(jī)交互,愛好者可以很方便進(jìn)行操作支持聲音可以彈奏出美妙的音樂界面大小能改變界面大小,滿足需求表3軟硬件環(huán)境需求表需求名稱詳細(xì)要求硬件要求IntelPentiumIII800/AMDA8以上處理器、512M以上內(nèi)存支持標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議的網(wǎng)卡系統(tǒng)平臺(tái)Windows7/WinXP/Win2003運(yùn)行環(huán)境Windows系列

2系統(tǒng)總體設(shè)計(jì)2.1設(shè)計(jì)要求目錄從系統(tǒng)實(shí)現(xiàn)的功能上來看,鍵盤鋼琴的設(shè)計(jì)主要為手動(dòng)彈奏樂曲。手動(dòng)彈奏樂曲是根據(jù)具體的硬件鍵盤設(shè)置了7個(gè)音符按鍵,3個(gè)高、中、低音模式切換鍵和1個(gè)功能轉(zhuǎn)換鍵。從系統(tǒng)硬件結(jié)構(gòu)上來看,主要使用到52系列單片機(jī)、7個(gè)鍵輸入電路、LED數(shù)碼管顯示電路、揚(yáng)聲器以及電源電路等等。將這些硬件電路有機(jī)地結(jié)合起來使之滿足鍵盤鋼琴設(shè)計(jì)的基本硬件要求。從系統(tǒng)軟件設(shè)計(jì)角度來看,將鍵盤鋼琴的設(shè)計(jì)采用程序模塊化設(shè)計(jì)方法,將程序分為主程序、鍵盤掃描程序模塊、數(shù)碼顯示模塊、轉(zhuǎn)換控制模塊、音樂產(chǎn)生模塊等等。此外,采用程序設(shè)計(jì)思想,將中斷定時(shí)方式與外部按鍵查詢方式相結(jié)合,實(shí)現(xiàn)手動(dòng)彈奏。2.2設(shè)計(jì)原理從音樂產(chǎn)生原理方面來看,通過控制單片機(jī)的定時(shí)器的定時(shí)時(shí)間產(chǎn)生不同頻率的音頻脈沖,經(jīng)放大后驅(qū)動(dòng)揚(yáng)聲器發(fā)出不同音樂的聲音。用軟件延時(shí)來控制發(fā)音時(shí)間的長(zhǎng)短,控制節(jié)拍。把音樂的音符和相應(yīng)的節(jié)拍變換為定時(shí)常數(shù)和延時(shí)常數(shù),作為數(shù)據(jù)表格存放在程序存儲(chǔ)器中,由程序查表得到定時(shí)常數(shù)和延時(shí)常數(shù),分別用來控制定時(shí)器產(chǎn)生的脈沖頻率和發(fā)出音頻脈沖的持續(xù)時(shí)間。對(duì)此次匯編語言,通過在圖書館、網(wǎng)絡(luò)上收集資料,小組成員得到一致結(jié)論用Windows平臺(tái)下32位匯編為最佳選擇。對(duì)鋼琴鍵盤演奏項(xiàng)目計(jì)劃劃分為兩個(gè)模塊,分別為初始化設(shè)置和窗口函數(shù)相關(guān)模塊、對(duì)相應(yīng)鍵的操作模塊。其中對(duì)聲音的分配是先決條件。在該模塊完成的基礎(chǔ)上,初始化設(shè)置和窗口函數(shù)相關(guān)模塊才能得以實(shí)現(xiàn)。各模塊分配如下: 初始化設(shè)置和窗口函數(shù)相關(guān)模塊:王超 對(duì)相應(yīng)鍵的操作模塊:韓國娟對(duì)初始化設(shè)置和窗口函數(shù)相關(guān)模塊:該模塊實(shí)現(xiàn)對(duì)全局變量的初始化,窗口函數(shù)則實(shí)現(xiàn)對(duì)窗口類的注冊(cè),生成窗口,以及對(duì)窗口事件的處理。其具體功能的實(shí)現(xiàn)是要用其他功能模塊的子程序。該模塊還需要實(shí)現(xiàn)窗口大小變換、窗口的隨意移動(dòng)等附加功能。

3詳細(xì)設(shè)計(jì)3.1主程序流程圖由于此次課設(shè)程序較為復(fù)雜,包含多個(gè)跳轉(zhuǎn)和子程序。故在此使用將主程序流程圖和子程序流程圖分開敘述的方法,敘述如下:主程序運(yùn)行后進(jìn)入windows界面,首先輸出提示字符。接著用戶通過鍵盤單擊所設(shè)置的按鍵,對(duì)其進(jìn)行判斷識(shí)別并作出相應(yīng)處理:ESC時(shí)退出程序;SPACE時(shí)暫停程序主程序流程圖如圖3-1所示:開始對(duì)8255、8253初始化輸出提示字符串開始對(duì)8255、8253初始化輸出提示字符串 調(diào)用聲卡設(shè)置全音設(shè)置半音是1234567qwrty鍵嗎?錯(cuò)誤是空格嗎?是ESC嗎?輸入字符返回主程序結(jié)束圖3.1主流程圖NYYNNY暫停

3.2暫停程序流程圖調(diào)用聲卡設(shè)置全音設(shè)置半音是1234567qwrty鍵嗎?錯(cuò)誤是空格嗎?是ESC嗎?輸入字符返回主程序結(jié)束圖3.1主流程圖NYYNNY暫停當(dāng)對(duì)輸入字符判斷為空格后,進(jìn)入暫停子程序。換行后輸出暫停信息,對(duì)8255進(jìn)行清零使得揚(yáng)聲器停止工作。隨后對(duì)下個(gè)輸入字符進(jìn)行判斷,若為ESC則退出整個(gè)程序;若為空格則重新進(jìn)入正常工作狀態(tài);若為其他字符則等待下個(gè)字符的輸入。流程圖如圖3.2所示。入口入口輸入輸入輸出暫停信息輸出暫停信息停止發(fā)聲停止發(fā)聲YY是ESC嗎?是ESC嗎?N N返入口返入口輸入輸出暫停信息停止發(fā)聲是ESC嗎程回主程序N輸出字符是空格嗎?N輸出字符是空格嗎?Y出口Y出口圖3.2暫停程序流程圖圖3.2暫停程序流程圖

3.3錯(cuò)誤程序流程圖當(dāng)對(duì)輸入字符判斷為空格、ESC、1234567qwrty以外的字符后,進(jìn)入錯(cuò)誤子程序。隨后重新對(duì)輸入字符進(jìn)行判斷。流程圖如圖2.3所示。入口入口換行換行輸出錯(cuò)誤信息輸出錯(cuò)誤信息NN是空格嗎?是空格嗎?Y輸出字符Y輸出字符出口出口圖3.3錯(cuò)誤程序流程圖圖3.3錯(cuò)誤程序流程圖

4程序段落說明4.1初始化窗口程序基本達(dá)到設(shè)計(jì)要求,由于使用了聲卡調(diào)用功能,程序的操作更加簡(jiǎn)便,一般情況下能正確提示錯(cuò)誤信息。但是在測(cè)試中也發(fā)現(xiàn)軟件的一些不足與缺陷,需要進(jìn)一步修改和維護(hù)時(shí)予以糾正??偟膩碚f,程序通過了測(cè)試。程序開始后先將提示字符串輸出,創(chuàng)建一個(gè)windows窗口。.dataClassNamedb"SimpleWinClass",0AppNamedb"SimpleVirtualPiano",0szTextdb '簡(jiǎn)單的虛擬鋼琴小程序-->abcdefg調(diào),1234567qwrty音',0h.data?hInstanceHINSTANCE?hdcHDC?midiPuDWORD?midiYuDWORD?midiFlagBYTE?midiPlayFlagBYTE?.codestart: invoke GetModuleHandle,NULL movhInstance,eax invoke WinMain,hInstance,NULL,NULL,SW_SHOWDEFAULT invoke ExitProcess,eaxWinMainprochInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD LOCALwc:WNDCLASSEX LOCALmsg:MSG LOCALhwnd:HWND movwc.cbSize,SIZEOFWNDCLASSEX movwc.style,CS_HREDRAWorCS_VREDRAW movwc.lpfnWndProc,OFFSETWndProc movwc.cbClsExtra,NULL movwc.cbWndExtra,NULL pushhInst popwc.hInstance movwc.hbrBackground,COLOR_WINDOW+1 movwc.lpszMenuName,NULL movwc.lpszClassName,OFFSETClassName invoke LoadIcon,NULL,IDI_APPLICATION movwc.hIcon,eax movwc.hIconSm,eax invoke LoadCursor,NULL,IDC_ARROW movwc.hCursor,eax invoke RegisterClassEx,addrwc INVOKE CreateWindowEx,NULL,ADDRClassName,ADDRAppName,\ WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\ CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\ hInst,NULL mov hwnd,eax INVOKE ShowWindow,hwnd,SW_SHOWNORMAL INVOKE UpdateWindow,hwnd .WHILETRUE INVOKE GetMessage,ADDRmsg,NULL,0,0 .BREAK.IF(!eax) INVOKE TranslateMessage,ADDRmsg INVOKE DispatchMessage,ADDRmsg .ENDW mov eax,msg.wParam retWinMainendpWndProcprochWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM local @stPs:PAINTSTRUCT local @stRect:RECT local @hDc local @playf:WORD .IFuMsg==WM_DESTROY invoke midiOutClose,hdc invoke PostQuitMessage,NULL .ELSEIFuMsg==WM_PAINT invoke BeginPaint,hWnd,addr@stPs mov @hDc,eax invoke GetClientRect,hWnd,addr@stRect invoke DrawText,@hDc,addrszText,-1,addr@stRect,\ DT_SINGLELINEorDT_CENTERorDT_VCENTER invoke EndPaint,hWnd,addr@stPs .ELSEIFuMsg==WM_CHAR mov @playf,0h push wParam pop midiPu4.2創(chuàng)建聲音對(duì)于最簡(jiǎn)單音調(diào)的建立,使其高音與低音分明,并對(duì)全音與半音進(jìn)行相應(yīng)操作。.ifmidiPu==61h ;'a' mov midiYu,-24 .elseifmidiPu==62h ;'b' mov midiYu,-12 .elseifmidiPu==63h ;'c' mov midiYu,0 .elseifmidiPu==64h ;'d' mov midiYu,12 .elseifmidiPu==65h ;'e' mov midiYu,24 .elseifmidiPu==66h ;'f' mov midiYu,36 .elseifmidiPu==67h ;'g' mov midiYu,48 ;===============全音==== .elseifmidiPu==31h mov midiPu,3ch mov @playf,1 .elseifmidiPu==32h mov midiPu,3eh mov @playf,1 .elseifmidiPu==33h mov midiPu,40h mov @playf,1 .elseifmidiPu==34h mov midiPu,41h mov @playf,1 .elseifmidiPu==35h mov midiPu,43h mov @playf,1 .elseifmidiPu==36h mov midiPu,45h mov @playf,1 .elseifmidiPu==37h mov midiPu,47h mov @playf,1 ;================半音==== .elseifmidiPu==71h ;'q' mov midiPu,3dh mov @playf,1 .elseifmidiPu==77h ;'w' mov midiPu,3fh mov @playf,1 .elseifmidiPu==72h ;'r' mov midiPu,42h mov @playf,1 .elseifmidiPu==74h ;'t' mov midiPu,44h mov @playf,1 .elseifmidiPu==79h ;'y' mov midiPu,46h mov @playf,1 .endif4.3對(duì)聲卡的調(diào)用 對(duì)于聲卡的調(diào)用,主要是為了用戶能夠彈奏出不一樣的聲音,這樣就能夠具體的使用每一個(gè)鍵所對(duì)應(yīng)的聲調(diào)。 .if@playf==1 mov eax,midiYu add midiPu,eax mov cl,8 shl midiPu,cl and midiPu,0ff00h add midiPu,680090h .ifmidiPlayFlag==1h5程序調(diào)試運(yùn)行5.1程序運(yùn)行結(jié)果在程序運(yùn)行一步完成之后,桌面會(huì)出現(xiàn)一個(gè)windows窗口,并且在窗口中出現(xiàn)了所輸入的字符串,單擊該窗口后,可以單擊相對(duì)應(yīng)控制鍵,發(fā)出不同的音調(diào)。圖5.1初始界面圖5.2操作界面5.2測(cè)試結(jié)果分析界面設(shè)計(jì)相對(duì)單一,界面不夠完美,代碼設(shè)計(jì)不夠完整而系統(tǒng)。程序的主要缺陷是在進(jìn)彈奏的時(shí)候不是很順暢,需要改進(jìn)程序,以方便操作和聲音的美妙。圖5.3鍵盤控制

6軟件使用說明書1:此鍵盤鋼琴演奏是作為匯編語言課程設(shè)計(jì)作品,僅供參考。2:此作品所用匯編為Windows32匯編,所用開發(fā)工具為MASMPlus欲打開工程項(xiàng)目需先安裝該軟件。3:欲編譯后成功運(yùn)行鍵盤鋼琴演奏需在鍵盤上單擊所設(shè)置的按鍵。4:只有嚴(yán)格按照上面所要求操作,該鋼琴鍵盤演奏才能正確使用。

7設(shè)計(jì)總結(jié)在課程設(shè)計(jì)開始階段,我感到無從下手,畢竟上課時(shí)學(xué)到的都只是匯編的基本知識(shí),用來做課程設(shè)計(jì)時(shí)遠(yuǎn)遠(yuǎn)不夠的。后來,經(jīng)過上網(wǎng)查閱相關(guān)資料和翻閱書籍,并學(xué)習(xí)匯編語言的新知識(shí),心中才有了一個(gè)基本的思路。之后便和小組成員投入到了為期一周的匯編課設(shè)中。本次課程設(shè)計(jì)的主要任務(wù)是鋼琴鍵盤演奏,這其中涉及到8255A,8254芯片的利用,這讓我加深了對(duì)這些芯片的認(rèn)識(shí)。而這其中用到了端口地址及工作方式這些接口技術(shù)。經(jīng)過小組成員的共同努力,我們確定了設(shè)計(jì)思路和流程圖,在編寫程序的過程中遇到了很多困難,但我們齊心協(xié)力,化解了一個(gè)又一個(gè)難題,總的來說,這次課程設(shè)計(jì)讓我收獲頗多,不但鞏固了匯編語言這門課的學(xué)習(xí),還學(xué)到了許多沒有學(xué)到了,增強(qiáng)了我獨(dú)立去分析問題與解決問題的能力。

參考文獻(xiàn)【1】王爽.匯編語言(第二版).清華大學(xué)出版社,2008?!?】沈美明,溫冬嬋.IBM-PC匯編語言程序設(shè)計(jì)(第二版).清華大學(xué)出版社,2001。【3】[美]KipR.Irvine著,溫玉潔,等譯.Intel匯編語言程序設(shè)計(jì)(第五版).電子工業(yè)出版社,2007?!?】錢曉捷.匯編語言程序設(shè)計(jì)(第二版).電子工業(yè)出版社,2003?!?】羅云彬.Windows環(huán)境下32位匯編語言程序設(shè)計(jì)(第二版).電子工業(yè)出版社,2006?!?】WindowsAPI函數(shù)參考手冊(cè).人民郵電出版社,2002。

致謝我認(rèn)為,在這學(xué)期的實(shí)驗(yàn)中,在收獲知識(shí)的同時(shí),還收獲了閱歷,收獲了成熟,在此過程中,我們通過查找大量資料,請(qǐng)教老師和同學(xué)。使我再專業(yè)知識(shí)和動(dòng)手實(shí)踐方面都得到了很好的提升,在此,要對(duì)給過我?guī)椭乃型瑢W(xué)和各位指導(dǎo)老師再次表示忠心的感謝!課設(shè)的成功,少不了老師的耐心指導(dǎo)和同學(xué)的熱心幫助,以及小組中其他成員的大力配合。沒有大家的默契,也收獲不了今日的成功,在課設(shè)的過程中每一個(gè)人都努力查找資料,仔細(xì)檢查,認(rèn)真核對(duì),都付出了自己的努力和艱辛,在此,謝謝所有人的努力和幫助,才使實(shí)驗(yàn)?zāi)軌虻靡皂樌赝瓿?。附錄源程?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 '簡(jiǎn)單的虛擬鋼琴小程序-->abcdefg調(diào),1234567qwrty音',0h.data?hInstanceHINSTANCE?hdcHDC?midiPuDWORD?midiYuDWORD?midiFlagBYTE?midiPlayFlagBYTE?.codestart: invoke GetModuleHandle,NULL movhInstance,eax invoke WinMain,hInstance,NULL,NULL,SW_SHOWDEFAULT invoke ExitProcess,eaxWinMainprochInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD LOCALwc:WNDCLASSEX LOCALmsg:MSG LOCALhwnd:HWND movwc.cbSize,SIZEOFWNDCLASSEX movwc.style,CS_HREDRAWorCS_VREDRAW movwc.lpfnWndProc,OFFSETWndProc movwc.cbClsExtra,NULL movwc.cbWndExtra,NULL pushhInst popwc.hInstance movwc.hbrBackground,COLOR_WINDOW+1 movwc.lpszMenuName,NULL movwc.lpszClassName,OFFSETClassName invoke LoadIcon,NULL,IDI_APPLICATION movwc.hIcon,eax movwc.hIconSm,eax invoke LoadCursor,NULL,IDC_ARROW movwc.hCursor,eax invoke RegisterClassEx,addrwc INVOKE CreateWindowEx,NULL,ADDRClassName,ADDRAppName,\ WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\ CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\ hInst,NULL mov hwnd,eax INVOKE ShowWindow,hwnd,SW_SHOWNORMAL INVOKE UpdateWindow,hwnd .WHILETRUE INVOKE GetMessage,ADDRmsg,NULL,0,0 .BREAK.IF(!eax) INVOKE TranslateMessage,ADDRmsg INVOKE DispatchMessage,ADDRmsg .ENDW mov eax,msg.wParam retWinMainendpWndProcprochWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM local @stPs:PAINTSTRUCT local @stRect:RECT local @hDc local @playf:WORD .IFuMsg==WM_DESTROY invoke midiOutClose,hdc invoke PostQuitMessage,NULL .ELSEIFuMsg==WM_PAINT invoke BeginPaint,hWnd,addr@stPs mov @hDc,eax invoke GetClientRect,hWnd,addr@stRect invoke DrawText,@hDc,addrszText,-1,addr@stRect,\ DT_SINGLELINEorDT_CENTERorDT_VCENTER invoke EndPaint,hWnd,addr@stPs .ELSEIFuMsg==WM_CHAR mov @playf,0h push wParam pop midiPu ;===============ESC鍵的功能================ .ifmidiPu==WM_DEVMODECHANGE;1bh invoke midiOutClose,hdc invoke PostQuitMessage,NULL .endif ;音調(diào) .ifmidiPu==61h ;'a' mov midiYu,-24 .elseifmidiPu==62h ;'b' mov midiYu,-12 .elseifmidiPu==63h ;'c' mov midiYu,0 .elseifmidiPu==64h ;'d' mov midiYu,12 .elseifmidiPu==65h ;'e' mov midiYu,24 .elseifmidi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論