版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 2012 級(jí)本科生課程報(bào)告</p><p> 課程名稱 硬件課程設(shè)計(jì) </p><p><b> 目錄</b></p><p><b> 1.選題1</b></p><p><b> 2.需求分析1</b>&l
2、t;/p><p> 3.設(shè)計(jì)任務(wù)與要求1</p><p> 3.1實(shí)驗(yàn)原理與內(nèi)容</p><p> 4.總體方案與說(shuō)明1</p><p><b> 4.1電路設(shè)計(jì)</b></p><p><b> 4.2地址說(shuō)明</b></p><p>&l
3、t;b> 4.3功能模塊</b></p><p><b> 4.4電路原理圖</b></p><p><b> 4.5實(shí)物連線圖</b></p><p> 5.硬件框圖與說(shuō)明7</p><p> 5.1 8255A芯片介紹7</p><p>
4、 5.2 8253芯片介紹9</p><p><b> 6.軟件功能14</b></p><p> 7.軟件主要模塊流程圖15</p><p> 7.1高中低音轉(zhuǎn)換程序流程圖</p><p> 7.2播放預(yù)定音樂(lè)子程序流程圖</p><p> 7.3 彈奏子程序流程圖</p&
5、gt;<p><b> 8.程序代碼16</b></p><p> 9.問(wèn)題分析與解決方案25</p><p> 10.實(shí)驗(yàn)體會(huì)25</p><p><b> 參考文獻(xiàn)26</b></p><p><b> 1.選題 </b></p>
6、<p> 我的硬件課程設(shè)計(jì)的課題是《可存儲(chǔ)式電子琴》,這是一個(gè)很好的課題。我們不僅可以在設(shè)計(jì)中學(xué)習(xí)硬件、軟件相關(guān)的知識(shí),通過(guò)實(shí)踐鞏固理論知識(shí),并做到活學(xué)活用,更能在美妙動(dòng)聽(tīng)的音樂(lè)中享受我們的勞動(dòng)成果,可謂是一舉多得,能夠在過(guò)程中有動(dòng)力,所以選擇了這個(gè)電子琴來(lái)增強(qiáng)我們對(duì)硬件課程設(shè)計(jì)的學(xué)習(xí)。。</p><p><b> 2.需求分析 </b></p><p&
7、gt; 加強(qiáng)學(xué)生們對(duì)硬件課程設(shè)計(jì)的掌握,熟練使用匯編語(yǔ)言解決硬件問(wèn)題,制作電子琴,彈奏音樂(lè),也可以作為娛樂(lè)工具.也可以進(jìn)一步開發(fā)作為一個(gè)小玩具的內(nèi)置芯片程序.</p><p> 3.設(shè)計(jì)任務(wù)與要求 </p><p> 利用8255A、8253芯片和4×4鍵盤、喇叭等器件設(shè)計(jì)硬件電子琴,具備如下功能:當(dāng)按下琴鍵時(shí),揚(yáng)聲器發(fā)出該琴鍵相對(duì)應(yīng)的音階,同時(shí)可以通過(guò)按鍵轉(zhuǎn)換高中低音節(jié),
8、會(huì)有燈顯示此時(shí)的按鍵是哪種音階,可以播放預(yù)存音樂(lè)。</p><p> 3.1實(shí)驗(yàn)原理與內(nèi)容</p><p> 可存儲(chǔ)式電子琴硬件課程設(shè)計(jì)主要是居于8255A芯片和8253芯片的基本功能進(jìn)行設(shè)計(jì)的。我們將8255A芯片的A端口作為輸出端口,而B端口作為輸入端口,兩個(gè)端口都與鍵盤相連接:A端口的低四位連在鍵盤的行線上,B端口的高四位連在鍵盤的列線上。再將它的輸出端口PC1與8253相應(yīng)門控
9、信號(hào)GATE0相連接。這樣可以通過(guò)控制PC1來(lái)控制8253的輸出:當(dāng)PC1為“1”時(shí),GATE0有效,8253能夠輸出頻率方波;當(dāng)PC1為“0”時(shí),GATE0無(wú)效,OUT0無(wú)法輸出頻率方波。而8253的時(shí)鐘輸入引腳CLK0與相應(yīng)的時(shí)鐘發(fā)生器相連接,8253的0通道的OUT0信號(hào)與8255A的PC0通過(guò)與門以后與蜂鳴器相連接,從而驅(qū)動(dòng)并控制蜂鳴器發(fā)音的發(fā)音和終端:當(dāng)PC0為“1”時(shí)蜂鳴器連通,能夠發(fā)出聲音;當(dāng)PC0為“0”時(shí)蜂鳴器被中斷,
10、不能發(fā)出聲音。這樣,我們?cè)谟布蠈?shí)現(xiàn)了通過(guò)8255A芯片輸入設(shè)備的輸入信號(hào)并通過(guò)它傳送給8253,讓8253進(jìn)行相應(yīng)的處理后輸出給蜂鳴器的功能。</p><p> 從8255A芯片的端口中確認(rèn)是鍵盤中的哪一個(gè)鍵被按下,并進(jìn)行編碼。從8255A的B端口中讀入鍵盤的狀態(tài),進(jìn)行一系列的比較。確認(rèn)是哪一個(gè)鍵按下了,接著再通過(guò)著不同的鍵被按下進(jìn)行執(zhí)行不同的程序段。將不同的鍵所對(duì)應(yīng)的頻率的N值送入8253的0通道。這樣,就
11、產(chǎn)生了不同頻率的方波。在送入揚(yáng)聲器后就能發(fā)出不同音頻和音長(zhǎng)的聲音。</p><p><b> 電子琴電路圖</b></p><p> 4.總體方案與說(shuō)明 </p><p> 方案利用8253進(jìn)行周期性掃描8255A是否有鍵按下,使用小鍵盤的按鍵實(shí)現(xiàn)電子琴音節(jié)按鍵、功能的切換。</p><p> 本次設(shè)計(jì)功能分為:
12、高中低音階的音頻轉(zhuǎn)換,提供給8253的時(shí)鐘頻率為1MHZ,</p><p><b> 4.1設(shè)計(jì)電路如下</b></p><p> 鍵盤掃描,把掃描到的值給8255A,8255A再把信號(hào)給8253,不同的按鍵,賦給不同的初始計(jì)數(shù),然后產(chǎn)生不同頻率的方波,輸出端給喇叭,并控制喇叭的放音的開關(guān),既可以發(fā)出不同的聲音。</p><p><b
13、> 4.2.地址說(shuō)明 </b></p><p> ?。?)各芯片及器件地址: </p><p> 8255A的控制端地址為 28BH,A口,B口,C口地址分別為:288H,289H,28AH。 </p><p> 8253的控制端地址為:283H,計(jì)數(shù)器0地址為:280H。</p><p> (2)按鍵說(shuō)明如下表4-
14、3:</p><p><b> 4.3功能模塊圖</b></p><p> 主要包括: 中音模塊,低音模塊, 高</p><p> 音模塊,鍵盤掃描,發(fā)聲</p><p> 模塊,延時(shí)模塊六部分</p><p> 4.31 低中高音模塊</p><p> 進(jìn)入模
15、塊,先進(jìn)行鍵盤掃描,獲得鍵盤行列值,并與鍵盤掃描碼比對(duì),如果是功能鍵A,B,C等跳轉(zhuǎn)到相應(yīng)的模塊,不是則默認(rèn)進(jìn)入中音,并且按照鍵盤值,按照對(duì)應(yīng)的計(jì)數(shù)初值,由8253進(jìn)行發(fā)出對(duì)應(yīng)頻率的方波。調(diào)用發(fā)聲模塊發(fā)出聲音</p><p> 4.32 鍵盤掃描模塊</p><p> (1)檢測(cè)所有按鍵是否全都松開了,直到所有鍵松開</p><p> ?。?)檢測(cè)是否有鍵按下,
16、直到有鍵按下。</p><p> ?。?)若有鍵按下,消除抖動(dòng),確認(rèn)有鍵按下</p><p> (4)然后得到一個(gè)行列值跟鍵盤掃描碼比較,即可判定哪個(gè)鍵按下</p><p> 4.33 鍵盤掃描流程圖</p><p><b> 鍵盤掃描流程圖</b></p><p> 4.34發(fā)聲、延時(shí)模
17、塊</p><p> 8255A控制C端口,PC1,PC0的值,通過(guò)與門來(lái)控制喇叭的開關(guān)。全為1,喇叭打開—發(fā)聲。全為0,喇叭關(guān)閉—發(fā)聲停止。通過(guò)延時(shí),來(lái)控制發(fā)聲的時(shí)間。如果沒(méi)有延時(shí),發(fā)聲模塊無(wú)法正常工作。</p><p><b> 4.4電路原理圖</b></p><p><b> 電子琴電路圖</b></p
18、><p> 4.5 電路實(shí)物連線圖</p><p><b> 電子琴實(shí)物連接圖</b></p><p> 5.硬件框圖與說(shuō)明 </p><p> 5.1 8255A芯片介紹</p><p> 8255 可編程外圍接口芯片是 Intel 公司生產(chǎn)的通用并行I/O 接口芯片,它具有A、B、C
19、 三個(gè)并行接口,并行接口是以數(shù)據(jù)的字節(jié)為單位與I/O 設(shè)備或被控制對(duì)象之間傳遞信息。CPU 和接口之間 的數(shù)據(jù)傳送總是并行的,即可以同時(shí)傳遞8 位、16 位、32 位等。用+5V 單電源供電,能在以下三種方式下工作:方式0--基本輸入/出方式、方式1--選通輸入/出方式、方式2--雙向選通工作方式。8255的內(nèi)部結(jié)構(gòu)及引腳如圖5.1</p><p><b> 內(nèi)部結(jié)構(gòu)及引腳</b><
20、/p><p> 為讀信號(hào)線,與其他信號(hào)線一起實(shí)現(xiàn)對(duì)8255接口的讀操作。通常接系統(tǒng)總線的信號(hào)。為寫信號(hào)線,與其他信號(hào)一起實(shí)現(xiàn)對(duì)8255的寫操作,通常接系統(tǒng)總線的。</p><p> 為片選信號(hào)線,當(dāng)它為低電平時(shí),才能選中該8255芯片,也才能對(duì)8255進(jìn)行操作。 D0~D7:三態(tài)雙向數(shù)據(jù)總線,8255與CPU數(shù)據(jù)傳送的通道,當(dāng)CPU 執(zhí)行輸入輸出指令時(shí),通過(guò)它實(shí)現(xiàn)8位數(shù)據(jù)的讀/寫操
21、作,控制字和狀態(tài)信息也通過(guò)數(shù)據(jù)總線傳送。 </p><p> PA0~PA7:端口A輸入輸出線,一個(gè)8位的數(shù)據(jù)輸出鎖存器/緩沖器, 一個(gè)8位的數(shù)據(jù)輸入鎖存器。 PB0~PB7:端口B輸入輸出線,一個(gè)8位的I/O鎖存器, 一個(gè)8位的輸入輸出緩沖器。 PC0~PC7:端口C輸入輸出線,一個(gè)8位的數(shù)據(jù)輸出鎖存器/緩沖器, 一個(gè)8位的數(shù)據(jù)輸入緩沖器。端口C可以通過(guò)工作方式設(shè)定而分成2個(gè)4位的端口,
22、每個(gè)4位的端口包含一個(gè)4位的鎖存器,分別與端口A和端口B配合使用,可作為控制信號(hào)輸出或狀態(tài)信號(hào)輸入端口。</p><p> 這里的8255接口所占地址范圍為0680H~0686H。當(dāng)對(duì)8255接口進(jìn)行寫操作時(shí),各信號(hào)線的狀態(tài)如表5.1所示 </p><p> 8255在應(yīng)用過(guò)程中,將不同的控制字裝入芯片中控制寄存器,即可確定8255的工作方式。8255的控制字由8位二進(jìn)制數(shù)構(gòu)成,各位的
23、控制功能如圖5.2所示:</p><p><b> 8255控制字</b></p><p> 5.2 8253芯片介紹 </p><p><b> 8253芯片引腳圖</b></p><p> 8253是可編程計(jì)數(shù)器/定時(shí)器,內(nèi)部有三個(gè)計(jì)數(shù)器,分別為計(jì)數(shù)器0、計(jì)數(shù)器1和計(jì)數(shù)器2,一個(gè)時(shí)鐘輸入
24、端CLK,一個(gè)為門控信號(hào)輸入端GATE,另一個(gè)為輸出端OUT。每個(gè)計(jì)數(shù)器內(nèi)部有一個(gè)8位的控制寄存器。 </p><p> 8253的通道:8253有3個(gè)通道,分別為通道0、通道1和通道2。 </p><p> 8253中各通道可有6種可供選擇的工作方式, 以完成定時(shí)、計(jì)數(shù)或脈沖發(fā)生器等多種功能。8253的各種工作方式如下: </p><p> (1)方式0:計(jì)
25、數(shù)結(jié)束則中斷 </p><p> 工作方式0被稱為計(jì)數(shù)結(jié)束中斷方式。當(dāng)任一通道被定義為工作方式0時(shí), OUT輸出為低電平;若門控信號(hào)GATE為高電平,當(dāng)CPU利用輸出指令向該通道寫入計(jì)數(shù)值WR#有效時(shí),OUT仍保持低電平,然后計(jì)數(shù)器開始減“1”計(jì)數(shù), 直到計(jì)數(shù)值為“0”,此刻OUT將輸出由低電平向高電平跳變,可用它向CPU發(fā)出中斷請(qǐng)求,OUT端輸出的高電平一直維持到下次再寫入計(jì)數(shù)值為止。 </p>
26、<p> 在工作方式0情況下,門控信號(hào)GATE用來(lái)控制減“1”計(jì)數(shù)操作是否進(jìn)行。當(dāng)GATE=1時(shí),允許減“1”計(jì)數(shù);GATE=0時(shí),禁止減“1”計(jì)數(shù); 計(jì)數(shù)值將保持GATE有效時(shí)的數(shù)值不變, 待GATE重新有效后,減“1”計(jì)數(shù)繼續(xù)進(jìn)行。 </p><p> 顯然,利用工作方式0既可完成計(jì)數(shù)功能, 也可完成定時(shí)功能。當(dāng)用作計(jì)數(shù)器時(shí),應(yīng)將要求計(jì)數(shù)的次數(shù)預(yù)置到計(jì)數(shù)器中,將要求計(jì)數(shù)的事件以脈沖方式從CLK
27、端輸入, 由它對(duì)計(jì)數(shù)器進(jìn)行減“1”計(jì)數(shù),直到計(jì)數(shù)值為0,此刻OUT輸出正跳變, 表示計(jì)數(shù)次數(shù)到。當(dāng)用作定時(shí)器時(shí),應(yīng)把根據(jù)要求定時(shí)的時(shí)間和CLK的周期計(jì)算出定時(shí)系數(shù),預(yù)置到計(jì)數(shù)器中。從CLK,輸入的應(yīng)是一定頻率的時(shí)鐘脈沖,由它對(duì)計(jì)數(shù)器進(jìn)行減“1”計(jì)數(shù), 定時(shí)時(shí)間從寫入計(jì)數(shù)值開始,到計(jì)數(shù)值計(jì)到“0”為止,這時(shí)OUT輸出正跳變,表示定時(shí)時(shí)間到。 </p><p> 有一點(diǎn)需要說(shuō)明,任一通道工作在方式0情況下, 計(jì)數(shù)器
28、初值一次有效,經(jīng)過(guò)一次計(jì)數(shù)或定時(shí)后如果需要繼續(xù)完成計(jì)數(shù)或定時(shí)功能,必須重新寫入計(jì)數(shù)器的初值。 </p><p> (2)方式1:?jiǎn)蚊}沖發(fā)生器 </p><p> 工作方式1被稱作可編程單脈沖發(fā)生器。進(jìn)入這種工作方式, CPU裝入計(jì)數(shù)值n后OUT輸出高電平, 不管此時(shí)的GATE輸入是高電平還是低電平, 都不開始減“1”計(jì)數(shù),必須等到GATE由低電平向高電平跳變形成一個(gè)上升沿后,計(jì)數(shù)過(guò)程才
29、會(huì)開始。與此同時(shí),OUT輸出由高電平向低電平跳變,形成了輸出單脈沖的前沿,待計(jì)數(shù)值計(jì)到“0”, OUT輸出由低電平向高電平跳變,形成輸出單脈沖的后沿, 因此,由方式l所能輸出單脈沖的寬度為CLK周期的n倍。 </p><p> 如果在減“1”計(jì)數(shù)過(guò)程中, GATE由高電平跳變?yōu)榈碗姾酰@并不影響計(jì)數(shù)過(guò)程,仍繼續(xù)計(jì)數(shù);但若重新遇到GATE的上升沿,則從初值開始重新計(jì)數(shù), 其效果會(huì)使輸出的單脈沖加寬,如教材圖9-2
30、2(b)中的第2個(gè)單脈沖。 </p><p> 這種工作方式下,計(jì)數(shù)值也是一次有效,每輸入一次計(jì)數(shù)值,只產(chǎn)生一個(gè)負(fù)極性單脈沖。 </p><p> (3)方式2:速率波發(fā)生器 </p><p> 工作方式2被稱作速率波發(fā)生器。進(jìn)入這種工作方式, OUT輸出高電平,裝入計(jì)數(shù)值n后如果GATE為高電平,則立即開始計(jì)數(shù),OUT保持為高電平不變; 待計(jì)數(shù)值減到“1”和
31、“0”之間, OUT將輸出寬度為一個(gè)CLK周期的負(fù)脈沖,計(jì)數(shù)值為“0”時(shí),自動(dòng)重新裝入計(jì)數(shù)初值n,實(shí)現(xiàn)循環(huán)計(jì)數(shù),OUT將輸出一定頻率的負(fù)脈沖序列, 其脈沖寬度固定為一個(gè)CLK周期, 重復(fù)周期為CLK周期的n倍。 </p><p> 如果在減“1”計(jì)數(shù)過(guò)程中,GATE變?yōu)闊o(wú)效(輸入0電平),則暫停減“1”計(jì)數(shù),待GATE恢復(fù)有效后,從初值n開始重新計(jì)數(shù)。這樣會(huì)改變輸出脈沖的速率。</p><p
32、> 如果在操作過(guò)程中要求改變輸出脈沖的速率,CPU可在任何時(shí)候,重新寫人新的計(jì)數(shù)值, 它不會(huì)影響正在進(jìn)行的減“1”計(jì)數(shù)過(guò)程,而是從下一個(gè)計(jì)數(shù)操作用期開始按新的計(jì)數(shù)值改變輸出脈沖的速率。</p><p> (4)方式3:方波發(fā)生器 </p><p> 工作方式3被稱作方波發(fā)生器。任一通道工作在方式3, 只在計(jì)數(shù)值n為偶數(shù),則可輸出重復(fù)周期為n、占空比為1:1的方波。 </p
33、><p> 進(jìn)入工作方式3,OUT輸出低電平, 裝入計(jì)數(shù)值后,OUT立即跳變?yōu)楦唠娖?。如果?dāng)GATE為高電平, 則立即開始減“1”計(jì)數(shù),OUT保持為高電平,若n為偶數(shù),則當(dāng)計(jì)數(shù)值減到n/2時(shí),OUT跳變?yōu)榈碗娖?,一直保持到?jì)數(shù)值為“0”,系統(tǒng)才自動(dòng)重新置入計(jì)數(shù)值n,實(shí)現(xiàn)循環(huán)計(jì)數(shù)。這時(shí)OUT端輸出的周期為n×CLK周期,占空比為1:1的方波序列; 若n為奇數(shù), 則OUT端輸出周期為n×CLK周期,
34、占空比為((n+1)/2)/((n-1)/2)的近似方波序列。 </p><p> 如果在操作過(guò)程中, GATE變?yōu)闊o(wú)效,則暫停減“1”計(jì)數(shù)過(guò)程,直到GATE再次有效,重新從初值n開始減“l(fā)”計(jì)數(shù)。 </p><p> 如果要求改變輸出方波的速率, 則CPU可在任何時(shí)候重新裝入新的計(jì)數(shù)初值n,并從下一個(gè)計(jì)數(shù)操作周期開始改變輸出方波的速率。 </p><p>&l
35、t;b> 8253的控制字:</b></p><p><b> 6.軟件功能 </b></p><p> (1)鍵盤控制發(fā)聲 </p><p> (2)高、中、低音轉(zhuǎn)換 </p><p> (3)可以預(yù)置播放音樂(lè)</p><p> 7.軟件主要模塊流程圖 </p
36、><p> 7.1高中低音轉(zhuǎn)換程序流程圖</p><p> 高中低音轉(zhuǎn)換程序流程圖</p><p> 7.2播放預(yù)定音樂(lè)子程序流程圖</p><p> 演奏時(shí),通過(guò)判斷按鍵為D來(lái)調(diào)用音樂(lè)播放子程序,音樂(lè)播放子程序流程圖如圖12所示。</p><p> 音樂(lè)播放子程序流程圖</p><p>
37、 7.3 彈奏子程序流程圖</p><p> 當(dāng)按鍵為1-8時(shí),調(diào)用演奏子程序,演奏子程序的流程圖如下圖所示:</p><p><b> 彈奏子程序流程圖</b></p><p><b> 8.程序代碼 </b></p><p> data segment</p><p
38、> io8253a equ 280h</p><p> io8253ctr equ 283h</p><p> port_A equ 288h</p><p> port_B equ 289h</p><p> port_C equ 28ah</p><p> port_ctrl e
39、qu 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,660,698,784,880,988,1048;高音的</p><p> table_mid dw 2
40、62,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,5,6,7,8,ESC:',0dh,0ah,'$'</p><p> song
41、1 dw 262,262,494,494,330,524,392,392</p><p> dw 347,294,294,347,347,440,262,262,330</p><p> dw 494,494,440,294,330,330,330,440,330</p><p> dw 262,262,262,262
42、 ;無(wú)名曲1</p><p><b> data ends</b></p><p> code segment</p><p> assume cs:code,ds:data</p><p><b> start:</b></p><p><b>
43、call skim</b></p><p> cmp al,0ddh ;若按下鍵為A,轉(zhuǎn)高音子程序</p><p><b> jz high</b></p><p> cmp al,0deh ;若按下鍵為B,轉(zhuǎn)中音子程序</p>
44、<p><b> jz mid</b></p><p> cmp al,0e7h ;若按下鍵為C,轉(zhuǎn)低音子程序</p><p><b> jz low</b></p><p> cmp al,0ebh ;若按下鍵為D,轉(zhuǎn)播放
45、預(yù)定音樂(lè)子程序1</p><p><b> jz m</b></p><p><b> m: </b></p><p> call music1</p><p><b> jmp start</b></p><p><b> high
46、: </b></p><p> begin1: call skim</p><p> next_try1:</p><p> cmp al, table[bx]</p><p><b> jz sing1</b></p><p> cmp al,0deh</p>
47、;<p><b> jz mid</b></p><p> cmp al,0e7h</p><p><b> jz low</b></p><p> cmp al,0ebh</p><p><b> jz m</b></p><p&g
48、t;<b> dec bx</b></p><p> jns next_try1</p><p><b> sing1:</b></p><p> mov al,bl </p><p> shl al,1 ;轉(zhuǎn)為查表偏移量</p><p>
49、 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</p><p> div word ptr[
50、table_high+bx]</p><p><b> mov bx,ax</b></p><p> call sound</p><p> jmp begin1</p><p><b> mid:</b></p><p> begin2: call skim&
51、lt;/p><p> next_try2:</p><p> cmp al, table[bx]</p><p><b> jz sing2</b></p><p> cmp al,0ddh</p><p><b> jz high</b></p><
52、;p> cmp al,0e7h</p><p><b> jz low</b></p><p> cmp al,0ebh</p><p><b> jz m</b></p><p><b> dec bx</b></p><p> j
53、ns next_try2</p><p><b> sing2:</b></p><p> mov al,bl </p><p> shl al,1 ;轉(zhuǎn)為查表偏移量</p><p> mov bl,al ;保存偏移到bx</p><p>&l
54、t;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_mid+bx]</p><p><b> mov bx,a
55、x</b></p><p> call sound</p><p> jmp begin2</p><p><b> low:</b></p><p> begin3: call skim</p><p> next_try3:</p><p>
56、 cmp al, table[bx]</p><p><b> jz sing3</b></p><p> cmp al,0ddh</p><p><b> jz high</b></p><p> cmp al,0deh</p><p><b> jz
57、mid</b></p><p><b> dec bx</b></p><p> jns next_try3</p><p><b> sing3:</b></p><p> mov al,bl </p><p> shl al,1
58、 ;轉(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<
59、/p><p> div word ptr[table_low+bx]</p><p><b> mov bx,ax</b></p><p> call sound</p><p> jmp begin3</p><p> delay1 proc near ;延時(shí)子程序<
60、;/p><p><b> push cx</b></p><p><b> push ax</b></p><p><b> mov ax,40</b></p><p> loop1: mov cx,0ffffh</p><p> loop2: d
61、ec cx</p><p><b> jnz loop2</b></p><p><b> dec ax</b></p><p><b> jnz loop1</b></p><p><b> pop ax</b></p><p
62、><b> pop cx</b></p><p><b> ret</b></p><p> delay1 endp</p><p> sound proc near ;發(fā)音子程序</p><p> mov dx,io8253ctr ;8254初始化設(shè)置8
63、254計(jì)時(shí)器0方式3</p><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>
64、out dx,al ;寫計(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&
65、gt; mov al,10000000B</p><p><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)聲器)<
66、/p><p> call delay1 ;延時(shí)</p><p><b> mov al,0h</b></p><p> out dx,al ;置PC1PC0 = 00(關(guān)揚(yáng)聲器)</p><p><b> ret</b></p><p
67、> sound endp</p><p> music1 proc near ;音樂(lè)1播放子程序</p><p><b> mov cl,0</b></p><p><b> ad1: </b></p><p><b> inc cl</b&
68、gt;</p><p><b> cmp cl,31</b></p><p> je return1</p><p> mov al,cl </p><p> sub al,1 ;取偏移量</p><p><b> shl al,1</b&
69、gt;</p><p> mov bl,al ;保存偏移量</p><p><b> mov bh,0</b></p><p> mov ax,4240H ;計(jì)數(shù)初值 = 1000000 / 頻率, 保存到AX</p><p> mov dx,0FH</p>
70、<p> div word ptr[song1+bx]</p><p><b> mov bx,ax</b></p><p> call sound</p><p><b> jmp ad1</b></p><p> return1:ret</p><p&
71、gt; music1 endp</p><p> skim proc near</p><p> mov ax,data</p><p><b> mov ds,ax</b></p><p><b> ;8255初始化</b></p><p> mov dx,po
72、rt_ctrl</p><p> mov al,10000010b</p><p><b> out dx,al</b></p><p> mov dx,port_A</p><p> mov al,00h</p><p><b> out dx,al</b><
73、;/p><p> mov dx,port_B</p><p> wait_open:</p><p><b> in al,dx</b></p><p> and al,0Fh</p><p> cmp al,0Fh</p><p> jnz wait_open&l
74、t;/p><p> wait_press:</p><p><b> in al,dx</b></p><p> and al,0fh</p><p> cmp al,0fh</p><p> je wait_press</p><p> mov cx,16eah&
75、lt;/p><p> delay: loop delay</p><p><b> in al,dx</b></p><p> and al,0fh</p><p> cmp al,0fh</p><p> je wait_press</p><p> mov al
76、,0feh</p><p><b> mov cl,al</b></p><p><b> next_row:</b></p><p> mov dx,port_A</p><p><b> out dx,al</b></p><p> mov
77、 dx,port_B</p><p><b> in al,dx</b></p><p> and al,0fh</p><p> cmp al,0fh</p><p> jnz encode</p><p><b> rol cl,01</b></p>
78、<p><b> mov al,cl</b></p><p> jmp next_row</p><p><b> encode:</b></p><p> mov bx,000fh</p><p><b> in al,dx</b></p>
79、;<p><b> ret</b></p><p><b> skim endp</b></p><p><b> code ends</b></p><p><b> end start</b></p><p> 9.問(wèn)題分析與解
80、決方案</p><p> 在實(shí)驗(yàn)中,的確遇到很多問(wèn)題,不過(guò)經(jīng)過(guò)查詢資料和書籍終于解決</p><p> 問(wèn)題一:由于編寫的源程序代碼過(guò)長(zhǎng),跳轉(zhuǎn)語(yǔ)句JE,不能順利順利跳轉(zhuǎn)到</p><p> 解決方案:利用二次跳轉(zhuǎn),JE先跳轉(zhuǎn)到一個(gè)中間標(biāo)簽,然后再用JMP跳轉(zhuǎn)</p><p> 問(wèn)題二:按下按鍵,發(fā)出相應(yīng)頻率的音階,但一直發(fā)聲,無(wú)法停下
81、來(lái)</p><p> 解決方案:延時(shí)一段時(shí)間后,給8253的GATE0門輸入0值</p><p> 問(wèn)題三: 高中低音每次選擇后,要有顯示燈顯示此時(shí)是哪種頻率,出錯(cuò)</p><p> 解決方案:把發(fā)聲程序服用,分別調(diào)用程序給那幾個(gè)LED燈不同的值</p><p><b> 10.實(shí)驗(yàn)體會(huì)</b></p>
82、;<p> 這次課程設(shè)計(jì),我的題目聽(tīng)起來(lái)不太復(fù)雜,但是實(shí)際操作起來(lái),也并不容易,如何設(shè)置高低音這個(gè)問(wèn)題困擾了我好久,當(dāng)時(shí)看到其他同學(xué)的方法,覺(jué)得有點(diǎn)復(fù)雜,就開始想,怎么樣就能更加簡(jiǎn)潔,在老師的耐心指導(dǎo)和同學(xué)的細(xì)心幫助下,同時(shí)自己也查閱了資料的情況下順利解決了。這次設(shè)計(jì),采用總體思想為化總體為部分,部分到最后再合成,便于各個(gè)功能的實(shí)現(xiàn)。 </p><p> 只要相信認(rèn)真踏實(shí)的做事,必會(huì)有
83、成果。因此我秉著此方針,相信肯定能夠完成屬于我自己的電子琴。于是我開始一步一步探索與嘗試,從剛開始的音響不發(fā)音,到后來(lái)能發(fā)出亂聲,到中音的發(fā)聲,最后調(diào)出高音,低音.這一路的艱辛與快樂(lè),苦惱于興奮,那一刻我興奮的不得了。</p><p> 本次試驗(yàn)就讓我深刻地感悟到這一點(diǎn)。對(duì)問(wèn)題的處理,方法是最重要的。我不僅完成了任務(wù),也使自己的專業(yè)知識(shí)又得到了提升,還考驗(yàn)了自身的獨(dú)立思考的能力。通過(guò)這次設(shè)計(jì),我覺(jué)得自己對(duì)軟硬件
84、結(jié)合有了新的認(rèn)識(shí),鞏固了原來(lái)所學(xué)的知識(shí),對(duì)未來(lái)的學(xué)習(xí)起到了一定的幫助和鋪墊作用。</p><p><b> 參考文獻(xiàn)</b></p><p> 周荷琴,吳秀清 微型計(jì)算機(jī)原理與接口技術(shù) 中國(guó)科學(xué)技術(shù)大學(xué)出版社. </p><p> 李真香 匯編語(yǔ)言程序設(shè)計(jì)案例精選 中國(guó)水利水電出版社.</p><p&g
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 硬件課程設(shè)計(jì)--可存儲(chǔ)式電子琴
- 硬件課程設(shè)計(jì)-可存儲(chǔ)式電子琴
- 可存儲(chǔ)式電子琴(硬件課程設(shè)計(jì))
- 硬件課程設(shè)計(jì)報(bào)告--可存儲(chǔ)式電子琴
- 硬件課程設(shè)計(jì)報(bào)告--可存儲(chǔ)式電子琴
- 硬件課程設(shè)計(jì)報(bào)告---可存儲(chǔ)式電子琴
- 可存儲(chǔ)式電子琴__中國(guó)礦業(yè)大學(xué)_硬件課程設(shè)計(jì)
- 單片機(jī)電子琴課程設(shè)計(jì)--基于單片機(jī)的可存儲(chǔ)式電子琴設(shè)計(jì)
- 課程設(shè)計(jì)---基于單片機(jī)的可存儲(chǔ)式電子琴設(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ì)--帶存儲(chǔ)播放功能的簡(jiǎn)易電子琴設(shè)計(jì)
- eda課程設(shè)計(jì)硬件電子琴及自動(dòng)演奏
- 微機(jī)課程設(shè)計(jì)電子琴
- 接口課程設(shè)計(jì)電子琴
- 簡(jiǎn)易電子琴課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論