硬件課程設計--可存儲式電子琴_第1頁
已閱讀1頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  2012 級本科生課程報告</p><p>  課程名稱 硬件課程設計 </p><p><b>  目錄</b></p><p><b>  1.選題1</b></p><p><b>  2.需求分析1</b>&l

2、t;/p><p>  3.設計任務與要求1</p><p>  3.1實驗原理與內容</p><p>  4.總體方案與說明1</p><p><b>  4.1電路設計</b></p><p><b>  4.2地址說明</b></p><p>&l

3、t;b>  4.3功能模塊</b></p><p><b>  4.4電路原理圖</b></p><p><b>  4.5實物連線圖</b></p><p>  5.硬件框圖與說明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高中低音轉換程序流程圖</p><p>  7.2播放預定音樂子程序流程圖</p><p>  7.3 彈奏子程序流程圖</p&

5、gt;<p><b>  8.程序代碼16</b></p><p>  9.問題分析與解決方案25</p><p>  10.實驗體會25</p><p><b>  參考文獻26</b></p><p><b>  1.選題 </b></p>

6、<p>  我的硬件課程設計的課題是《可存儲式電子琴》,這是一個很好的課題。我們不僅可以在設計中學習硬件、軟件相關的知識,通過實踐鞏固理論知識,并做到活學活用,更能在美妙動聽的音樂中享受我們的勞動成果,可謂是一舉多得,能夠在過程中有動力,所以選擇了這個電子琴來增強我們對硬件課程設計的學習。。</p><p><b>  2.需求分析 </b></p><p&

7、gt;  加強學生們對硬件課程設計的掌握,熟練使用匯編語言解決硬件問題,制作電子琴,彈奏音樂,也可以作為娛樂工具.也可以進一步開發(fā)作為一個小玩具的內置芯片程序.</p><p>  3.設計任務與要求 </p><p>  利用8255A、8253芯片和4×4鍵盤、喇叭等器件設計硬件電子琴,具備如下功能:當按下琴鍵時,揚聲器發(fā)出該琴鍵相對應的音階,同時可以通過按鍵轉換高中低音節(jié),

8、會有燈顯示此時的按鍵是哪種音階,可以播放預存音樂。</p><p>  3.1實驗原理與內容</p><p>  可存儲式電子琴硬件課程設計主要是居于8255A芯片和8253芯片的基本功能進行設計的。我們將8255A芯片的A端口作為輸出端口,而B端口作為輸入端口,兩個端口都與鍵盤相連接:A端口的低四位連在鍵盤的行線上,B端口的高四位連在鍵盤的列線上。再將它的輸出端口PC1與8253相應門控

9、信號GATE0相連接。這樣可以通過控制PC1來控制8253的輸出:當PC1為“1”時,GATE0有效,8253能夠輸出頻率方波;當PC1為“0”時,GATE0無效,OUT0無法輸出頻率方波。而8253的時鐘輸入引腳CLK0與相應的時鐘發(fā)生器相連接,8253的0通道的OUT0信號與8255A的PC0通過與門以后與蜂鳴器相連接,從而驅動并控制蜂鳴器發(fā)音的發(fā)音和終端:當PC0為“1”時蜂鳴器連通,能夠發(fā)出聲音;當PC0為“0”時蜂鳴器被中斷,

10、不能發(fā)出聲音。這樣,我們在硬件上實現(xiàn)了通過8255A芯片輸入設備的輸入信號并通過它傳送給8253,讓8253進行相應的處理后輸出給蜂鳴器的功能。</p><p>  從8255A芯片的端口中確認是鍵盤中的哪一個鍵被按下,并進行編碼。從8255A的B端口中讀入鍵盤的狀態(tài),進行一系列的比較。確認是哪一個鍵按下了,接著再通過著不同的鍵被按下進行執(zhí)行不同的程序段。將不同的鍵所對應的頻率的N值送入8253的0通道。這樣,就

11、產(chǎn)生了不同頻率的方波。在送入揚聲器后就能發(fā)出不同音頻和音長的聲音。</p><p><b>  電子琴電路圖</b></p><p>  4.總體方案與說明 </p><p>  方案利用8253進行周期性掃描8255A是否有鍵按下,使用小鍵盤的按鍵實現(xiàn)電子琴音節(jié)按鍵、功能的切換。</p><p>  本次設計功能分為:

