微機(jī)課程設(shè)計(jì)電子琴_第1頁(yè)
已閱讀1頁(yè),還剩11頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  《微機(jī)實(shí)驗(yàn)及課程設(shè)計(jì)》</p><p><b>  課程設(shè)計(jì)報(bào)告</b></p><p><b>  電子琴</b></p><p>  姓 名: 學(xué) 號(hào): </p><p>  專 業(yè):

2、 實(shí) 驗(yàn) 室: </p><p>  同組人員: 學(xué) 號(hào): </p><p>  設(shè)計(jì)時(shí)間: 2011年 9 月 19日 —— 2011年 10 月 31日</p><p>  評(píng)定成績(jī):

3、 審閱教師: </p><p>  目 錄</p><p>  一.實(shí)驗(yàn)簡(jiǎn)介……………………………………………………………3</p><p>  二.基本設(shè)計(jì)思想………………………………………………………3</p><p>  三.程序流程和程序?qū)崿F(xiàn)…………………………

4、……………………3</p><p>  四.測(cè)試方案和測(cè)試結(jié)果………………………………………………10</p><p>  五.分析與總結(jié)…………………………………………………………10</p><p><b>  一.實(shí)驗(yàn)簡(jiǎn)介</b></p><p><b>  目的:</b></p>

5、<p>  檢驗(yàn)和提高我在原理與接口綜合應(yīng)用方面分析問(wèn)題與解決問(wèn)題的能力,同時(shí)也給我提供更多、更好的訓(xùn)練機(jī)會(huì)。根據(jù)設(shè)計(jì)要求,盡可能完成設(shè)計(jì)要求的功能,選擇最合適的器件,構(gòu)成最有效的硬件電路來(lái)完成。</p><p><b>  基本實(shí)驗(yàn)要求:</b></p><p>  構(gòu)造一模擬/數(shù)字電子琴</p><p> ?。?、選擇利用實(shí)驗(yàn)儀

6、揚(yáng)聲器/PC機(jī)內(nèi)8253驅(qū)動(dòng)內(nèi)揚(yáng)聲器與鍵盤1、2、3、4、5、6、7、8設(shè)計(jì)一個(gè)電子琴,通過(guò)按數(shù)字鍵響相應(yīng)的樂(lè)符1、2、3、4、5、6、7、i,使能演奏簡(jiǎn)單的樂(lè)曲。按1~8數(shù)字鍵同時(shí)點(diǎn)亮相應(yīng)的8個(gè)LED燈,使具有聲、光效果;</p><p>  2、 利用實(shí)驗(yàn)儀DAC和喇叭,軟件控制上述功能。選擇機(jī)內(nèi)還是實(shí)驗(yàn)儀由開(kāi)關(guān)設(shè)置,課隨時(shí)切換;</p><p>  3、在8*8點(diǎn)陣上表示音節(jié)高低;&

7、lt;/p><p>  4、精確顯示從第一個(gè)鍵按下后的時(shí)間(單位秒,要求精確到0.1秒,顯示到秒)。 </p><p><b>  進(jìn)一步設(shè)計(jì)要求:</b></p><p>  1.、能準(zhǔn)確記錄開(kāi)始演奏到結(jié)束演奏的時(shí)間,在八段碼上顯示;</p><p>  2、 數(shù)字、模擬合奏,能同時(shí)指示音階;</p><

