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

下載本文檔

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

文檔簡(jiǎn)介

1、蘭州理工大學(xué)技術(shù)工程學(xué)院2014年春季學(xué)期 匯編語(yǔ)言實(shí)訓(xùn) 課程設(shè)計(jì)題 目:_ 鋼琴鍵盤演奏_ 專業(yè)班級(jí):_2012級(jí)計(jì)算機(jī)科學(xué)與技術(shù)_姓 名:_ 韓國(guó)娟_ 學(xué) 號(hào): 12730103 指導(dǎo)教師: 劉樹群 成 績(jī):_ _摘要匯編語(yǔ)言是一種功能很強(qiáng)的程序設(shè)計(jì)語(yǔ)言,也是利用計(jì)算機(jī)所有硬件特性并能直接控制硬件的語(yǔ)言。匯編語(yǔ)言,作為一門語(yǔ)言,對(duì)應(yīng)于高級(jí)語(yǔ)言的編譯器,需要一個(gè)“匯編器”來把匯編語(yǔ)言原文件匯編成機(jī)器可執(zhí)行的代碼。此次的課程設(shè)計(jì)正是利用這個(gè)學(xué)期所學(xué)的匯編語(yǔ)言來設(shè)計(jì)一個(gè)鍵盤鋼琴的應(yīng)用程序,要求該匯編語(yǔ)言程序能實(shí)現(xiàn)鍵盤鋼琴的功能,就是在鍵盤上按下自定義的按鍵之后,可以從主板的蜂鳴器上發(fā)出一定頻率的

2、音調(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 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系統(tǒng)分析41.1問題描述41.2任務(wù)目標(biāo)41.3需求規(guī)定42系統(tǒng)總體設(shè)計(jì)62.1設(shè)計(jì)要求62.2

7、設(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ù)樂譜彈奏出不同的音樂

8、。 1.2任務(wù)目標(biāo) 設(shè)計(jì)匯編語(yǔ)言程序,實(shí)現(xiàn)鍵盤鋼琴功能,具體功能要求如下: 1>在鍵盤上自定義若干鍵對(duì)應(yīng)鋼琴鍵。 2>單擊鋼琴鍵,計(jì)算機(jī)發(fā)出相應(yīng)音階,發(fā)生時(shí)間自定義。 3>單擊“ESC”鍵退出程序。 1.3需求規(guī)定表1.1 產(chǎn)品功能需求表功能1. 設(shè)置界面2. 運(yùn)行出的界面可以可以擴(kuò)大與縮小,并且可以隨意移動(dòng)3. 設(shè)置ESC鍵的功能,使其退出4. 設(shè)置相應(yīng)鍵的音調(diào)、全音與半音5. 調(diào)用聲卡的代碼表1.2 用戶界面需求表需求名稱詳細(xì)要求窗體界面友好人機(jī)交互,愛好者可以很方便進(jìn)行操作支持聲音可以彈奏出美妙的音樂界面大小能改變界面大小,滿足需求表3 軟硬件環(huán)境需求表需求名稱詳細(xì)要求

9、硬件要求Intel Pentium III 800/AMD A8以上處理器、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ì)

10、采用程序模塊化設(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ì)此次匯編語(yǔ)言,通過在圖書館、網(wǎng)絡(luò)上收集資料,小組成員得到一致結(jié)論

11、用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)鍵的操作模塊:韓國(guó)娟對(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)

12、和子程序。故在此使用將主程序流程圖和子程序流程圖分開敘述的方法,敘述如下:主程序運(yùn)行后進(jìn)入windows界面,首先輸出提示字符。接著用戶通過鍵盤單擊所設(shè)置的按鍵,對(duì)其進(jìn)行判斷識(shí)別并作出相應(yīng)處理:ESC時(shí)退出程序;SPACE時(shí)暫停程序主程序流程圖如圖3-1所示:開始 對(duì)8255、8253初始化輸出提示字符串調(diào)用聲卡 設(shè)置全音設(shè)置半音是1234567qwrty鍵嗎?錯(cuò)誤是空格嗎?是ESC嗎?輸入字符返回主程序結(jié)束圖3.1 主流程圖NYYNNY暫停3.2暫停程序流程圖當(dāng)對(duì)輸入字符判斷為空格后,進(jìn)入暫停子程序。換行后輸出暫停信息,對(duì)8255進(jìn)行清零使得揚(yáng)聲器停止工作。隨后對(duì)下個(gè)輸入字符進(jìn)行判斷,若為E