12、高中低音階的音頻轉換,提供給8253的時鐘頻率為1MHZ,</p><p><b>  4.1設計電路如下</b></p><p>  鍵盤掃描,把掃描到的值給8255A,8255A再把信號給8253,不同的按鍵,賦給不同的初始計數(shù),然后產(chǎn)生不同頻率的方波,輸出端給喇叭,并控制喇叭的放音的開關,既可以發(fā)出不同的聲音。</p><p><b

13、>  4.2.地址說明 </b></p><p> ?。?)各芯片及器件地址: </p><p>  8255A的控制端地址為 28BH,A口,B口,C口地址分別為:288H,289H,28AH。 </p><p>  8253的控制端地址為:283H,計數(shù)器0地址為:280H。</p><p> ?。?)按鍵說明如下表4-

14、3:</p><p><b>  4.3功能模塊圖</b></p><p>  主要包括: 中音模塊,低音模塊, 高</p><p>  音模塊,鍵盤掃描,發(fā)聲</p><p>  模塊,延時模塊六部分</p><p>  4.31 低中高音模塊</p><p>  進入模

15、塊,先進行鍵盤掃描,獲得鍵盤行列值,并與鍵盤掃描碼比對,如果是功能鍵A,B,C等跳轉到相應的模塊,不是則默認進入中音,并且按照鍵盤值,按照對應的計數(shù)初值,由8253進行發(fā)出對應頻率的方波。調用發(fā)聲模塊發(fā)出聲音</p><p>  4.32 鍵盤掃描模塊</p><p> ?。?)檢測所有按鍵是否全都松開了,直到所有鍵松開</p><p> ?。?)檢測是否有鍵按下,

16、直到有鍵按下。</p><p> ?。?)若有鍵按下,消除抖動,確認有鍵按下</p><p> ?。?)然后得到一個行列值跟鍵盤掃描碼比較,即可判定哪個鍵按下</p><p>  4.33 鍵盤掃描流程圖</p><p><b>  鍵盤掃描流程圖</b></p><p>  4.34發(fā)聲、延時模

17、塊</p><p>  8255A控制C端口,PC1,PC0的值,通過與門來控制喇叭的開關。全為1,喇叭打開—發(fā)聲。全為0,喇叭關閉—發(fā)聲停止。通過延時,來控制發(fā)聲的時間。如果沒有延時,發(fā)聲模塊無法正常工作。</p><p><b>  4.4電路原理圖</b></p><p><b>  電子琴電路圖</b></p

18、><p>  4.5 電路實物連線圖</p><p><b>  電子琴實物連接圖</b></p><p>  5.硬件框圖與說明 </p><p>  5.1 8255A芯片介紹</p><p>  8255 可編程外圍接口芯片是 Intel 公司生產(chǎn)的通用并行I/O 接口芯片,它具有A、B、C

19、 三個并行接口,并行接口是以數(shù)據(jù)的字節(jié)為單位與I/O 設備或被控制對象之間傳遞信息。CPU 和接口之間 的數(shù)據(jù)傳送總是并行的,即可以同時傳遞8 位、16 位、32 位等。用+5V 單電源供電,能在以下三種方式下工作:方式0--基本輸入/出方式、方式1--選通輸入/出方式、方式2--雙向選通工作方式。8255的內部結構及引腳如圖5.1</p><p><b>  內部結構及引腳</b><

20、/p><p>  為讀信號線,與其他信號線一起實現(xiàn)對8255接口的讀操作。通常接系統(tǒng)總線的信號。為寫信號線,與其他信號一起實現(xiàn)對8255的寫操作,通常接系統(tǒng)總線的。</p><p>  為片選信號線,當它為低電平時,才能選中該8255芯片,也才能對8255進行操作。 D0~D7:三態(tài)雙向數(shù)據(jù)總線,8255與CPU數(shù)據(jù)傳送的通道,當CPU 執(zhí)行輸入輸出指令時,通過它實現(xiàn)8位數(shù)據(jù)的讀/寫操

