版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、學(xué)學(xué) 號(hào):號(hào):xxxxxxxxxxx 課課 程程 設(shè)設(shè) 計(jì)計(jì) 題題 目目鍵盤鋼琴匯編語言程序設(shè)計(jì) 學(xué)學(xué) 院院自動(dòng)化學(xué)院 專專 業(yè)業(yè)自動(dòng)化專業(yè) 班班 級(jí)級(jí)xxxxxxxx 姓姓 名名xxxxxx 指導(dǎo)教師指導(dǎo)教師xxxxxx 2012 年01 月12日 3 2 1 課程設(shè)計(jì)任務(wù)書課程設(shè)計(jì)任務(wù)書 學(xué)生姓名:學(xué)生姓名: xxxxxxxx 專業(yè)班級(jí):專業(yè)班級(jí): xxxxxxxxxxxxxx 指導(dǎo)教師:指導(dǎo)教師: xxxxxxxx 工作單位:工作單位: xxxxxxxxxxxx 題題 目目: : 鍵 盤 鋼 琴 匯 編 語 言 程 序 設(shè) 計(jì) 初始條件:初始條件: 采用16 位微處理器 8086 cpu
2、 以及86 系列微型計(jì)算機(jī)的指令系統(tǒng); 軟件設(shè)計(jì)平臺(tái)為多功能微型計(jì)算機(jī)實(shí)驗(yàn)軟件mfs 中的微機(jī)原理實(shí)驗(yàn)集成環(huán)境mf2kp, 仿真設(shè)計(jì)平臺(tái)為proteus 軟件。 要求完成的主要任務(wù): 設(shè)計(jì)匯編語言程序,實(shí)現(xiàn)鍵盤鋼琴功能,具體功能要求如下: (1)在鍵盤上自定義若干鍵對(duì)應(yīng)鋼琴鍵; (2)單擊鋼琴鍵,計(jì)算機(jī)發(fā)出相應(yīng)音階,發(fā)聲時(shí)間自定義; (3)單擊”esc”鍵退出程序。 音階與頻率的對(duì)應(yīng)關(guān)系如下表所示: 音符 45671234567 頻率/hz 175196220247262294330349392440494523587659 根據(jù)功能要求繪制程序流程圖、編寫完整的匯編語言程序并上機(jī)調(diào)試: 撰寫
3、課程設(shè)計(jì)說明書。課程設(shè)計(jì)說明書的撰寫格式如下: (1)設(shè)計(jì)說明書包括封面、任務(wù)書(指導(dǎo)老師提供)、正文、參考文獻(xiàn)(3 5 篇)、附錄(程序清 單,要求有注釋)、成績?cè)u(píng)定表(指導(dǎo)老師提供)。 (2)說明書正文包含總體方案論證(功能分析、系統(tǒng)連接圖設(shè)計(jì)或算法說明);程序流程圖設(shè)計(jì)及其 說明、軟件設(shè)計(jì)關(guān)鍵問題說明;程序調(diào)試說明、結(jié)果記錄及分析;課程設(shè)計(jì)收獲及心得體會(huì)。 (3)同一選題若為合作完成,設(shè)計(jì)說明書中需注明本人承擔(dān)的設(shè)計(jì)部分。 時(shí)間安排: (本次課程設(shè)計(jì)時(shí)間:2012 年1 月4 日-13 日,歷時(shí)一周半) 周次具體時(shí)間設(shè)計(jì)內(nèi)容 1 月 4 日 指導(dǎo)老師就課程設(shè)計(jì)內(nèi)容、設(shè)計(jì)要求、設(shè)計(jì)進(jìn)度安排
4、、評(píng)分標(biāo)準(zhǔn)等作具 體介紹。強(qiáng)調(diào)課程設(shè)計(jì)期間紀(jì)律要求。學(xué)生確定選題,明確設(shè)計(jì)內(nèi)容及 要求。 1 月 5 日根據(jù)選題查閱資料,完成方案的初步設(shè)計(jì),包括系統(tǒng)原理及算法。 第 一 周 1 月 6 日繪制系統(tǒng)硬件接線圖(接口應(yīng)用設(shè)計(jì)題必須)以及程序流程圖。 1 月 9 日學(xué)生根據(jù)程序流程圖,編寫程序代碼。 1 月 10 日仿真調(diào)試、修改。 1 月 11 日 學(xué)生結(jié)合程序流程圖解釋說明設(shè)計(jì)思路與算法;指導(dǎo)老師檢查程序運(yùn)行 效果,并就結(jié)果進(jìn)行評(píng)分。 1 月 12 日學(xué)生撰寫課程設(shè)計(jì)說明書。 第 二 周 1 月 13 日上交課程設(shè)計(jì)說明書,以及答辯。 指導(dǎo)教師簽名:指導(dǎo)教師簽名: 年年 月月 日日 系主任(或
5、責(zé)任教師)簽名:系主任(或責(zé)任教師)簽名: 年年 月月 日日 目 錄 引引 言言 .1 1 1 1 設(shè)計(jì)意義及要求設(shè)計(jì)意義及要求 .2 2 1.1 設(shè)計(jì)意義.2 1.2 設(shè)計(jì)要求.2 2 2 總體方案論證總體方案論證 .3 3 2.1 按鍵與音調(diào)頻率值的對(duì)應(yīng).3 2.2 揚(yáng)聲器的驅(qū)動(dòng)分析.5 2.3 發(fā)聲時(shí)間.6 3 3 程序設(shè)計(jì)程序設(shè)計(jì) .7 7 3.1 主程序設(shè)計(jì)及其流程圖.7 3.2 子程序設(shè)計(jì)及其流程圖.8 3.2.1 計(jì)算頻率值的子程序 fifre.8 3.2.2 發(fā)聲子程序 sound.9 3.2.3 延時(shí)子程序 delay.10 4 4 結(jié)果分析結(jié)果分析 .1111 4.1 程序
6、調(diào)試與改進(jìn).11 4.2 結(jié)果記錄及分析.12 心得與體會(huì)心得與體會(huì) .1313 參考文獻(xiàn)參考文獻(xiàn) .1414 附錄附錄 程序代碼程序代碼 .1515 理工微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說明書 1 引 言 匯編語言是一種功能很強(qiáng)的程序設(shè)計(jì)語言,也是利用計(jì)算機(jī)所有硬件特性并能直接 控制硬件的語言。匯編語言,作為一門語言,對(duì)應(yīng)于高級(jí)語言的編譯器,需要一個(gè)“匯 編器”來把匯編語言原文件匯編成機(jī)器可執(zhí)行的代碼。 高級(jí)的匯編器如 masm,tasm 等等為我們寫匯編程序提供了很多類似于高級(jí)語言的特 征,比如結(jié)構(gòu)化、抽象等。在這樣的環(huán)境中編寫的匯編程序,有很大一部分是面向匯編 器的偽指令,已經(jīng)類同于高級(jí)語言。
7、而此次的微機(jī)原理與接口技術(shù)(基于 16 位機(jī)) 的課程設(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)聲卡,來獲得更好更逼真的鋼琴音樂效果了。 理工微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說明書 2 3 2 1 1
8、設(shè)計(jì)意義及要求 1.1 設(shè)計(jì)意義 鍵盤鋼琴,電腦鍵盤代替鋼琴鍵演奏鋼琴樂曲。最原始、也是最流行的版本,音符 以 abcdegf 為編排。讓不懂音樂的網(wǎng)友可以快速上手,其體積小,簡單方便、易傳播, 因此在網(wǎng)上普及率最高。 鍵盤鋼琴讓人可以在閑暇時(shí)刻,可以小小地娛樂一下,增加生活的樂趣。由于一架 鋼琴過于昂貴,對(duì)于一般的普通工薪階層的人來說,還是很難接觸到鋼琴的,而鍵盤鋼 琴的出現(xiàn)正好讓那些業(yè)余愛好者,既滿足的對(duì)鋼琴音樂藝術(shù)的追求,也更廉價(jià)和便捷。 對(duì)于初學(xué)音樂的人來說,這樣的鍵盤鋼琴軟件更是訓(xùn)練的好助手,可以幫助你迅速熟悉 各音階音調(diào)和旋律節(jié)奏。因此,這樣的軟件也很多版本,有專業(yè)版,也有簡單的
9、flash 版,當(dāng)然也有此次課設(shè)要求設(shè)計(jì)的簡陋版。專業(yè)版能提供多種樂器音色、錄放功能、音 符顯示。不太好的地方是鍵盤要按下去才發(fā)音,沒有延時(shí),彈起來不太就手。flash 版音 色也比較好,提供了多鍵位,也可以自定義鍵位。 1.2 設(shè)計(jì)要求 設(shè)計(jì)匯編語言程序,實(shí)現(xiàn)鍵盤鋼琴功能,具體要完成的設(shè)計(jì)任務(wù)如下: (1) 在鍵盤上自定義若干鍵對(duì)應(yīng)著鋼琴鍵; (2) 單擊鋼琴鍵,計(jì)算機(jī)發(fā)出相應(yīng)的音階,發(fā)聲時(shí)間自定義; (3) 單擊“esc”鍵退出程序 音階與頻率的對(duì)應(yīng)關(guān)系如下所示: 音符 45671234567 頻率/hz 175196220247262294330349392440494523587659
10、 理工微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說明書 3 2 總體方案論證 2.1 按鍵與音調(diào)頻率值的對(duì)應(yīng) 設(shè)計(jì)此匯編語言程序,要實(shí)現(xiàn)鍵盤鋼琴,首先是按鍵的自定義設(shè)計(jì),因?yàn)轭}中要求 設(shè)計(jì)的按鍵音調(diào)音階有十四個(gè),但是從網(wǎng)上查資料得知,各音階與其相應(yīng)頻率有如表 1-1 所示的關(guān)系。 表 1-1 音階與頻率的對(duì)應(yīng)關(guān)系 單位:hz 從表中可知:高低音之間有著大約兩倍的關(guān)系,這樣就很方便數(shù)據(jù)的儲(chǔ)存了,只需 要將其中一個(gè)音度的頻率值存儲(chǔ)下了,再進(jìn)行二倍關(guān)系的換算即可得到倍低音、低音、 中音、高音、倍高音五種音度的音調(diào)頻率值。 因?yàn)轭}目中主要是對(duì)低、中、高音的要求,在這里就以低音為基準(zhǔn)存儲(chǔ)數(shù)據(jù)值和換算 其他音調(diào)頻率值,由
11、表 1-1 中得知低音音符 1 2 3 4 5 6 7 的音調(diào)頻率分別為 131、147、165、175、196、220、247。其中,中音各音調(diào)的頻率是相應(yīng)低音音調(diào)頻率的 兩倍, 高音各音調(diào)頻率是低音的四倍的。又因?yàn)榈鸵舻念l率值最大為 247,正好小于一 個(gè)無符字節(jié)數(shù)值的最大值 255,因此,只需要在程序的數(shù)據(jù)區(qū)內(nèi)安排七個(gè)字節(jié)來存放頻率 數(shù)據(jù),即: freq db 131,147,165,175,196,220,247 這樣,不僅節(jié)省了存儲(chǔ)空間,而且降低了存儲(chǔ)數(shù)據(jù)的復(fù)雜程度。 考慮到字母鍵盤一共也只用 26 個(gè),就不對(duì)所有音調(diào)都進(jìn)行字母鍵盤的按鍵定義了, 只補(bǔ)齊題目中所缺的高音和低音,共 2
12、1 個(gè)音階。則可以按如下表 1-2 中的對(duì)應(yīng)關(guān)系,設(shè) 置 21 個(gè)按鍵分別對(duì)應(yīng)著低、中、高三種音度的各音調(diào)的頻率值。由于字母所對(duì)應(yīng)的 a11022044088017603520 b12324749498819753950 c131262523104620934186 d147294587117523494698 e165330659131826375277 f175349698139727945587 g196392784156831366271 理工微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說明書 4 ascii 碼并不是連續(xù)的,因此在這里就將其的 ascii 碼存儲(chǔ)到數(shù)據(jù)區(qū),然后根據(jù)變址尋址 的方式 表
13、1-2 音階頻率與自定義按鍵的對(duì)應(yīng)表 對(duì)字母按鍵的 ascii 碼進(jìn)行地址編碼,可以將字母的 ascii 碼的按表 1-2 的順序存放,即: keys db qwertyu , asdfghj , zxcvbnm 這樣看來,就是將這些 ascii 碼值分出三類,分別為低音類、中音類、高音類。 根據(jù)輸入 key 的 ascii 碼值利用一個(gè) 21 次的 loop 循環(huán)就可以找到對(duì)應(yīng)的偏移地 址,再將所得的偏移地址減去首地址的偏移地址得到該 key 的地址相對(duì)值,再把該相對(duì) 值與 6 和 13 大小判斷偏移地址的所屬類別(小于等于 6 為低音類,大于 6 小于等于 13 為中音類,大于 13 為高
14、音類) 。 知道 key 的所屬類別,就知道基準(zhǔn)頻率值應(yīng)該乘以多大的倍數(shù)才是該 key 的真正 的頻率值,低音類倍數(shù)為 1,中音類倍數(shù)為 2,高音類倍數(shù)為 4。 接下來還要確定是哪個(gè)基準(zhǔn)頻率值,由于已經(jīng)知道所屬類別,如果是低音類則就是 地址相對(duì)值,如果是中音類,則地址相對(duì)值要減去 7,顯然高音類則減去 14,就得到了 一個(gè) 0 至 6 的編碼,再由換碼指令 xlat 對(duì)頻率數(shù)據(jù) freq 進(jìn)行換碼,可以很快得到該 key 的對(duì)應(yīng)的基準(zhǔn)頻率值。 最后是將得到的基準(zhǔn)頻率值乘以得到的類別倍數(shù),就得到最后想要的輸入 key 的音 調(diào)頻率值。舉例如下: 輸入按鍵 key 的 ascii 碼值為“d” ,
15、其 ascii 碼是 44h,在一個(gè) 21 次的 loop 循環(huán)下, 可以得到數(shù)據(jù)位 44h 的偏移地址 di,在將該偏移地址 di-首地址的偏移地址 keys=偏移地 址的相對(duì)值 9。 音度音名1234567 131147165175196220247低音頻率/hz 自定義按鍵qwertyu 131*2147*2165*2175*2196*2220*2247*2中音頻率/hz 自定義按鍵asdfghj 131*4147*4165*4175*4196*4220*4247*4高音頻率/hz 自定義按鍵zxcvbnm 理工微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說明書 5 因?yàn)?6913 屬于中音類,基準(zhǔn)頻率值
16、的倍數(shù)為 2。因?yàn)閷儆谥幸纛?key“d”編碼為 9-7=2,在換碼可以知道, “d”對(duì)應(yīng)的基準(zhǔn)頻率值為 165,故最后得到“d”的頻率值為 165*2=330hz。 因此,用此算法得到各個(gè)按鍵的頻率值是可行的。不僅節(jié)省了存儲(chǔ)空間,而且降低 了存儲(chǔ)數(shù)據(jù)的復(fù)雜程度,在程序編寫上可以將這一段寫成子程序,更加使得程序簡潔明 了。 2.2 揚(yáng)聲器的驅(qū)動(dòng)分析 該程序主要是驅(qū)動(dòng)電腦主板上的揚(yáng)聲器,根據(jù)音階音調(diào)不同的頻率值,來是揚(yáng)聲器 發(fā)出不同的聲音,從而產(chǎn)生想彈鋼琴一樣的感覺,當(dāng)然音質(zhì)是不能相提并論的。 (在這里 需要說明的是,現(xiàn)在大多數(shù)筆記本主板上已沒有這個(gè)揚(yáng)聲器,但是臺(tái)式機(jī)大多還是有的, 在臺(tái)式機(jī)上的
17、效果更好點(diǎn)。 ) 在電路上如下圖 2-1 所示: 圖 2-1 8253 的電路連接圖 在 pc/xt/at 家族中,計(jì)時(shí)器芯片的 3 個(gè)通道都用其專門的功能,通道 2 是用來控制 計(jì)算機(jī)的揚(yáng)聲器的聲音頻率的。通道 2 用于產(chǎn)生頻率信號(hào),故工作方式在方式 3,計(jì)數(shù)值 為 6a4h=1190,方波輸出頻率為 1.19mhz/1190=1khz,此信號(hào)決定了揚(yáng)聲器的聲調(diào),而通 道 2 的控制字則為 0b6h,1.19m 約等于十六進(jìn)制 12348ch。 8255(pb1) 理工微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說明書 6 由圖 1-1 可知 8253 的通道 2 計(jì)數(shù)由 8255a 的 pb0 控制,當(dāng) p
18、b0 輸出為高電平的時(shí) 候,是門 gate2 為高電平。此時(shí),8253 的通道 2 允許計(jì)數(shù),故通道 2 的輸出方波受 pb0 控制,從而控制揚(yáng)聲器的音調(diào)高低。通道 2 的輸出能否對(duì)揚(yáng)聲器產(chǎn)生持續(xù)控制還取決于 8255a 的 pb1。當(dāng) pb1 為“0”時(shí),out2 不能通過“與門” ;反之則可通過“與門”控制 揚(yáng)聲器。所以,揚(yáng)聲器發(fā)音時(shí)間的長短取決于 8255a 的 pb1 信號(hào)。另外,cpu 通過 8255a 的 c 口,得知 5283 通道 2 的狀態(tài)和揚(yáng)聲器驅(qū)動(dòng)器的狀態(tài)。 由上可知,需要揚(yáng)聲器正常發(fā)聲,需要 8253 和 8255a 的協(xié)同工作,而 8253 的控制 字在網(wǎng)上查的為 4
19、3h,則同過下面的程序來初始化 8253 mov al,0b6h out 43h,al 而通道 2 的端口地址為 42h,由于 n 值一般計(jì)算得出都大于 255,故需要一個(gè)字的寫入, 而又因?yàn)?8253 只有八位數(shù)據(jù)線,故字的寫入需要兩次,一般將 n 值直接給 ax 然后通過 下面的程序即可完成。 out 42h,al mov al,ah out 42h,al 而 8255a 能控制 8253 和揚(yáng)聲器,但是只要 pb0 和 pb1 同時(shí)為高調(diào)平,揚(yáng)聲器就為 開,則對(duì) 8255a 的控制就是在對(duì)揚(yáng)聲器的控制,在網(wǎng)上得知 8255a 的 b 口地址為 61h, 則可以通過下面的程序?qū)崿F(xiàn)揚(yáng)聲器的開
20、與關(guān)。 in al,61h or al,3 ;可以保證 pb0 和 pb1 同時(shí)為高調(diào)平 out 61h,al ;打開揚(yáng)聲器 mov al,ah and al,0fch ;可以保證 pb0 和 pb1 同時(shí)為低調(diào)平 out 61h,al ;關(guān)閉揚(yáng)聲器 2.3 發(fā)聲時(shí)間 因?yàn)橹灰ㄟ^ 8255a 將揚(yáng)聲器打開而不關(guān)閉,那么只要 8253 正常工作,揚(yáng)聲器就會(huì) 理工微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說明書 7 一直發(fā)聲,需要發(fā)聲時(shí)間多長,只需要寫一個(gè)延時(shí)子程序即可,利用 loop 和跳轉(zhuǎn)指令就 可以得到一個(gè)雙循環(huán)程序,在根據(jù)指令時(shí)間依次乘以 loop 循環(huán)的次和跳轉(zhuǎn)指令的跳轉(zhuǎn)次 數(shù)就可以得到想要的延時(shí)時(shí)間
21、。子程序循環(huán)完畢在將揚(yáng)聲器關(guān)閉即可。延時(shí)子程序時(shí)間 的長短就是發(fā)聲時(shí)間的長短。 3 程序設(shè)計(jì) 3.1 主程序設(shè)計(jì)及其流程圖 開始 數(shù)據(jù)初始化(輸入 keys,音符頻率 freq 等) 顯示提示信息 輸入按鍵 key 顯示請(qǐng)輸入正確 key 發(fā)聲子程序 sound 判斷輸入:key 是否為 esc ? 否 結(jié)束提示語 keys 首地址給 bx 返回 dos 循環(huán)次數(shù) cx=21 結(jié)束 計(jì)算 key 所對(duì)應(yīng)頻率值的子程序 fifre 判斷 key 和bx 是否相等 ? 否 理工微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說明書 8 bx=bx+1 否 loop 判斷 cx 是否為零 ? 是 圖 3-1 主程序的流程
22、圖 如圖 3-1,主程序的主要任務(wù): 1) 如果輸入的 key 為“esc”時(shí),直接跳轉(zhuǎn)至退出 exit 處; 2) 找出輸入按鍵 key 的偏移地址,若不是正確按鍵,則顯示提醒語句并重新輸入 key; 3) 將得到的 key 偏移地址送入子程序 fifre 計(jì)算得出頻率值,接著再將頻率值給子程 序 sound 并發(fā)出音調(diào),完成之后,跳轉(zhuǎn)至輸入口 input。 3.2 子程序設(shè)計(jì)及其流程圖 3.2.1 計(jì)算頻率值的子程序 fifre 開始 設(shè)置倍數(shù)標(biāo)志 dl=1 計(jì)算 di 相對(duì)于 keys 的值并給 di 小于等于 將 di 與 6 相比 大于 di=di-7 且 dl=dl+1 將 di
23、與 6 小于等于 相比 理工微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說明書 9 di=di-7 且 dl=dl+2 將 di 給 ax 后進(jìn)行換碼,相乘 dl 得到 ax 值給 bx 圖 3-2 子程序 fifer 流程圖 結(jié)束 計(jì)算輸入值所對(duì)應(yīng)頻率值的子程序 fifre 的主要任務(wù): 將偏移地址 di 減去首地址的偏移地址 keys 得到該 key 的地址相對(duì)值,再把該相 對(duì)值與 6 和 13 大小判斷偏移地址的所屬類別,小于等于 6 為低音類,基準(zhǔn)值倍數(shù) dl=1,大于 6 小于等于 13 為中音類,基準(zhǔn)值倍數(shù) dl=2,大于 13 為高音類,基準(zhǔn)值倍 數(shù) dl 為 4。 最后的 dl 為基準(zhǔn)頻率值賦給
24、 al,與基準(zhǔn)值倍數(shù) dl 相乘,得到頻率值 ax,再將 ax 最 后賦給 bx。最后子程序 fifer 結(jié)束時(shí),bx 即為輸入 key 的音調(diào)頻率值。 3.2.2 發(fā)聲子程序 sound 開始 向 8253 的 43h 寫入控制字 0b6h 給 dx、ax 分別賦值 12h、348ch div bx 得到計(jì)數(shù)初值 ax=n 分兩次向通道 2 端口 42h 寫入計(jì)數(shù)初值 n 打開揚(yáng)聲器 理工微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說明書 10 延時(shí)子程序 delay 關(guān)閉揚(yáng)聲器 結(jié)束 圖 3-3 子程序 sound 流程圖 子程序 fifer 流程圖如圖 3-3 所示,其主要任務(wù)是完成發(fā)聲,在該子程序中,分
25、兩 次向通道 2 端口 42h 寫入計(jì)數(shù)初值 n 的程序語句為: out 42h,al mov al,ah out 42h,al 打開和關(guān)閉揚(yáng)聲器的程序?yàn)椋?in al,61h or al,3 ;可以保證 pb0 和 pb1 同時(shí)為高調(diào)平 out 61h,al ;打開揚(yáng)聲器 mov al,ah and al,0fch ;可以保證 pb0 和 pb1 同時(shí)為低調(diào)平 out 61h,al ;關(guān)閉揚(yáng)聲器 開始 3.2.3 延時(shí)子程序 delay bx=4000 cx=0fffh 否 cx=0? 是 入棧保護(hù) bx 和 cx 理工微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說明書 11 bx=bx-1 bx=0? 恢復(fù)
26、 bx 和 cx 圖 3-4 延時(shí)子程序 delay 結(jié)束 4 結(jié)果分析 4.1 程序調(diào)試與改進(jìn) 按上面的思路和流程圖寫好程序后,對(duì)程序進(jìn)行調(diào)試: 1)一開始在輸入顯示這里,使用的是 dos 的 1 號(hào)單字符輸入,會(huì)產(chǎn)生“回顯” ,但 對(duì) 于鍵盤鋼琴來說,這一點(diǎn)沒有必要,于是改進(jìn)后使用 7 號(hào)無“回顯”的單字符輸入。之 前,一直想把音符也顯示出來,按的什么顯示相應(yīng)的音符,成功實(shí)現(xiàn)之后,在進(jìn)行第一 次答辯時(shí),研究生學(xué)長認(rèn)為此舉沒有很大的必要性,可以不顯示相應(yīng)的音符,經(jīng)過思考 之后也表示贊同,如圖 4-1 和 4-2 是不同程序的界面顯示,調(diào)試后看起來更簡潔明了; 理工微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說
27、明書 12 圖 4-1 改進(jìn)之前的程序界面 圖 4-2 改進(jìn)之后的程序界面 2)在第一次答辯時(shí),由于對(duì)題目認(rèn)識(shí)得不夠深入,只對(duì)任務(wù)書中要求的音符進(jìn)行了, 編寫,在答辯時(shí),在學(xué)長的指導(dǎo)下,回來查資料后知道了音符與頻率的一般規(guī)律,于是 改進(jìn)方案,將高、低音補(bǔ)齊,得到更多的音調(diào)選擇; 3)在算法上的改進(jìn),之前是算法是只根據(jù)數(shù)據(jù)區(qū)地址的關(guān)系進(jìn)行推算所有頻率值的 地址,這樣既浪費(fèi)存儲(chǔ)空間,又不能很好實(shí)現(xiàn)算法,沒有可變性,在得知音符的 2 倍關(guān) 系之后,再次思考得出上面的新算法,新算法較之前的,不但減少了存儲(chǔ)空間,算法也 變得簡單易懂。 4.2 結(jié)果記錄及分析 調(diào)試之后,運(yùn)行結(jié)果和課題的設(shè)計(jì)要求完全相符合
28、。 1) 開始運(yùn)行程序,能看到如下圖 4-3 所示的“welcome to piano of keyboard” 程序運(yùn)行開始提示語,緊接著出現(xiàn)的是如圖 4-4 所示的操作提示語, 圖 4-3 程序運(yùn)行開始提示語 圖 4-4 程序操作提示語 2)分別按鍵盤上的按鍵 q、w、e、r、t、y、u 得到低音聲的各音調(diào), 分別按鍵盤上的按鍵 a 、s、d、f、g、h、j 得到中音聲的各音調(diào); 分別按鍵盤上的按鍵 z、x、c、v、b、n、m 得到高音聲的各音調(diào)。 理工微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說明書 13 3)單擊“esc”可以退出程序,并顯示退出提示語,如圖 4-5 所示; 圖 4-5 程序退出時(shí)顯示
29、提示語 理工微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說明書 14 心得與體會(huì) xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx初始化數(shù)據(jù)區(qū) lea dx,welc mov ah,9 int 21h ;顯示提示語句 input: mov ah,7 int 21h ;不回顯輸入鍵盤的 key cmp al,1bh ;判斷輸入 key 是否為“esc” jz exit ;若輸入 key 為“esc”則跳轉(zhuǎn)到退
30、出 exit lea di,keys mov cx,21 find: cmp al,di jz sing ;找到 key 相對(duì)應(yīng)的偏移地址 di 則跳轉(zhuǎn)至 sing inc di loop find ;根據(jù)輸入 key 的 ascii 碼找到相對(duì)應(yīng)的偏移地址 lea dx,remi mov ah,9 int 21h ;輸入的 key 不正確,顯示提醒請(qǐng)輸入正確的 key 理工微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說明書 17 jmp input ;不是正確的輸入 key,則跳轉(zhuǎn)至 input sing: call fifre ;進(jìn)入計(jì)算 key 所對(duì)應(yīng)頻率值的子程序 call sound ;進(jìn)入根據(jù)頻率值
31、發(fā)出音調(diào)的子程序 jmp i nput ;發(fā)聲完畢后跳轉(zhuǎn)至 input exit: lea dx,last mov ah,9 int 21h ;顯示退出時(shí)的字幕 mov ax,4c00h int 21h ;返回 dos fifre proc ;計(jì)算 key 所對(duì)應(yīng)頻率值的子程序 mov dl,1 ;標(biāo)記頻率基準(zhǔn)值的倍數(shù)值 lea bx,keys sub di,bx ;計(jì)算偏移地址相對(duì)與首地址的值 cmp di,6 jna sou ;屬于低音直接跳轉(zhuǎn)至 sou sub di,7 ;屬于中音,將偏移地址減 7 add dl,1 ;標(biāo)記倍數(shù)值加倍為 2 cmp di,6 jna sou ;屬于中音,
32、跳轉(zhuǎn)至 sou sub di,7 ;屬于高音,將偏移地址再減 7 add dl,2 ;標(biāo)記倍數(shù)值再加倍為 4 sou: mov ax,di ;將被換碼給 al lea bx,freq xlat mul dl ;頻率基準(zhǔn)值乘以倍數(shù)得到 key 所對(duì)應(yīng)的頻率值 mov bx,ax ret fifre endp sound proc ;根據(jù)頻率值發(fā)出音調(diào)的子程序 mov al,0b6h out 43h,al ;向 8253 的 43h 寫入控制字 mov dx,12h mov ax,348ch div bx ;計(jì)算計(jì)數(shù)初值 n out 42h,al mov al,ah out 42h,al ;向通道 2 端口 42h 寫入計(jì)數(shù)初值 n in al,61h or al,3 理工微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說明書 18 out 61h,al ;打開揚(yáng)聲器 call delay ;進(jìn)入延時(shí)子程序 in al,61
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 石河子大學(xué)《應(yīng)急人力資源管理》2022-2023學(xué)年第一學(xué)期期末試卷
- 物業(yè)智能化解決方案
- 石河子大學(xué)《數(shù)學(xué)文化賞析》2021-2022學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《口腔頜面外科學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《工程熱力學(xué)與傳熱學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 精神科新冠肺炎演練
- 沈陽理工大學(xué)《數(shù)學(xué)建?!?023-2024學(xué)年第一學(xué)期期末試卷
- 沈陽理工大學(xué)《液壓與氣動(dòng)技術(shù)》2022-2023學(xué)年第一學(xué)期期末試卷
- 沈陽理工大學(xué)《電氣控制與PC技術(shù)》2022-2023學(xué)年期末試卷
- 沈陽理工大學(xué)《場地設(shè)計(jì)》2021-2022學(xué)年第一學(xué)期期末試卷
- 電機(jī)與電氣控制技術(shù)課程說課
- 2014年中級(jí)統(tǒng)計(jì)師《統(tǒng)計(jì)工作實(shí)務(wù)》真題
- 作業(yè)本印制服務(wù)投標(biāo)方案(技術(shù)標(biāo))
- 行政批復(fù)協(xié)議書范本
- 清理雜樹雜草施工方案范本
- 【語文】寧波市小學(xué)四年級(jí)上冊(cè)期中試卷
- 《埃隆·馬斯克傳》導(dǎo)讀
- 環(huán)保設(shè)施安全風(fēng)險(xiǎn)評(píng)估報(bào)告
- MOOC創(chuàng)新創(chuàng)業(yè)與管理基礎(chǔ)(東南大學(xué))
- 【基于活動(dòng)理論的信息技術(shù)課程教學(xué)研究8300字(論文)】
- 年產(chǎn)15萬噸PET的生產(chǎn)工藝設(shè)計(jì)-畢業(yè)論文
評(píng)論
0/150
提交評(píng)論