13、SC則退出整個(gè)程序;若為空格則重新進(jìn)入正常工作狀態(tài);若為其他字符則等待下個(gè)字符的輸入。流程圖如圖3.2所示。入口輸入輸出暫停信息停止發(fā)聲Y是ESC嗎?N返入口輸入輸出暫停信息停止發(fā)聲是ESC嗎程回主程序N輸出字符是空格嗎?Y出口圖3.2 暫停程序流程圖3.3錯(cuò)誤程序流程圖當(dāng)對(duì)輸入字符判斷為空格、ESC、1234567qwrty以外的字符后,進(jìn)入錯(cuò)誤子程序。隨后重新對(duì)輸入字符進(jìn)行判斷。流程圖如圖2.3所示。入口換行輸出錯(cuò)誤信息N是空格嗎?Y輸出字符出口圖3.3 錯(cuò)誤程序流程圖4 程序段落說明4.1 初始化窗口程序基本達(dá)到設(shè)計(jì)要求,由于使用了聲卡調(diào)用功能,程序的操作更加簡(jiǎn)便,一般情況下能正確提示錯(cuò)

14、誤信息。但是在測(cè)試中也發(fā)現(xiàn)軟件的一些不足與缺陷,需要進(jìn)一步修改和維護(hù)時(shí)予以糾正??偟膩碚f,程序通過了測(cè)試。程序開始后先將提示字符串輸出,創(chuàng)建一個(gè)windows窗口。.dataClassName db "SimpleWinClass",0AppName db "SimpleVirtualPiano",0szText db'簡(jiǎn)單的虛擬鋼琴小程序 -> abcdefg調(diào),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創(chuàng)建聲音 對(duì)于最簡(jiǎn)單音調(diào)的建立,使其高音與低音分明,并對(duì)全音與半音進(jìn)行相應(yīng)操作。.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 對(duì)聲卡的調(diào)用對(duì)于聲卡的調(diào)用,主要是為了用戶能夠彈奏出不一樣的聲音,這樣就能夠具體的使用每一個(gè)鍵所對(duì)應(yīng)的聲調(diào)。.if playf = 1moveax, midiYuaddmidiPu, eaxmovcl, 8shlmidiPu, clandmidiP

24、u, 0ff00haddmidiPu, 680090h.if midiPlayFlag = 1h 5程序調(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:此鍵盤鋼琴演奏是作為匯編語(yǔ)言課程設(shè)計(jì)作品,僅供參考。2:此作品所用匯編為Windows 32匯編,所用開

25、發(fā)工具為MASMPlus欲打開工程項(xiàng)目需先安裝該軟件。3:欲編譯后成功運(yùn)行鍵盤鋼琴演奏需在鍵盤上單擊所設(shè)置的按鍵。4:只有嚴(yán)格按照上面所要求操作,該鋼琴鍵盤演奏才能正確使用。7設(shè)計(jì)總結(jié)在課程設(shè)計(jì)開始階段,我感到無(wú)從下手,畢竟上課時(shí)學(xué)到的都只是匯編的基本知識(shí),用來做課程設(shè)計(jì)時(shí)遠(yuǎn)遠(yuǎn)不夠的。后來,經(jīng)過上網(wǎng)查閱相關(guān)資料和翻閱書籍,并學(xué)習(xí)匯編語(yǔ)言的新知識(shí),心中才有了一個(gè)基本的思路。之后便和小組成員投入到了為期一周的匯編課設(shè)中。本次課程設(shè)計(jì)的主要任務(wù)是鋼琴鍵盤演奏,這其中涉及到8255A,8254芯片的利用,這讓我加深了對(duì)這些芯片的認(rèn)識(shí)。而這其中用到了端口地址及工作方式這些接口技術(shù)。經(jīng)過小組成員的共同努力

26、,我們確定了設(shè)計(jì)思路和流程圖,在編寫程序的過程中遇到了很多困難,但我們齊心協(xié)力,化解了一個(gè)又一個(gè)難題,總的來說,這次課程設(shè)計(jì)讓我收獲頗多,不但鞏固了匯編語(yǔ)言這門課的學(xué)習(xí),還學(xué)到了許多沒有學(xué)到了,增強(qiáng)了我獨(dú)立去分析問題與解決問題的能力。參考文獻(xiàn)【1】 王爽.匯編語(yǔ)言(第二版).清華大學(xué)出版社, 2008?!?】 沈美明,溫冬嬋.IBM-PC匯編語(yǔ)言程序設(shè)計(jì)(第二版).清華大學(xué)出版社, 2001?!?】 美Kip R.Irvine著,溫玉潔,等譯.Intel匯編語(yǔ)言程序設(shè)計(jì)(第五版).電子工業(yè)出版社, 2007?!?】 錢曉捷.匯編語(yǔ)言程序設(shè)計(jì)(第二版). 電子工業(yè)出版社, 2003?!?】 羅云

27、彬.Windows環(huán)境下32位匯編語(yǔ)言程序設(shè)計(jì)(第二版).電子工業(yè)出版社, 2006?!?】 Windows API函數(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ì),都付出了自己的努力和艱辛,在

28、此,謝謝所有人的努力和幫助,才使實(shí)驗(yàn)?zāi)軌虻靡皂樌赝瓿伞8戒浽闯绦?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'簡(jiǎn)單的虛擬鋼琴小程序 -> abcdefg調(diào),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;-音調(diào)-.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. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論