21、作,控制字和狀態(tài)信息也通過數(shù)據(jù)總線傳送。 </p><p>  PA0~PA7:端口A輸入輸出線,一個8位的數(shù)據(jù)輸出鎖存器/緩沖器, 一個8位的數(shù)據(jù)輸入鎖存器。 PB0~PB7:端口B輸入輸出線,一個8位的I/O鎖存器, 一個8位的輸入輸出緩沖器。 PC0~PC7:端口C輸入輸出線,一個8位的數(shù)據(jù)輸出鎖存器/緩沖器, 一個8位的數(shù)據(jù)輸入緩沖器。端口C可以通過工作方式設定而分成2個4位的端口,

22、每個4位的端口包含一個4位的鎖存器,分別與端口A和端口B配合使用,可作為控制信號輸出或狀態(tài)信號輸入端口。</p><p>  這里的8255接口所占地址范圍為0680H~0686H。當對8255接口進行寫操作時,各信號線的狀態(tài)如表5.1所示 </p><p>  8255在應用過程中,將不同的控制字裝入芯片中控制寄存器,即可確定8255的工作方式。8255的控制字由8位二進制數(shù)構成,各位的

23、控制功能如圖5.2所示:</p><p><b>  8255控制字</b></p><p>  5.2 8253芯片介紹 </p><p><b>  8253芯片引腳圖</b></p><p>  8253是可編程計數(shù)器/定時器,內部有三個計數(shù)器,分別為計數(shù)器0、計數(shù)器1和計數(shù)器2,一個時鐘輸入

24、端CLK,一個為門控信號輸入端GATE,另一個為輸出端OUT。每個計數(shù)器內部有一個8位的控制寄存器。 </p><p>  8253的通道:8253有3個通道,分別為通道0、通道1和通道2。 </p><p>  8253中各通道可有6種可供選擇的工作方式, 以完成定時、計數(shù)或脈沖發(fā)生器等多種功能。8253的各種工作方式如下: </p><p>  (1)方式0:計

25、數(shù)結束則中斷 </p><p>  工作方式0被稱為計數(shù)結束中斷方式。當任一通道被定義為工作方式0時, OUT輸出為低電平;若門控信號GATE為高電平,當CPU利用輸出指令向該通道寫入計數(shù)值WR#有效時,OUT仍保持低電平,然后計數(shù)器開始減“1”計數(shù), 直到計數(shù)值為“0”,此刻OUT將輸出由低電平向高電平跳變,可用它向CPU發(fā)出中斷請求,OUT端輸出的高電平一直維持到下次再寫入計數(shù)值為止。 </p>

26、<p>  在工作方式0情況下,門控信號GATE用來控制減“1”計數(shù)操作是否進行。當GATE=1時,允許減“1”計數(shù);GATE=0時,禁止減“1”計數(shù); 計數(shù)值將保持GATE有效時的數(shù)值不變, 待GATE重新有效后,減“1”計數(shù)繼續(xù)進行。 </p><p>  顯然,利用工作方式0既可完成計數(shù)功能, 也可完成定時功能。當用作計數(shù)器時,應將要求計數(shù)的次數(shù)預置到計數(shù)器中,將要求計數(shù)的事件以脈沖方式從CLK

27、端輸入, 由它對計數(shù)器進行減“1”計數(shù),直到計數(shù)值為0,此刻OUT輸出正跳變, 表示計數(shù)次數(shù)到。當用作定時器時,應把根據(jù)要求定時的時間和CLK的周期計算出定時系數(shù),預置到計數(shù)器中。從CLK,輸入的應是一定頻率的時鐘脈沖,由它對計數(shù)器進行減“1”計數(shù), 定時時間從寫入計數(shù)值開始,到計數(shù)值計到“0”為止,這時OUT輸出正跳變,表示定時時間到。 </p><p>  有一點需要說明,任一通道工作在方式0情況下, 計數(shù)器

28、初值一次有效,經(jīng)過一次計數(shù)或定時后如果需要繼續(xù)完成計數(shù)或定時功能,必須重新寫入計數(shù)器的初值。 </p><p>  (2)方式1:單脈沖發(fā)生器 </p><p>  工作方式1被稱作可編程單脈沖發(fā)生器。進入這種工作方式, CPU裝入計數(shù)值n后OUT輸出高電平, 不管此時的GATE輸入是高電平還是低電平, 都不開始減“1”計數(shù),必須等到GATE由低電平向高電平跳變形成一個上升沿后,計數(shù)過程才