8、;p>  3、自動(dòng)錄音,并具有回放功能(分兩種水平、難易不等、即記錄按鍵,同時(shí)記錄按鍵和時(shí)間。</p><p><b>  實(shí)現(xiàn)情況:</b></p><p>  實(shí)現(xiàn)基本實(shí)驗(yàn)要求的1~3。</p><p><b>  二.基本設(shè)計(jì)思想</b></p><p>  1、先分別設(shè)計(jì)機(jī)內(nèi)電子琴和實(shí)

9、驗(yàn)儀電子琴。機(jī)內(nèi)電子琴參照實(shí)驗(yàn)五8253計(jì)數(shù)器/定時(shí)器的選做與探索中使用PC機(jī)內(nèi)8253驅(qū)動(dòng)聲音接口;實(shí)驗(yàn)儀電子琴參照實(shí)驗(yàn)中演示實(shí)驗(yàn)的電子琴流程圖;</p><p>  2、再把兩者結(jié)合起來(lái),用一個(gè)高低電平作開(kāi)關(guān)控制是機(jī)內(nèi)還是實(shí)驗(yàn)儀,可通過(guò)8255A口輸入,判斷10(二進(jìn)制)則實(shí)驗(yàn)儀DAC,00則機(jī)內(nèi)喇叭;</p><p>  3、點(diǎn)陣顯示。根據(jù)輸入的數(shù)字判斷應(yīng)顯示點(diǎn)陣的哪一行。具體可先把

10、點(diǎn)陣的8列全選通,輸入為1~8某個(gè)數(shù)字時(shí),判斷顯示相應(yīng)的行;</p><p> ?。?、LED燈顯示。同樣,根據(jù)輸入的數(shù)字判斷應(yīng)顯示哪一個(gè)LED燈。具體可設(shè)置8255B口為輸出,根據(jù)輸入的數(shù)字,輸出控制LED燈相應(yīng)燈亮。</p><p>  三.程序流程和程序?qū)崿F(xiàn)</p><p><b>  1、機(jī)內(nèi)電子琴</b></p><

11、p><b>  流程圖:</b></p><p><b>  程序:</b></p><p>  dseg segment</p><p>  freq dw 262,294,330,349,392,440,494,523 </p><p>  ;揚(yáng)聲器發(fā)聲各頻率值</p>&l

12、t;p>  msg db 'Press 1,2,3,4,5,6,7,8,ESC:',0dh,0ah,'$'</p><p>  tim dw 400</p><p><b>  num db ?</b></p><p><b>  dseg ends</b></p>

13、<p>  sseg segment stack</p><p>  dw 256 dup(?)</p><p><b>  sseg ends</b></p><p>  cseg segment</p><p>  assume cs:cseg,ds:dseg</p><p>  

14、start: mov ax,dseg</p><p><b>  mov ds,ax</b></p><p>  mov dx,offset msg</p><p><b>  mov ah,9</b></p><p>  int 21h ;顯示提示信息</p><p>

15、;  sss: mov ah,7</p><p><b>  int 21h </b></p><p>  ;等待從鍵盤接收字符,不回顯al=asc碼</p><p>  cmp al,1bh</p><p>  je exit;若為ESC鍵,則轉(zhuǎn)EXIT退出</p><p>  cmp a

16、l,31h</p><p>  jl sss ;小于31h </p><p>  cmp al,38h ;大于38h</p><p>  jg sss ;不在'1'-'8'之間轉(zhuǎn)sss</p><p>  sub al,31h</p>&l

17、t;p>  mov num,al ;num求出相應(yīng)的時(shí)間常數(shù)的序號(hào)</p><p>  jinei: mov al,num</p><p><b>  add al,al</b></p><p>  mov ah,00h</p><p><b>  mov si,ax</b></p&

18、gt;<p>  again: mov di,freq[si]</p><p>  mov bx,tim</p><p><b>  call gen</b></p><p><b>  jmp sss</b></p><p>  exit: mov ah,4ch</p&g

19、t;<p><b>  int 21h</b></p><p>  gen proc near</p><p>  mov al,0b6h ;設(shè)置8253通道2方式3二進(jìn)制計(jì)數(shù)</p><p>  out 43h,al</p><p>  mov dx,12h</p><p>  

20、mov ax,12928</p><p>  ; DX AX=896*533h=18*65536+12928=1.19M</p><p><b>  div di</b></p><p>  out 42h,al ;8253通道2口設(shè)置初值</p><p><b>  mov al,ah</b>&l

21、t;/p><p>  out 42h,al</p><p>  in al,61h ;讀8255PB口</p><p><b>  mov ah,al</b></p><p><b>  or al,3</b></p><p>  out 61h,al</p>&

22、lt;p>  wait1: mov cx,0h</p><p>  delay3: mov ax,10 ;延時(shí)子程序</p><p>  delay2: nop</p><p><b>  dec ax</b></p><p>  jnz delay2</p><p>  loo

