資源描述:
《音樂演奏程序設(shè)計(jì)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、信息與電氣工程學(xué)院電子信息工程CDIO一級項(xiàng)目(2013/2014學(xué)年第一學(xué)期)題目:音樂演奏程序設(shè)計(jì)專業(yè)班級:xxxxxxxxxxxxxxxxx學(xué)生姓名:xxxxxxx學(xué)號:xxxxxxxxx指導(dǎo)教師:xxxxxxx設(shè)計(jì)周數(shù):設(shè)計(jì)成績:2013年12月28日-17-1、項(xiàng)目設(shè)計(jì)目的1.1掌握接口電路的應(yīng)用和設(shè)計(jì)技術(shù)。1.2掌握匯編語言的設(shè)計(jì)思路。1.3掌握8086的控制流程,以及8255和8253芯片的功能。1.4用匯編程序完成鍵控音樂播放器,用8253定時(shí)器來產(chǎn)生聲音。1.5使學(xué)生能夠較全面地鞏固和應(yīng)用課堂中所學(xué)的基本理論和程序設(shè)計(jì)方法,能夠較熟練地完成匯編語言程序的設(shè)計(jì)和調(diào)
2、試。2、項(xiàng)目設(shè)計(jì)正文2.1設(shè)計(jì)內(nèi)容要求完成一個(gè)音樂程序,即通過按下鍵盤上某個(gè)按鍵就可以按預(yù)先設(shè)定的程序播放音樂或者終止程序。比如:按大寫字母“1”,唱樂曲“沂蒙山小調(diào)”;按大寫字母“2”,唱樂曲“生日快樂”按大寫字母“3”,唱樂曲“棉花糖”;按"4"鍵,退出。并且可以重復(fù)操作。2.2總體設(shè)計(jì)思路在IBM-PC/XT機(jī)中都帶有8253-5定時(shí)/計(jì)數(shù)器,IBM-PC/AT中帶有8254定時(shí)/計(jì)數(shù)器,這兩種芯片功能十分類似。本文通過對8253-5定時(shí)/計(jì)數(shù)器芯片的操作實(shí)現(xiàn)音樂演奏。該聲音接口通過匯編語言對8253-5的端口直接進(jìn)行操作,可以不必要過多的使用BIOS的調(diào)用和DOS的調(diào)用。
3、計(jì)數(shù)器芯片有3個(gè)通道,各自具有專用功能。通道0時(shí)系統(tǒng)的始終節(jié)拍計(jì)時(shí)器,通道1專用于產(chǎn)生動態(tài)RAM的定時(shí)刷新信號,通道2用來控制計(jì)算機(jī)的揚(yáng)聲器的聲音頻率。該音樂演奏主要用到通道2的功能,使通道2工作在“方波發(fā)生器”方式,產(chǎn)生相應(yīng)頻率的音調(diào)送至喇叭驅(qū)動電路,使喇叭發(fā)出不同音調(diào)的聲音。使用8255A的PB0控制通道2的計(jì)數(shù),PB1控制通道2的輸出對揚(yáng)聲器產(chǎn)生控制的時(shí)間。人機(jī)交互包括屏幕顯示提示語以及人工輸入相應(yīng)參數(shù),主要應(yīng)用到BIOS的10H號中斷調(diào)用以及DOS的21H號中斷調(diào)用。BIOS的10H號中斷調(diào)用用于顯示器驅(qū)動,設(shè)置顯示模式和光標(biāo)位置;DOS的21H號中斷調(diào)用用于單字符輸入以
4、及多字符輸出顯示。音樂演奏實(shí)現(xiàn)的一個(gè)主要步驟是樂譜編程。通過相應(yīng)的頻率表將樂譜中對應(yīng)的音符轉(zhuǎn)化為計(jì)數(shù)器的計(jì)數(shù)初值,節(jié)奏通過延時(shí)程序轉(zhuǎn)化為對喇叭發(fā)音時(shí)間的控制,從而實(shí)現(xiàn)音符和節(jié)拍的數(shù)字化。2.3流程圖2.3.1主程序流程圖-17-圖2-1系統(tǒng)流程圖開始顯示提示信息接收鍵盤輸入是“4”?是“1”?是“3”?是“2”?退出程序跳轉(zhuǎn)到相應(yīng)音樂播放程序調(diào)用MUSIC,播放音樂顯示錯(cuò)誤提示調(diào)用清屏程序是是是是否否否否圖2-1主程序流程圖2.3.2MUSIC子程序流程圖-17-主程序調(diào)用返回主程序指向下一個(gè)數(shù)據(jù)調(diào)用GENSOUND頻率值是“-1”?裝入音符頻率值寄存器入棧yn圖2-2MUSIC
5、子程序流程圖2.4通用發(fā)聲程序設(shè)計(jì)原理PC機(jī)發(fā)聲系統(tǒng)以8254的2號計(jì)數(shù)器為核心。系統(tǒng)初始化時(shí),2號計(jì)數(shù)器I作在“方波發(fā)生器”方式,初值為二進(jìn)制數(shù),寫入順序?yàn)橄鹊秃蟾?,CLK2為1.193182MHz,當(dāng)計(jì)數(shù)初值為533H時(shí),OUT2輸出的方波大約為900Hz,經(jīng)過簡單的濾波之后,送至揚(yáng)聲器。改變1.4號計(jì)數(shù)器的計(jì)數(shù)初值就可以使揚(yáng)聲器發(fā)出不同頻率的音響。ROMBIOS中有個(gè)BEEP子程序,這能根據(jù)BL中組出的時(shí)間計(jì)數(shù)值控制8254定時(shí)器,產(chǎn)生持續(xù)時(shí)間為1個(gè)或幾個(gè)0.5秒,頻率為896HZ的聲音,我們可以利用并修改BEEP,使其產(chǎn)生任一頻率的聲音。為此我們需要做兩點(diǎn)修改,首先,BE
6、EP程序只能產(chǎn)生896HZ的聲音,我們的通用發(fā)聲程序應(yīng)能產(chǎn)生任一頻率的聲音。其次,BEEP產(chǎn)生聲音的持續(xù)時(shí)間(音長)只能是0.5秒的倍數(shù),我們希望聲音的持續(xù)時(shí)間更易于調(diào)整,例如可以是10ms的倍數(shù)。-17-我們知道BEEP能將計(jì)數(shù)值533H送給定時(shí)器2產(chǎn)生896HZ的聲音的,那么產(chǎn)生其它頻率聲音的時(shí)間計(jì)數(shù)值應(yīng)為:533H×896÷給定頻率=123280H÷給定頻率發(fā)聲程序包括3個(gè)步驟:(1)在8253中的42端口送一個(gè)控制字0B6H(10110110B),該控制字對定時(shí)器2進(jìn)行初始化,使定時(shí)器2準(zhǔn)備接收計(jì)數(shù)初值。(2)在8253中的42H端口(Timer2)裝入一個(gè)16位的計(jì)數(shù)值
7、(533H×895/頻率),以建立將要產(chǎn)生的聲音頻率。(3)把輸出端口61H的PB0、PB1兩位置1,發(fā)出聲音。對于發(fā)音部分。PC機(jī)上的大多數(shù)輸入/輸出(I/O)都是由主板上的8255(或8255A)可編程序外圍接口芯片(PPI)管理的。PPI包括3個(gè)8位寄存器,兩個(gè)用于輸入功能,一個(gè)用于輸出功能。輸入寄存器分配的I/O端口號為60H和62H,輸出寄存器分配的I/O端口號為61H。由PPI輸出寄存器中的0、1兩位來選擇揚(yáng)聲器的驅(qū)動方式。連接到揚(yáng)聲器上的是定時(shí)器2,從上圖可以看到,