29、會開始。與此同時,OUT輸出由高電平向低電平跳變,形成了輸出單脈沖的前沿,待計數(shù)值計到“0”, OUT輸出由低電平向高電平跳變,形成輸出單脈沖的后沿, 因此,由方式l所能輸出單脈沖的寬度為CLK周期的n倍。 </p><p>  如果在減“1”計數(shù)過程中, GATE由高電平跳變?yōu)榈碗姾?,這并不影響計數(shù)過程,仍繼續(xù)計數(shù);但若重新遇到GATE的上升沿,則從初值開始重新計數(shù), 其效果會使輸出的單脈沖加寬,如教材圖9-2

30、2(b)中的第2個單脈沖。 </p><p>  這種工作方式下,計數(shù)值也是一次有效,每輸入一次計數(shù)值,只產(chǎn)生一個負極性單脈沖。 </p><p>  (3)方式2:速率波發(fā)生器 </p><p>  工作方式2被稱作速率波發(fā)生器。進入這種工作方式, OUT輸出高電平,裝入計數(shù)值n后如果GATE為高電平,則立即開始計數(shù),OUT保持為高電平不變; 待計數(shù)值減到“1”和

31、“0”之間, OUT將輸出寬度為一個CLK周期的負脈沖,計數(shù)值為“0”時,自動重新裝入計數(shù)初值n,實現(xiàn)循環(huán)計數(shù),OUT將輸出一定頻率的負脈沖序列, 其脈沖寬度固定為一個CLK周期, 重復周期為CLK周期的n倍。 </p><p>  如果在減“1”計數(shù)過程中,GATE變?yōu)闊o效(輸入0電平),則暫停減“1”計數(shù),待GATE恢復有效后,從初值n開始重新計數(shù)。這樣會改變輸出脈沖的速率。</p><p

32、>  如果在操作過程中要求改變輸出脈沖的速率,CPU可在任何時候,重新寫人新的計數(shù)值, 它不會影響正在進行的減“1”計數(shù)過程,而是從下一個計數(shù)操作用期開始按新的計數(shù)值改變輸出脈沖的速率。</p><p> ?。?)方式3:方波發(fā)生器 </p><p>  工作方式3被稱作方波發(fā)生器。任一通道工作在方式3, 只在計數(shù)值n為偶數(shù),則可輸出重復周期為n、占空比為1:1的方波。 </p

33、><p>  進入工作方式3,OUT輸出低電平, 裝入計數(shù)值后,OUT立即跳變?yōu)楦唠娖健H绻擥ATE為高電平, 則立即開始減“1”計數(shù),OUT保持為高電平,若n為偶數(shù),則當計數(shù)值減到n/2時,OUT跳變?yōu)榈碗娖?,一直保持到計?shù)值為“0”,系統(tǒng)才自動重新置入計數(shù)值n,實現(xiàn)循環(huán)計數(shù)。這時OUT端輸出的周期為n×CLK周期,占空比為1:1的方波序列; 若n為奇數(shù), 則OUT端輸出周期為n×CLK周期,

34、占空比為((n+1)/2)/((n-1)/2)的近似方波序列。 </p><p>  如果在操作過程中, GATE變?yōu)闊o效,則暫停減“1”計數(shù)過程,直到GATE再次有效,重新從初值n開始減“l(fā)”計數(shù)。 </p><p>  如果要求改變輸出方波的速率, 則CPU可在任何時候重新裝入新的計數(shù)初值n,并從下一個計數(shù)操作周期開始改變輸出方波的速率。 </p><p>&l

35、t;b>  8253的控制字:</b></p><p><b>  6.軟件功能 </b></p><p>  (1)鍵盤控制發(fā)聲 </p><p>  (2)高、中、低音轉換 </p><p>  (3)可以預置播放音樂</p><p>  7.軟件主要模塊流程圖 </p

36、><p>  7.1高中低音轉換程序流程圖</p><p>  高中低音轉換程序流程圖</p><p>  7.2播放預定音樂子程序流程圖</p><p>  演奏時,通過判斷按鍵為D來調用音樂播放子程序,音樂播放子程序流程圖如圖12所示。</p><p>  音樂播放子程序流程圖</p><p>