23、p delay3</p><p><b>  dec bx</b></p><p><b>  jnz wait1</b></p><p><b>  mov al,ah</b></p><p>  out 61h,al</p><p><b>

24、;  ret</b></p><p>  gen endp</p><p>  cseg ends</p><p>  end start</p><p><b>  2、實(shí)驗(yàn)儀電子琴</b></p><p><b>  流程圖:</b></p>

25、;<p><b>  實(shí)驗(yàn)電路:</b></p><p><b>  程序:</b></p><p>  data segment</p><p>  ioportequ 0d400h-0280h</p><p>  io8253aequ ioport+280h</p&g

26、t;<p>  io8253bequ ioport+283h</p><p>  io8255aequ ioport+288h</p><p>  io8255bequ ioport+28bh</p><p>  io0832aequ ioport+290h</p><p>  data1 db 80h,96h

27、,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh </p><p>  db 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h</p><p>  db 80h,66h,4eh,38h,25h,15h,09h,04h</p><p>  db 00h,04h,09h,15h,25h,38h,4eh,66h;正弦波數(shù)據(jù)<

28、;/p><p>  time db 120,106,94,89,79,70,63,59;發(fā)不同音時(shí)8253的計(jì)數(shù)器初值</p><p>  msg db 'Press 1,2,3,4,5,6,7,8,ESC:',0dh,0ah,'$'</p><p>  num db ?;num為8253計(jì)數(shù)器初值的序號(hào)</p&

29、gt;<p><b>  data ends</b></p><p>  code segment</p><p>  assume cs:code,ds:data</p><p>  start:mov ax,data</p><p><b>  mov ds,ax</b><

30、/p><p>  mov dx,offset msg</p><p><b>  mov ah,9</b></p><p>  int 21h ;顯示提示信息</p><p>  sss:mov ah,7</p><p>  int 21h ;從鍵

31、盤接收字符,不回顯</p><p>  cmp al,1bh</p><p>  je exit ;若為ESC鍵,則轉(zhuǎn)EXIT</p><p>  cmp al,31h</p><p><b>  jl sss</b></p><p>  cmp al,38h</

32、p><p>  jg sss ;若不在'1'-'8'之間轉(zhuǎn)sss</p><p>  sub al,31h</p><p>  mov num,al ;求出相應(yīng)的時(shí)間常數(shù)的序號(hào)</p><p>  mov cx,60 ;取60次32個(gè)正弦波數(shù)據(jù)

33、</p><p>  ddd:mov si,0</p><p>  lll:mov al,data1[si] ;取正弦波數(shù)據(jù)</p><p>  mov dx,io0832a</p><p>  out dx,al ;放音</p><p>  call delay

34、;調(diào)延時(shí)子程序</p><p><b>  inc si</b></p><p>  cmp si,32 ;是否取完32個(gè)數(shù)據(jù)</p><p>  jl lll ;若沒(méi)有,則繼續(xù)</p><p>  loop ddd ;總循環(huán)次數(shù)60是否完,沒(méi)有,

35、則繼續(xù)</p><p><b>  jmp sss</b></p><p>  exit:mov ah,4ch</p><p><b>  int 21h</b></p><p>  delay proc near ;延時(shí)子程序</p><p> 

36、 ccc:mov bx,offset time</p><p>  mov dx,io8253b ;置8253通道0為方式0工作</p><p>  mov al,10h</p><p><b>  out dx,al</b></p><p>  mov dx,io8255b ;設(shè)8

37、255A口輸入</p><p>  mov al,9bh</p><p><b>  out dx,al</b></p><p>  mov al,num ;取相應(yīng)的時(shí)間常數(shù)</p><p><b>  xlat</b></p><p>  mov dx,i

38、o8253a</p><p>  out dx,al ;向8253通道0輸出</p><p>  kkk:mov dx,io8255a</p><p>  in al,dx ;從8255A口讀一字節(jié)</p><p>  test al,01 ;判PA0口是否為1</p&

39、gt;<p>  jz kkk ;若不為1,則轉(zhuǎn)KKK</p><p>  ret ;子程序返回</p><p>  delay endp</p><p><b>  code ends</b></p><p><b>  end st

