版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院</p><p><b> 硬件課程設(shè)計(jì)報(bào)告</b></p><p> 姓 名: 學(xué) 號: </p><p> 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) </p>
2、;<p> 班 級: 計(jì)科班 </p><p> 設(shè)計(jì)題目 可存儲式電子琴 </p><p> 成 員:
3、 </p><p> 指導(dǎo)教師 職 稱: </p><p> 2013年 10月 徐州 </p><p><b> 摘 要</b></p
4、><p> 此次硬件課程設(shè)計(jì)是利用微機(jī)原理與接口技術(shù)課程中所學(xué)的8253,8255芯片,設(shè)計(jì)可存儲式電子琴。在匯編語言環(huán)境下,利用上述兩種芯片,編程讓8255通過識別鍵盤產(chǎn)生鍵值,8253識別發(fā)聲從而實(shí)現(xiàn)計(jì)算機(jī)按照按鍵的不同而發(fā)出不同頻率的聲音。我們利用學(xué)習(xí)的微機(jī)原理與接口技術(shù)這門課程課上我們學(xué)到的一些計(jì)算機(jī)硬件工作的基本原理,匯編語言程序設(shè)計(jì)方法,微型計(jì)算機(jī)接口技術(shù)建立了微型計(jì)算機(jī)系統(tǒng)的整體概念,初步形成了微機(jī)系
5、統(tǒng)軟硬件開發(fā)的能力??纱鎯κ诫娮忧倌軌?qū)崿F(xiàn)彈奏,演奏的功能,當(dāng)按下彈奏鍵時(shí),實(shí)現(xiàn)彈奏功能,發(fā)出音符對應(yīng)頻率的聲音,按下演奏鍵時(shí),實(shí)現(xiàn)演奏功能,播放預(yù)存的音樂,按下指定的音調(diào)選擇按鍵后,選擇低音,中音或高音,則分別用低音,中音或高音進(jìn)行彈奏或演奏。可存儲式電子琴可用于設(shè)計(jì)小型發(fā)聲玩具,由于本電子琴設(shè)計(jì)簡單,稍加修改便可用于其它地方,如報(bào)警防盜器部件,音樂門鈴等,具有一定的商業(yè)價(jià)值。</p><p><b>
6、; 關(guān)鍵詞:</b></p><p> 可存儲電子琴;8255;8253;門控信號;匯編語言程序設(shè)計(jì)</p><p><b> 目 錄</b></p><p><b> 一、總體設(shè)計(jì)部分</b></p><p> 1 設(shè)計(jì)任務(wù)與要求……………………………………………………
7、…………………6</p><p> 1.1設(shè)計(jì)任務(wù)…………………………………………………………………………6</p><p> 1.2實(shí)驗(yàn)原理與內(nèi)容…………………………………………………………………6</p><p> 1.2.1實(shí)驗(yàn)原理………………………………………………………………………6</p><p> 1.2.2實(shí)驗(yàn)接線……
8、…………………………………………………………………7</p><p> 2 總體方案…………………………………………………………………………7</p><p> 2.1總體方案說明…………………………………………………………………… 7</p><p> 2.2電路原理圖與說明………………………………………………………………7</p><
9、p> 2.2.1電路圖………………………………………………………………………8</p><p> 2.2.2說明……………………………………………………………………8</p><p> 2.3各音符頻率表……………………………………………………………9</p><p> 3硬件方案………………………………………………………………9</p>
10、<p> 3.1可編程計(jì)數(shù)器/定時(shí)器8253……………………………………………………9</p><p> 3.1.1 8253內(nèi)部結(jié)構(gòu)和引腳…………………………………………………10</p><p> 3.1.2 8253方式控制字格式…………………………………………………11</p><p> 3.1.3 8253工作方式…………………………
11、…………………………………11</p><p> 3.1.4 本設(shè)計(jì)中8253的功能…………………………………………………12</p><p> 3.2可編程外圍接口芯片8255………………………………………………………12</p><p> 3.2.1 8255內(nèi)部結(jié)構(gòu)…………………………………………………12</p><p> 3
12、.2.2 8255引腳功能…………………………………………………13</p><p> 3.2. 3 8255的方式控制字格式…………………………………………………14</p><p> 3.2.4本設(shè)計(jì)中8255的功能…………………………………………………14</p><p> 4程序流程圖………………………………………………………………14</p&
13、gt;<p> 4.1主程序流程圖…………………………………………………15</p><p> 4.2彈奏子程序流程圖…………………………………………………15</p><p> 4.2.1高音子程序流程圖…………………………………………………15</p><p> 4.2.2中音子程序流程圖…………………………………………………16</
14、p><p> 4.2.3低音子程序流程圖…………………………………………………17</p><p> 4.3播放預(yù)定音樂子程序流程圖…………………………………………………18</p><p> 4.4彈奏子程序流程圖…………………………………………………19</p><p> 4.5發(fā)音子程序流程圖…………………………………………………2
15、0</p><p> 4.6鍵盤檢測流程圖…………………………………………………21</p><p> 5軟件方案………………………………………………………………22</p><p> 5.1發(fā)音部分功能實(shí)現(xiàn)…………………………………………………22</p><p> 5.2變調(diào)功能的實(shí)現(xiàn)…………………………………………………23&l
16、t;/p><p> 5.3彈奏功能的實(shí)現(xiàn)…………………………………………………24</p><p> 5.4播放預(yù)定音樂功能的實(shí)現(xiàn)………………………………………………25</p><p> 6完整程序………………………………………………………………25</p><p> 7 結(jié)論………………………………………………………………………………
17、…32</p><p> 8 心得…………………………………………………………………………………32 </p><p> 9參考文獻(xiàn)………………………………………………………………………………33</p><p> 10附錄…………………………………………………………………………………34</p><p><b> 一、總體
18、設(shè)計(jì)部分</b></p><p> 1 、設(shè)計(jì)任務(wù)與要求</p><p><b> 1.1設(shè)計(jì)任務(wù)</b></p><p> 本次硬件課程設(shè)計(jì)的任務(wù)和要求是通過基于8255A芯片和8253芯片上的電路設(shè)計(jì)和電路連接并通過對它們進(jìn)行編程,實(shí)現(xiàn)一個具有可存儲音樂等功能的電子琴小器件。該器件不僅具有基本的彈奏功能(輸入不同的鍵能發(fā)出
19、不同頻率的聲音即音符),還具有播放預(yù)定音樂,高低音轉(zhuǎn)換的功能。預(yù)想功能為:按數(shù)字1-8為彈奏功能;按A選擇高音,按B選擇中音,按C選擇低音;按字母D為演奏功能。</p><p> 1.2實(shí)驗(yàn)原理與內(nèi)容</p><p><b> 1.2.1實(shí)驗(yàn)原理</b></p><p> 《可存儲式電子琴硬件課程設(shè)計(jì)》主要是居于8255A芯片和8253芯
20、片的基本功能進(jìn)行設(shè)計(jì)的。我們將8255A芯片的A端口作為輸出端口,而B端口作為輸入端口,兩個端口都與鍵盤相連接:A端口的低四位連在鍵盤的行線上,B端口的高四位連在鍵盤的列線上。再將它的輸出端口PC1與8253相應(yīng)門控信號GATE0相連接。這樣可以通過控制PC1來控制8253的輸出:當(dāng)PC1為“1”時(shí),GATE0有效,8253能夠輸出頻率方波;當(dāng)PC1為“0”時(shí),GATE0無效,OUT0無法輸出頻率方波。而8253的時(shí)鐘輸入引腳CLK0與
21、相應(yīng)的時(shí)鐘發(fā)生器相連接,8253的0通道的OUT0信號與8255A的PC0通過與門以后與蜂鳴器相連接,從而驅(qū)動并控制蜂鳴器發(fā)音的發(fā)音和終端:當(dāng)PC0為“1”時(shí)蜂鳴器連通,能夠發(fā)出聲音;當(dāng)PC0為“0”時(shí)蜂鳴器被中斷,不能發(fā)出聲音。這樣,我們在硬件上實(shí)現(xiàn)了通過8255A芯片輸入設(shè)備的輸入信號并通過它傳送給8253,讓8253進(jìn)行相應(yīng)的處理后輸出給蜂鳴器的功能。</p><p> 從8255A芯片的端口中確認(rèn)是鍵盤
22、中的哪一個鍵被按下,并進(jìn)行編碼。從8255A的B端口中讀入鍵盤的狀態(tài),進(jìn)行一系列的比較。確認(rèn)是哪一個鍵按下了,接著再通過著不同的鍵被按下進(jìn)行執(zhí)行不同的程序段。將不同的鍵所對應(yīng)的頻率的N值送入8253的0通道。這樣,就產(chǎn)生了不同頻率的方波。在送入揚(yáng)聲器后就能發(fā)出不同音頻和音長的聲音。</p><p><b> 圖1 電子琴電路圖</b></p><p> 1.2.2
23、實(shí)驗(yàn)接線 </p><p> Y1/IO地址 接 CS/8255</p><p> Y0/IO地址 接 CS/8253</p><p> 1M地址 接 CLK0/8253</p><p> PC1/8255地址 接 CATE0/8253</p><p> A/與
24、門 接 OUT0/8253</p><p> B/與門 接 PC0/8253</p><p> Y/與門 接 喇叭</p><p><b> 2 總體方案</b></p><p><b> 2.1總體方案說明</b>&l
25、t;/p><p> 1 .用實(shí)驗(yàn)箱上的鍵盤數(shù)字鍵對應(yīng)電子琴的8個琴鍵和4個功能鍵。</p><p> 2. 8255A和8254配合構(gòu)成音頻發(fā)生器。8255A的PC1口施加控制信號給與門用來控制揚(yáng)聲器的開關(guān)狀態(tài),再利用設(shè)置不用的計(jì)數(shù)值,使8254輸出不同頻率的波形,控制揚(yáng)聲器的發(fā)聲頻率。</p><p> 3.8255A門控信號與8254的頻率控制信號經(jīng)與門后驅(qū)動
26、揚(yáng)聲器發(fā)出各種音頻和音長聲音。</p><p> 2.2電路原理圖與說明</p><p><b> 2.2.1電路圖</b></p><p><b> 2.2.2說明</b></p><p> ?。?)各芯片及器件地址:</p><p> 8255的控制口地址為:28
27、BH,A口地址為:288H,B口地址為289H,C口地址為28AH。</p><p> 8254的控制口地址為:283H,通道0地址為:280H,通道1地址為:281H,通道2地址為:282H。</p><p><b> ?。?)按鍵說明:</b></p><p><b> 1——dou音</b></p>
28、<p><b> 2——ruai音</b></p><p><b> 3——mi音</b></p><p><b> 4——fa音</b></p><p><b> 5——sao音</b></p><p><b> 6——l
29、a音</b></p><p><b> 7——xi音</b></p><p><b> 8——音</b></p><p><b> A——選擇高音</b></p><p><b> B——選擇中音</b></p><
30、p><b> C——選擇低音</b></p><p><b> D——播放預(yù)定音樂</b></p><p> 2.3 各音符頻率表</p><p> 計(jì)數(shù)初值N=時(shí)鐘頻率/音階頻率.</p><p> 可以通過各音階的對應(yīng)頻率值為8253賦初值,然后輸出到揚(yáng)聲器,以產(chǎn)生相應(yīng)音階的發(fā)音
31、。在發(fā)音過程中,可分別為8253的GATE0端輸入0和1來控制開始發(fā)音和停止發(fā)音。</p><p> 3硬件方案 </p><p> 3.1可編程計(jì)數(shù)器/定時(shí)器8253</p><p> 3.1.1 8253內(nèi)部結(jié)構(gòu)和引腳</p>
32、<p> 圖3 8253內(nèi)部結(jié)構(gòu)和引腳</p><p> 從圖可見,8253內(nèi)部包含數(shù)據(jù)總線緩沖器、讀/寫控制邏輯、控制字寄存器和3個結(jié)構(gòu)完全相同的計(jì)數(shù)器,這3個計(jì)數(shù)器分別稱為計(jì)數(shù)器0、計(jì)數(shù)器1和計(jì)數(shù)器2。</p><p><b> 圖4 8253引腳</b></p><p> A1、A0:地址輸入線,用來址8253內(nèi)部的
33、4個端口,即3個計(jì)數(shù)器和1個控制字寄存器與CPU系統(tǒng)地址線相連。</p><p> CLK0-2:時(shí)鐘脈沖輸入端,用于輸入定時(shí)脈沖或計(jì)數(shù)脈沖信號。CLK可以是系統(tǒng)的時(shí)鐘脈沖,也可以由系統(tǒng)時(shí)鐘分頻或者其他脈沖源提供。當(dāng)用于定時(shí)時(shí),這個脈沖必須是均勻的、連續(xù)的、周期精確的,而用于計(jì)數(shù)時(shí),這個脈沖可以是不均勻的、斷續(xù)的、周期不定的。</p><p> GATE0-3:門控輸入端,用于外部控制
34、計(jì)數(shù)器的啟動計(jì)數(shù)和停止計(jì)數(shù)的操作。兩個或兩個以上計(jì)數(shù)器連用時(shí),可用此信號同步,也可用于與外部某信號的同步。</p><p> OUT0-2:計(jì)數(shù)輸出,當(dāng)計(jì)數(shù)器從初值開始完成計(jì)數(shù)操作進(jìn),OUT引腳輸出相應(yīng)的信號。</p><p> 3.1.2 8253方式控制字格式</p><p> 3.1.3 8253的工作方式</p><p>
35、8253中各通道有6種工作方式,以完成定時(shí)、計(jì)數(shù)或脈沖發(fā)生器等多種功能。分別為方式0(技術(shù)結(jié)束則中斷)、方式1(單脈沖發(fā)生器)、方式2(速率波發(fā)生器)、方式3(方波發(fā)生器)、方式4(軟件觸發(fā)方式計(jì)數(shù))、方式5(硬件觸發(fā)方式計(jì)數(shù))</p><p> 3.1.4 本設(shè)計(jì)中8253的功能 </p><p> 使用8253的通道0計(jì)數(shù)初值的設(shè)置來控制發(fā)音。當(dāng)某一時(shí)刻按下一個鍵的時(shí),可以通過和各
36、鍵的寄存器值比較來判斷按下鍵。每個音階都有一個確定的頻率。計(jì)數(shù)初值N=時(shí)鐘頻率/音階頻率。</p><p><b> 各音符頻率表</b></p><p> 3.2 可編程外圍接口芯片8255</p><p> 3.2.1 8255的內(nèi)部結(jié)構(gòu)</p><p> 內(nèi)部結(jié)構(gòu)如圖所示,由以下4個部分組成:</
37、p><p><b> 圖5內(nèi)部結(jié)構(gòu)</b></p><p> 3.2.2 引腳功能</p><p> 如圖所示8255A的芯片引腳信號:</p><p> 圖6 8255引腳圖</p><p> RESET:復(fù)位輸入線,當(dāng)該輸入端處于高電平時(shí),所有內(nèi)部寄存器(包括控制寄存器)均被清除,所
38、有I/O口均被置成輸入方式。 </p><p> CS:芯片選擇信號線,當(dāng)這個輸入引腳為低電平時(shí),即/CS=0時(shí),表示芯片被選中,允許8255與CPU進(jìn)行通訊;/CS=1時(shí),8255無法與CPU做數(shù)據(jù)傳輸. </p><p> RD:讀信號線,當(dāng)這個輸入引腳為低電平時(shí),即/RD=0且/CS=0時(shí),允許8255通過數(shù)據(jù)總線向CPU發(fā)送數(shù)據(jù)或狀態(tài)信息,即CPU從8255讀取信息或數(shù)據(jù)。 &
39、lt;/p><p> WR:寫入信號,當(dāng)這個輸入引腳為低電平時(shí),即/WR=0且/CS=0時(shí),允許CPU將數(shù)據(jù)或控制字寫入8255。 </p><p> D0~D7:三態(tài)雙向數(shù)據(jù)總線,8255與CPU數(shù)據(jù)傳送的通道,當(dāng)CPU 執(zhí)行輸入輸出指令時(shí),通過它實(shí)現(xiàn)8位數(shù)據(jù)的讀/寫操作,控制字和狀態(tài)信息也通過數(shù)據(jù)總線傳送。 </p><p> PA0~PA7:端口A輸入輸出線
40、,一個8位的數(shù)據(jù)輸出鎖存器/緩沖器, 一個8位的數(shù)據(jù)輸入鎖存器。 </p><p> PB0~PB7:端口B輸入輸出線,一個8位的I/O鎖存器, 一個8位的輸入輸出緩沖器。 </p><p> PC0~PC7:端口C輸入輸出線,一個8位的數(shù)據(jù)輸出鎖存器/緩沖器, 一個8位的數(shù)據(jù)輸入緩沖器。端口C可以通過工作方式設(shè)定而分成2個4位的端口, 每個4位的端口包含一個4位的鎖存器,分別與端口A
41、和端口B配合使用,可作為控制信號輸出或狀態(tài)信號輸入端口。' </p><p> A0,A1:地址選擇線,用來選擇8255的PA口,PB口,PC口和控制寄存器:</p><p> 當(dāng)A0=0,A1=0時(shí),PA口被選擇; </p><p> 當(dāng)A0=0,A1=1時(shí),PB口被選擇; </p><p> 當(dāng)A0=1,A1=0時(shí),PC口
42、被選擇; </p><p> 當(dāng)A0=1.A1=1時(shí),控制寄存器被選擇.</p><p> 3.2.3 8255的方式控制字格式</p><p> 圖7 8255 方式控制字</p><p> 3.2.4本設(shè)計(jì)中8255的功能</p><p> 使用8255芯片的鍵盤控制器,通過查看寄存器,讀出分別按下不
43、同的鍵時(shí)對應(yīng)的寄存器值。當(dāng)某一時(shí)刻按下一個鍵時(shí),可以通過和各鍵的寄存器值比較來判斷所按下鍵。</p><p><b> 4程序流程圖</b></p><p><b> 4.1主程序流程圖</b></p><p> 主程序的流程圖如下圖所示:</p><p><b> 圖8 主程序流
44、程圖</b></p><p> 4.2 彈奏子程序流程圖</p><p> 4.2.1 高音子程序流程圖</p><p> 圖9 高音子程序流程圖</p><p> 4.2.2 中音子程序流程圖</p><p> 圖10 中音子程序流程圖</p><p> 4.2.3 低
45、音子程序流程圖</p><p> 圖11 低音子程序流程圖</p><p> 4.3 播放預(yù)定音樂子程序流程圖</p><p> 演奏時(shí),通過判斷按鍵為D來調(diào)用音樂播放子程序,音樂播放子程序流程圖如圖12所示。</p><p> 圖12 音樂播放子程序流程圖</p><p> 4.4 彈奏子程序流程圖<
46、/p><p> 當(dāng)按鍵為1-8時(shí),調(diào)用演奏子程序,演奏子程序的流程圖如下圖所示:</p><p> 圖13 彈奏子程序流程圖</p><p> 4.5 發(fā)音子程序流程圖</p><p> 在彈奏和演奏時(shí)都需調(diào)用發(fā)音子程序,發(fā)音子程序的作用是控制揚(yáng)聲器的發(fā)音,其流程圖如下:</p><p><b> 圖1
47、4 發(fā)音子程序</b></p><p> 4.6 鍵盤檢測流程圖</p><p> 圖15 鍵盤檢測流程圖</p><p><b> 5軟件方案 </b></p><p> 5.1 發(fā)音部分功能實(shí)現(xiàn)</p><p> 由更件的連接形式可知,揚(yáng)聲器的開斷是由8255的PC0和P
48、C1以及8253通道0同時(shí)控制的,PC0和PC1同時(shí)為高電平時(shí),揚(yáng)聲器開,有一個為低電平時(shí),揚(yáng)聲器關(guān)斷,又知8255 B口地址為289H,8253通道0地址為280H,控制口地址為283H。具體程序編寫如下。</p><p> 8253初始化程序段:</p><p> mov dx,io8253ctr ;8254初始化,設(shè)置8254計(jì)時(shí)器0方式3</p>
49、<p> mov al,00110110B</p><p><b> out dx,al</b></p><p> mov dx,io8253a </p><p><b> mov ax,bx</b></p><p> out dx,al
50、;寫計(jì)數(shù)初值低字節(jié)</p><p><b> mov al,ah</b></p><p> out dx,al ;寫計(jì)數(shù)初值高字節(jié)</p><p> mov dx,port_ctrl ;8255初始化,設(shè)置8255 C口輸出</p><p> mov al,10000000B
51、</p><p><b> out dx,al</b></p><p> 開揚(yáng)聲器程序段,關(guān)揚(yáng)聲器段: </p><p> mov dx,port_ctrl ;8255初始化,設(shè)置8255 C口輸出</p><p> mov al,10000000B</p><p>
52、;<b> out dx,al</b></p><p> mov dx,port_C </p><p> mov al,03h</p><p> out dx,al ;置PC1PC0 = 11(開揚(yáng)聲器)</p><p> call delay1
53、;延時(shí)</p><p> 5.2 變調(diào)功能的實(shí)現(xiàn)</p><p> 揚(yáng)聲器發(fā)音的頻率是由8253產(chǎn)生方波的頻率決定的,而方波頻率又是由通道的計(jì)數(shù)初值來決定的,因此可以通過改變通道的計(jì)數(shù)初值來實(shí)現(xiàn)變調(diào)功能。計(jì)數(shù)初值N=時(shí)鐘頻率/音階頻率,時(shí)鐘頻率為1.19318MHZ=1234DCH,可以將相應(yīng)音調(diào)對應(yīng)的時(shí)鐘頻率存入內(nèi)存單元,當(dāng)選擇相應(yīng)的音調(diào)時(shí),計(jì)算計(jì)數(shù)初值時(shí),采用對應(yīng)的時(shí)鐘頻率值,具體
54、程序如下。</p><p><b> call skim</b></p><p> cmp al,0ddh ;若按下鍵為A,轉(zhuǎn)高音子程序</p><p><b> jz high</b></p><p> cmp al,0deh
55、 ;若按下鍵為B,轉(zhuǎn)中音子程序</p><p><b> jz mid</b></p><p> cmp al,0e7h ;若按下鍵為C,轉(zhuǎn)低音子程序</p><p><b> jz low</b></p><p> cmp al
56、,0ebh ;若按下鍵為D,轉(zhuǎn)播放預(yù)定音樂子程序</p><p><b> jz m</b></p><p><b> m: </b></p><p> call music1</p><p><b> jmp start</b>
57、</p><p><b> 高音段程序:</b></p><p><b> high: </b></p><p> begin1: call skim</p><p> next_try1:</p><p> cmp al, table[bx]</p>
58、;<p><b> jz sing1</b></p><p> cmp al,0deh</p><p><b> jz mid</b></p><p> cmp al,0e7h</p><p><b> jz low</b></p><
59、;p> cmp al,0ebh</p><p><b> jz m</b></p><p><b> dec bx</b></p><p> jns next_try1</p><p><b> sing1:</b></p><p>
60、mov al,bl </p><p> shl al,1 ;轉(zhuǎn)為查表偏移量</p><p> mov bl,al ;保存偏移到bx</p><p><b> mov bh,0</b></p><p> mov ax,4240H ;計(jì)數(shù)初值 = 1000
61、000 / 頻率, 保存到AX</p><p> mov dx,0FH</p><p> div word ptr[table_high+bx]</p><p><b> mov bx,ax</b></p><p> call sound</p><p> jmp begin1</
62、p><p> 通過這樣的設(shè)置,即可實(shí)現(xiàn)電子琴的變調(diào)功能。</p><p> 5.3 彈奏功能的實(shí)現(xiàn)</p><p> 當(dāng)按鍵為數(shù)字1-8時(shí),選擇彈奏功能,通過對按鍵的判斷,求得其偏移地址,然后通過查表得其相應(yīng)頻率值,再由上述計(jì)算計(jì)數(shù)初值的方法求得計(jì)數(shù)初值,然后將計(jì)數(shù)初值送人8253的通道0,最后調(diào)用發(fā)音子程序即實(shí)現(xiàn)彈奏功能。以高音段為例,具體程序段如下:
63、 </p><p> mov al,bl </p><p> shl al,1 ;轉(zhuǎn)為查表偏移量</p><p> mov bl,al ;保存偏移到bx</p><p><b> mov bh,0</b></p><p> mov ax,42
64、40H ;計(jì)數(shù)初值 = 1000000 / 頻率, 保存到AX</p><p> mov dx,0FH</p><p> div word ptr[table_high+bx]</p><p><b> mov bx,ax</b></p><p> 5.4 播放預(yù)定音樂功能的實(shí)現(xiàn)</p>
65、;<p> 調(diào)用音樂播放子程序,音樂播放需用到循環(huán)結(jié)構(gòu),首先將計(jì)數(shù)器清零,接著計(jì)數(shù)器自增1,求得偏移量,然后通過查表的到相應(yīng)的頻率,再計(jì)算計(jì)數(shù)初值,將計(jì)數(shù)初值送人8253計(jì)數(shù)通道,調(diào)用發(fā)音子程序,若計(jì)數(shù)器的值大于歌曲長度,則返回。具體程序段如下。</p><p><b> mov cl,0</b></p><p><b> ad:inc
66、cl</b></p><p><b> cmp cl,31</b></p><p><b> je return</b></p><p> mov al,cl </p><p> sub al,1 ;取偏移量</p><p>
67、;<b> shl al,1</b></p><p> mov bl,al ;保存偏移量</p><p><b> mov bh,0</b></p><p> mov ax,4240H ;計(jì)數(shù)初值 = 1000000 / 頻率, 保存到AX</p><
68、p> mov dx,0FH</p><p> div word ptr[song1+bx]</p><p><b> mov bx,ax</b></p><p> call sound</p><p><b> jmp ad</b></p><p> ret
69、urn:ret</p><p><b> 6完整程序</b></p><p> ;*******************************;</p><p> ;* 電子琴實(shí)驗(yàn) *;</p><p> ;*******************************;<
70、;/p><p><b> ;此實(shí)驗(yàn)接線如下:</b></p><p> ;8254 CLK0接1MHZ時(shí)鐘,GATE0接8255的PC1,OUT0接與門輸入端1,CS接280H~287H,</p><p> ;8255 PC0接與門輸入端2,CS接288H~28FH,</p><p> ;與門輸出端接 'LB
71、 .JD3用跳線端子接好</p><p> data segment</p><p> io8253a equ 280h</p><p> io8253ctr equ 283h</p><p> port_A equ 288h</p><p> port_B equ 289h</p>
72、;<p> port_C equ 28ah</p><p> port_ctrl equ 28bh</p><p> table db 7bh,7dh,7eh,0b7h,0bbh,0bdh,0beh,0d7h,0dbh,0ddh,0deh,0e7h,0ebh,0edh,0eeh</p><p> table_high dw 524,588,6
73、60,698,784,880,988,1048;高音的</p><p> table_mid dw 262,294,330,347,392,440,494,524;中音的</p><p> table_low dw 131,147,165,175,196,220,247,262 ;低音的</p><p> ;msg db 'Press 1,2,3,4,
74、5,6,7,8,ESC:',0dh,0ah,'$'</p><p> song1 dw 330,330,347,392,392,347,330,294</p><p> dw 262,262,294,330,330,294,294,330</p><p> dw 330,347,392,392,347,330,294,262</p
75、><p> dw 262,294,330,294,262,262 ;歡樂頌 </p><p> song2 dw 262,294,330,262,262,294,330,262</p><p> dw 330,347,392,330,347,392,392,440</p><p> dw
76、392,347,330,262,392,440,392,347</p><p> dw 330,262,392,262,392,392,262,392 ;兩只老虎 </p><p><b> data ends</b></p><p> code segment</p><p> assume cs:code,d
77、s:data</p><p><b> start:</b></p><p><b> call skim</b></p><p> cmp al,0ddh ;若按下鍵為A,轉(zhuǎn)高音子程序</p><p><b> jz high</b
78、></p><p> cmp al,0deh ;若按下鍵為B,轉(zhuǎn)中音子程序</p><p><b> jz mid</b></p><p> cmp al,0e7h ;若按下鍵為C,轉(zhuǎn)低音子程序</p><p><b&g
79、t; jz low</b></p><p> cmp al,0ebh ;若按下鍵為D,轉(zhuǎn)播放預(yù)定音樂子程序</p><p><b> jz m</b></p><p><b> m: </b></p><p> call music1&l
80、t;/p><p><b> jmp start</b></p><p><b> high: </b></p><p> begin1: call skim</p><p> next_try1:</p><p> cmp al, table[bx]</p&g
81、t;<p><b> jz sing1</b></p><p> cmp al,0deh</p><p><b> jz mid</b></p><p> cmp al,0e7h</p><p><b> jz low</b></p>&l
82、t;p> cmp al,0ebh</p><p><b> jz m</b></p><p><b> dec bx</b></p><p> jns next_try1</p><p><b> sing1:</b></p><p>
83、 mov al,bl </p><p> shl al,1 ;轉(zhuǎn)為查表偏移量</p><p> mov bl,al ;保存偏移到bx</p><p><b> mov bh,0</b></p><p> mov ax,4240H ;計(jì)數(shù)初值 = 100
84、0000 / 頻率, 保存到AX</p><p> mov dx,0FH</p><p> div word ptr[table_high+bx]</p><p><b> mov bx,ax</b></p><p> call sound</p><p> jmp begin1<
85、/p><p><b> mid:</b></p><p> begin2: call skim</p><p> next_try2:</p><p> cmp al, table[bx]</p><p><b> jz sing2</b></p>&
86、lt;p> cmp al,0ddh</p><p><b> jz high</b></p><p> cmp al,0e7h</p><p><b> jz low</b></p><p> cmp al,0ebh</p><p><b> jz
87、 m</b></p><p><b> dec bx</b></p><p> jns next_try2</p><p><b> sing2:</b></p><p> mov al,bl </p><p> shl al,1
88、 ;轉(zhuǎn)為查表偏移量</p><p> mov bl,al ;保存偏移到bx</p><p><b> mov bh,0</b></p><p> mov ax,4240H ;計(jì)數(shù)初值 = 1000000 / 頻率, 保存到AX</p><p> mov dx,0FH<
89、/p><p> div word ptr[table_mid+bx]</p><p><b> mov bx,ax</b></p><p> call sound</p><p> jmp begin2</p><p><b> low:</b></p>
90、<p> begin3: call skim</p><p> next_try3:</p><p> cmp al, table[bx]</p><p><b> jz sing3</b></p><p> cmp al,0ddh</p><p><b> j
91、z high</b></p><p> cmp al,0deh</p><p><b> jz mid</b></p><p> cmp al,0ebh</p><p><b> jz m</b></p><p><b> dec bx<
92、;/b></p><p> jns next_try3</p><p><b> sing3:</b></p><p> mov al,bl </p><p> shl al,1 ;轉(zhuǎn)為查表偏移量</p><p> mov bl,al
93、;保存偏移到bx</p><p><b> mov bh,0</b></p><p> mov ax,4240H ;計(jì)數(shù)初值 = 1000000 / 頻率, 保存到AX</p><p> mov dx,0FH</p><p> div word ptr[table_low+bx]</p>
94、;<p><b> mov bx,ax</b></p><p> call sound</p><p> jmp begin3</p><p> delay1 proc near ;延時(shí)子程序</p><p><b> push cx</b></p&g
95、t;<p><b> push ax</b></p><p><b> mov ax,40</b></p><p> loop1: mov cx,0ffffh</p><p> loop2: dec cx</p><p><b> jnz loop2</b&g
96、t;</p><p><b> dec ax</b></p><p><b> jnz loop1</b></p><p><b> pop ax</b></p><p><b> pop cx</b></p><p>&l
97、t;b> ret</b></p><p> delay1 endp</p><p> sound proc near ;發(fā)音子程序</p><p> mov dx,io8253ctr ;8254初始化設(shè)置8254計(jì)時(shí)器0方式3</p><p> mov al,00110110B</
98、p><p><b> out dx,al</b></p><p> mov dx,io8253a </p><p><b> mov ax,bx</b></p><p> out dx,al ;寫計(jì)數(shù)初值低字節(jié)</p><p><
99、;b> mov al,ah</b></p><p> out dx,al ;寫計(jì)數(shù)初值高字節(jié)</p><p> mov dx,port_ctrl ;8255初始化,設(shè)置8255 C口輸出</p><p> mov al,10000000B</p><p><b> o
100、ut dx,al</b></p><p> mov dx,port_C </p><p> mov al,03h</p><p> out dx,al ;置PC1PC0 = 11(開揚(yáng)聲器)</p><p> call delay1 ;延時(shí)</p>
101、<p><b> mov al,0h</b></p><p> out dx,al ;置PC1PC0 = 00(關(guān)揚(yáng)聲器)</p><p><b> ret</b></p><p> sound endp</p><p> music1 proc nea
102、r ;音樂1播放子程序</p><p><b> mov cl,0</b></p><p><b> ad:inc cl</b></p><p><b> cmp cl,31</b></p><p><b> je return<
103、;/b></p><p> mov al,cl </p><p> sub al,1 ;取偏移量</p><p><b> shl al,1</b></p><p> mov bl,al ;保存偏移量</p><p><
104、;b> mov bh,0</b></p><p> mov ax,4240H ;計(jì)數(shù)初值 = 1000000 / 頻率, 保存到AX</p><p> mov dx,0FH</p><p> div word ptr[song1+bx]</p><p><b> mov bx,ax<
105、/b></p><p> call sound</p><p><b> jmp ad</b></p><p> return:ret</p><p> music1 endp</p><p> skim proc near</p><p> mov ax
106、,data</p><p><b> mov ds,ax</b></p><p><b> ;8255初始化</b></p><p> mov dx,port_ctrl</p><p> mov al,10000010b</p><p><b> out
107、dx,al</b></p><p> mov dx,port_A</p><p> mov al,00h</p><p><b> out dx,al</b></p><p> mov dx,port_B</p><p> wait_open:</p><
108、p><b> in al,dx</b></p><p> and al,0Fh</p><p> cmp al,0Fh</p><p> jnz wait_open</p><p> wait_press:</p><p><b> in al,dx</b>
109、</p><p> and al,0fh</p><p> cmp al,0fh</p><p> je wait_press</p><p> mov cx,16eah</p><p> delay: loop delay</p><p><b> in al,dx<
110、;/b></p><p> and al,0fh</p><p> cmp al,0fh</p><p> je wait_press</p><p> mov al,0feh</p><p><b> mov cl,al</b></p><p><b
111、> next_row:</b></p><p> mov dx,port_A</p><p><b> out dx,al</b></p><p> mov dx,port_B</p><p><b> in al,dx</b></p><p>
112、 and al,0fh</p><p> cmp al,0fh</p><p> jnz encode</p><p><b> rol cl,01</b></p><p><b> mov al,cl</b></p><p> jmp next_row</p
113、><p><b> encode:</b></p><p> mov bx,000fh</p><p><b> in al,dx</b></p><p><b> ret</b></p><p><b> skim endp</
114、b></p><p><b> code ends</b></p><p><b> end start</b></p><p><b> 7 結(jié)論</b></p><p> 這次實(shí)驗(yàn),我們使用8254、8255A等芯片來實(shí)現(xiàn)可存儲式電子琴的以下功能:</p
115、><p> (1)基本的彈奏功能:輸入不同的鍵(1~8)能發(fā)出不同頻率的聲音即音符。</p><p> ?。?)播放預(yù)定音樂功能:在輸入指定的鍵(D)后,可以播放出預(yù)先指定的音樂。</p><p> ?。?)高低音轉(zhuǎn)換功能:按下A鍵,輸出高音;按下B鍵,輸出中音;按下C鍵,輸出低音。</p><p><b> 8 心得</b&
116、gt;</p><p> 這次課程設(shè)計(jì),我們的題目聽起來不太復(fù)雜,但是實(shí)際操作起來,也并不容易,如何設(shè)置高低音這個問題困擾了我好久,當(dāng)時(shí)看到一班同學(xué)的方法,覺得有點(diǎn)復(fù)雜,就開始想,怎么樣就能更加簡潔,在老師的耐心指導(dǎo)和同學(xué)的細(xì)心幫助下,同時(shí)自己也查閱了資料的情況下順利解決了。這次設(shè)計(jì),采用總體思想為化總體為部分,部分到最后再合成,便于各個功能的實(shí)現(xiàn)。 </p><p> 本次
117、設(shè)計(jì),我收獲很大。我熟悉了課程設(shè)計(jì)的過程,并深刻地掌握了微機(jī)原理與接口的基本知識。最主要的是我體會到了課程設(shè)計(jì)的方法。雖然老師總是對我們講要把整體問題化為部分問題來解決會更容易找出解決方案,但是如果你不去試驗(yàn)將會永遠(yuǎn)不了解。本次試驗(yàn)就讓我深刻地感悟到這一點(diǎn)。對問題的處理,方法是最重要的。我們不僅完成了任務(wù),也使自己的專業(yè)知識又得到了提升,還考驗(yàn)了我們的獨(dú)立思考的能力。通過這次設(shè)計(jì),我覺得自己對軟硬件結(jié)合有了新的認(rèn)識,鞏固了原來所學(xué)的知識
118、,對未來的學(xué)習(xí)起到了一定的幫助和鋪墊作用。</p><p><b> 9參考文獻(xiàn)</b></p><p> 周荷琴、吳秀清/編著《微型計(jì)算機(jī)原理與接口技術(shù)》第4版 中國科學(xué)技術(shù)大學(xué)出版社 2009,6 。 </p><p> 陳慧杰等著.《計(jì)算機(jī)揚(yáng)聲器發(fā)聲的控制》
119、[G].《內(nèi)蒙古民族大學(xué)學(xué)報(bào)(自然科學(xué)版)》,2001,6,16卷。</p><p> TPC-ZK系列USB學(xué)生實(shí)驗(yàn)指導(dǎo)書</p><p><b> 10 附錄</b></p><p><b> 實(shí)驗(yàn)成果圖</b></p><p> 圖11 實(shí)驗(yàn)程序運(yùn)行圖</p><
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 硬件課程設(shè)計(jì)--可存儲式電子琴
- 硬件課程設(shè)計(jì)-可存儲式電子琴
- 可存儲式電子琴(硬件課程設(shè)計(jì))
- 硬件課程設(shè)計(jì)報(bào)告--可存儲式電子琴
- 硬件課程設(shè)計(jì)報(bào)告--可存儲式電子琴
- 硬件課程設(shè)計(jì)報(bào)告---可存儲式電子琴
- 可存儲式電子琴__中國礦業(yè)大學(xué)_硬件課程設(shè)計(jì)
- 單片機(jī)電子琴課程設(shè)計(jì)--基于單片機(jī)的可存儲式電子琴設(shè)計(jì)
- 課程設(shè)計(jì)---基于單片機(jī)的可存儲式電子琴設(shè)計(jì)
- 硬件電子琴課程設(shè)計(jì)報(bào)告
- 電子琴課程設(shè)計(jì)
- 課程設(shè)計(jì)--電子琴
- 電子琴課程設(shè)計(jì)
- 計(jì)算機(jī)硬件課程設(shè)計(jì) 電子琴
- 電子琴課程設(shè)計(jì)---電子琴的設(shè)計(jì)與實(shí)現(xiàn)
- 單片機(jī)電子琴課程設(shè)計(jì)--帶存儲播放功能的簡易電子琴設(shè)計(jì)
- eda課程設(shè)計(jì)硬件電子琴及自動演奏
- 微機(jī)課程設(shè)計(jì)電子琴
- 接口課程設(shè)計(jì)電子琴
- 簡易電子琴課程設(shè)計(jì)
評論
0/150
提交評論