37、  7.3 彈奏子程序流程圖</p><p>  當按鍵為1-8時,調用演奏子程序,演奏子程序的流程圖如下圖所示:</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、 ;無名曲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,轉高音子程序</p><p><b>  jz high</b></p><p>  cmp al,0deh ;若按下鍵為B,轉中音子程序</p>

44、<p><b>  jz mid</b></p><p>  cmp al,0e7h ;若按下鍵為C,轉低音子程序</p><p><b>  jz low</b></p><p>  cmp al,0ebh ;若按下鍵為D,轉播放

45、預定音樂子程序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 ;轉為查表偏移量</p><p> 

49、 mov bl,al ;保存偏移到bx</p><p><b>  mov bh,0</b></p><p>  mov ax,4240H ;計數(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 ;轉為查表偏移量</p><p>  mov bl,al ;保存偏移到bx</p><p>&l

54、t;b>  mov bh,0</b></p><p>  mov ax,4240H ;計數(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、 ;轉為查表偏移量</p><p>  mov bl,al ;保存偏移到bx</p><p><b>  mov bh,0</b></p><p>  mov ax,4240H ;計數(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 ;延時子程序<

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初始化設置8

63、254計時器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 ;寫計數(shù)初值低字節(jié)</p><p><b>  mov al,ah</b></p><p>  out dx,al ;寫計數(shù)初值高字節(jié)</p><p>  mov dx,port_ctrl ;8255初始化,設置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(開揚聲器)<

66、/p><p>  call delay1 ;延時</p><p><b>  mov al,0h</b></p><p>  out dx,al ;置PC1PC0 = 00(關揚聲器)</p><p><b>  ret</b></p><p

67、>  sound endp</p><p>  music1 proc near ;音樂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 ;計數(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.問題分析與解

80、決方案</p><p>  在實驗中,的確遇到很多問題,不過經(jīng)過查詢資料和書籍終于解決</p><p>  問題一:由于編寫的源程序代碼過長,跳轉語句JE,不能順利順利跳轉到</p><p>  解決方案:利用二次跳轉,JE先跳轉到一個中間標簽,然后再用JMP跳轉</p><p>  問題二:按下按鍵,發(fā)出相應頻率的音階,但一直發(fā)聲,無法停下

81、來</p><p>  解決方案:延時一段時間后,給8253的GATE0門輸入0值</p><p>  問題三: 高中低音每次選擇后,要有顯示燈顯示此時是哪種頻率,出錯</p><p>  解決方案:把發(fā)聲程序服用,分別調用程序給那幾個LED燈不同的值</p><p><b>  10.實驗體會</b></p>

82、;<p>  這次課程設計,我的題目聽起來不太復雜,但是實際操作起來,也并不容易,如何設置高低音這個問題困擾了我好久,當時看到其他同學的方法,覺得有點復雜,就開始想,怎么樣就能更加簡潔,在老師的耐心指導和同學的細心幫助下,同時自己也查閱了資料的情況下順利解決了。這次設計,采用總體思想為化總體為部分,部分到最后再合成,便于各個功能的實現(xiàn)。 </p><p>  只要相信認真踏實的做事,必會有

83、成果。因此我秉著此方針,相信肯定能夠完成屬于我自己的電子琴。于是我開始一步一步探索與嘗試,從剛開始的音響不發(fā)音,到后來能發(fā)出亂聲,到中音的發(fā)聲,最后調出高音,低音.這一路的艱辛與快樂,苦惱于興奮,那一刻我興奮的不得了。</p><p>  本次試驗就讓我深刻地感悟到這一點。對問題的處理,方法是最重要的。我不僅完成了任務,也使自己的專業(yè)知識又得到了提升,還考驗了自身的獨立思考的能力。通過這次設計,我覺得自己對軟硬件

84、結合有了新的認識,鞏固了原來所學的知識,對未來的學習起到了一定的幫助和鋪墊作用。</p><p><b>  參考文獻</b></p><p>  周荷琴,吳秀清 微型計算機原理與接口技術 中國科學技術大學出版社. </p><p>  李真香 匯編語言程序設計案例精選 中國水利水電出版社.</p><p&g

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論