40、art</b></p><p><b>  3.電子琴總設(shè)計(jì)</b></p><p><b>  流程圖:</b></p><p><b>  電路圖:</b></p><p><b>  8個(gè)LED燈</b></p><p

41、>  8253 8255</p><p><b>  1MHZ</b></p><p><b>  +5V</b></p><p><b>  DAC0832</b></p><p><b>  280H</b><

42、/p><p>  K0開(kāi)關(guān) 288H</p><p><b>  290H</b></p><p><b>  程序:</b></p><p>  data segment</p><p>  ioportequ 0c800h-0280h</p>&

43、lt;p>  io8253aequ ioport+280h;8253通道0地址</p><p>  io8253bequ ioport+283h;8253控制字寄存器地址</p><p>  io8255aequ ioport+288h ;8255A口地址</p><p>  io8255bequ ioport+289h ;8255B口地址</p

44、><p>  io8255dequ ioport+28bh;8255控制字寄存器地址</p><p>  io0832aequ ioport+290h</p><p>  proth equ ioport+2a8h ;點(diǎn)陣行選的地址</p><p>  protlr equ ioport+2b0h ;點(diǎn)陣列選的地

45、址</p><p>  data1 db 80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh</p><p>  db 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h</p><p>  db 80h,66h,4eh,38h,25h,15h,09h,04h</p><p>  db 00

46、h,04h,09h,15h,25h,38h,4eh,66h</p><p><b>  ;正弦波數(shù)據(jù)</b></p><p>  time db 120,106,94,89,79,70,63,59</p><p>  ;發(fā)不同音時(shí)8253的計(jì)數(shù)器初值</p><p>  banquan db 0dh,0a

47、h</p><p><b>  db'</b></p><p>  *************************************************',0dh,0ah</p><p>  db'** &

48、lt;/p><p>  **',0dh,0ah</p><p>  db'** WELCOME TO USE </p><p>  dianziqin **',0dh,0ah</p><p>  db'**

49、 THIS PROGRAMME IS </p><p>  DESIGHED BY **',0DH,0AH</p><p>  db'** zhouqiuping 61007204 </p><p>  **',0DH,0AH</p>

50、;<p>  db'** </p><p>  **',0dh,0ah</p><p><b>  db'</b></p><p>  ***********************************

51、**************',0dh,0ah</p><p>  db ' Press 1,2,3,4,5,6,7,8,ESC:',0dh,0ah,'$'</p><p>  num db ? ;num為8253計(jì)數(shù)器初值的序號(hào)</p><p>  freq dw 2

52、62,294,330,349,392,440,494,523 ;揚(yáng)聲器發(fā)聲各頻率值</p><p>  tim dw 400</p><p><b>  data ends</b></p><p>  stack segment stack</p><p>  dw 256 dup(?)<

53、/p><p>  stack ends</p><p>  code segment</p><p>  assume cs:code,ds:data</p><p>  start: mov ax,data</p><p><b>  mov ds,ax</b></p><p&g

54、t;  mov dx,offset banquan ; 版權(quán)顯示</p><p><b>  mov ah,9</b></p><p>  int 21h ;顯示提示信息</p><p>  sss: mov ah,7</p><p>  int 21h

55、 ;等待從鍵盤接收字符,不回顯al=asc碼</p><p>  cmp al,1bh</p><p>  je exit ;若為ESC鍵,則轉(zhuǎn)EXIT推出</p><p>  cmp al,31h </p><p>  jl sss ;小于31h

56、 </p><p>  cmp al,38h ;大于38h</p><p>  jg sss ;不在'1'-'8'之間轉(zhuǎn)sss</p><p>  sub al,31h</p><p>  mov num,al ;num求出相應(yīng)的時(shí)

57、間常數(shù)的序號(hào)</p><p>  dianzhen: mov al,0ffh ;點(diǎn)陣板的列全部選通</p><p>  mov dx,proth</p><p><b>  out dx,al</b></p><p>  mov al,00000001 :點(diǎn)陣的行賦初值</p><p>

58、;  shl al,num ;根據(jù)輸入的數(shù)字,左移相應(yīng)位數(shù),即點(diǎn)陣亮相應(yīng)行</p><p>  mov num,al ;如輸入3,則num為2,左移兩位,第三行亮</p><p>  mov dx,prothl</p><p><b>  out dx,al</b></p>

59、<p>  led: mov dx,io8255d </p><p>  mov al,99h ;設(shè)置8255A口入B口出</p><p>  mov dx,io8255b </p><p>  out dx,num ;根據(jù)移位后的num點(diǎn)亮相應(yīng)led燈</p><p>  k

60、aiguan: mov dx,io8255a ;判斷機(jī)內(nèi)機(jī)外</p><p>  in al,dx ;從8255B口讀一字節(jié)</p><p>  test al,10b ;判斷PA0口是否為10(二進(jìn)制)</p><p>  jz jiwai ;是的話轉(zhuǎn)實(shí)驗(yàn)儀</p><p> 

61、 jmp nei ;否則轉(zhuǎn)機(jī)內(nèi)</p><p>  ;---------------------------------jiwai</p><p>  jiwai:mov cx,60 ;取60次32個(gè)正弦波數(shù)據(jù)</p><p>  ddd:mov si,0</p><p>  lll:mov

62、al,data1[si] ;取正弦波數(shù)據(jù)</p><p>  mov dx,io0832a</p><p>  out dx,al ;放音</p><p>  call delay ;調(diào)延時(shí)子程序</p><p><b>  inc si</

63、b></p><p>  cmp si,32 ;是否取完32個(gè)數(shù)據(jù)</p><p>  jl lll ;若沒(méi)有,則繼續(xù)</p><p>  loop ddd ;總循環(huán)次數(shù)60是否完,沒(méi)有,則繼續(xù)</p><p><b>  jmp sss</b

64、></p><p>  exit: mov ah,4ch</p><p><b>  int 21h</b></p><p>  delay proc near ;延時(shí)子程序</p><p>  ccc: mov bx,offset time</p><p> 

65、 mov dx,io8253b ;置8253通道0為方式0工作</p><p>  mov al,10h</p><p><b>  out dx,al</b></p><p>  mov al,num ;取相應(yīng)的時(shí)間常數(shù)</p><p><b>  xlat</b><

66、;/p><p>  mov dx,io8253a</p><p>  out dx,al ;向8253通道0輸出</p><p>  kkk:mov dx,io8255a</p><p>  in al,dx ;從8255A口讀一字節(jié)</p><p>  test al,01

67、 ;判PA0口是否為1</p><p>  jz kkk ;若不為1,則轉(zhuǎn)KKK</p><p>  ret ;子程序返回</p><p>  delay endp</p><p>  ;-------------------------------------機(jī)內(nèi)部分</

68、p><p>  jinei: mov al,num</p><p><b>  add al,al</b></p><p>  mov ah,00h</p><p><b>  mov si,ax</b></p><p>  again: mov di,freq[si]&l

69、t;/p><p>  mov bx,tim</p><p><b>  call gen</b></p><p><b>  jmp sss</b></p><p>  gen proc near</p><p>  mov al,0b6h ;設(shè)置8253通

70、道2方式3二進(jìn)制計(jì)數(shù)</p><p>  out 43h,al</p><p>  mov dx,12h</p><p>  mov ax,12928 </p><p>  ; DX AX=896*533h=18*65536+12928=1.19M</p><p><b>  div di</b&g

71、t;</p><p>  out 42h,al ;8253通道2口設(shè)置初值</p><p><b>  mov al,ah</b></p><p>  out 42h,al </p><p>  in al,61h ;讀8255PB口</p><p&g

72、t;<b>  mov ah,al</b></p><p><b>  or al,3</b></p><p>  out 61h,al</p><p>  wait1: mov cx,0h</p><p>  delay3: mov ax,10 ;延時(shí)子程序</p>

73、<p>  delay2: nop</p><p><b>  nop</b></p><p><b>  dec ax</b></p><p>  jnz delay2</p><p>  loop delay3</p><p><b>  dec bx

74、</b></p><p><b>  jnz wait1</b></p><p><b>  mov al,ah</b></p><p>  out 61h,al</p><p><b>  ret</b></p><p>  gen e

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論