2862.D可存儲式電子琴設計報告(包含小組成員報告源代碼等) 總體電子琴設計_第1頁
2862.D可存儲式電子琴設計報告(包含小組成員報告源代碼等) 總體電子琴設計_第2頁
2862.D可存儲式電子琴設計報告(包含小組成員報告源代碼等) 總體電子琴設計_第3頁
2862.D可存儲式電子琴設計報告(包含小組成員報告源代碼等) 總體電子琴設計_第4頁
2862.D可存儲式電子琴設計報告(包含小組成員報告源代碼等) 總體電子琴設計_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計算機科學與技術學院硬件課程設計報告組 長: 學 號: 專 業(yè): 信息安全 班 級: 設計題目: 可存儲式電子琴 成 員: 指導教師: 職 稱: 副教授 2008年 7月 徐州課程設計指導教師評閱書指導教師評語:成 績: 指導教師簽字: 年 月 日摘 要在這次的硬件實驗中,我們利用學習的微機原理與接口技術這門課程課上我們學到的一些計算機硬件工作的基本原理, 匯編語言程序設計方法,微型計算機接口技術,建立微型計算機系統(tǒng)的整體概念,初步形成微機系統(tǒng)軟硬件開發(fā)的能力。為了能夠學以致用,同時也為了更深入的了解熟悉可編程定時器8253和8255可編程并行通信控制器。在匯編語言環(huán)境下,利用上述兩種芯片,編

2、程讓8255通過識別鍵盤產生鍵值,8253識別發(fā)聲從而實現計算機按照按鍵的不同而發(fā)出不同頻率的聲音??纱鎯κ诫娮忧倏捎糜谠O計小型發(fā)聲玩具,由于本電子琴設計簡單,稍加修改便可用于其它地方,如報警防盜器部件,音樂門鈴等,具有一定的商業(yè)價值。 關鍵詞: 可存儲電子琴;8255;8253;門控信號;程序代碼目 錄總體設計部分1設計任務與要求1 2 總體方案1 3分工與協作14硬件方案15軟件方案36 流 程 圖47 程序源代碼88分析與測試139實驗體會1310參考文獻14 總體設計部分1 設計任務與要求 本次硬件課程設計的任務和要求是通過居于8255a芯片和8253芯片上的電路設計和電路連接并通過對

3、它們進行編程實現一個具有可存儲音樂和電子琴的基本功能的小器件。該器件不僅具有基本的彈奏功能(輸入不同的鍵能發(fā)出不同頻率的聲音即音符),還具有彈奏存儲功能(在先后輸入不同的鍵后,它能將這些鍵存儲起來,然后一并輸出)。1.1 本次硬件課程設計是為了實現一個可以存儲音樂且具有一般電子琴的基本功能的小器件。1.2 通過硬件設計熟悉并掌握微型計算機與接口技術課程中的關于各個芯片的知識和一些具體應用;1.3 通過此次硬件課程設計培養(yǎng)自己的對于微型計算機與接口技術課程的興趣;1.4 通過此次硬件課程設計培養(yǎng)自己的動手能力和創(chuàng)新精神,培養(yǎng)自己的提出問題并解決問題的能力;1.5 通過此次課程設計鍛煉同學們的彼此

4、配合,彼此合作的能力和意識;2總體方案:2.1 用pc機的鍵盤數字鍵對應電子琴的8個琴鍵和2功能鍵。2.2 8255a和8253配合構成音頻發(fā)生器。8255a的pb0口控制揚聲器的開關,8253控制揚聲器的發(fā)聲頻率。2.3 8255a門控信號與8253的頻率控制信號經與門后驅動揚聲器發(fā)出各種音頻和音長聲音。3 分工協作一個好的團隊是完成工作作業(yè)最前提的前提,團隊之間需要共同協作,而分工也是更好完成作業(yè)的前提,這次設計我們小組先經過協商完成功能分析、總體硬件規(guī)劃、程序總體設計,然后小組成員各自情況進行分工如下:組長王宣魁:實現,編寫存儲子程序部分和播放子程序部分及程序的調試。搜集資料、硬件825

5、3部分功能的連接、及相關程序初始化,編寫總體實驗報告。4硬件設計方案 4.1可存儲式電子琴硬件課程設計主要是居于8255a芯片和8253芯片的基本功能進行設計的。我們將8255a芯片的a端口作為輸出端口,而b端口作為輸入端口,兩個端口都與鍵盤相連接:a端口的低四位連在鍵盤的行線上,b端口的高四位連在鍵盤的列線上。再將它的輸出端口pc0與8253相應門控信號gate0相連接。這樣可以通過控制pc0來控制8253的輸出:當pc0為“1”時,gate0有效,8253能夠輸出頻率方波;當pc0為“0”時,gate0無效,out0無法輸出頻率方波。而8253的時鐘輸入引腳clk0與相應的時鐘發(fā)生器相連接

6、,8253的0通道的out0信號與8255a的pc1通過與門以后與蜂鳴器相連接,從而驅動并控制蜂鳴器發(fā)音的發(fā)音和終端:當pc1為“1”時蜂鳴器連通,能夠發(fā)出聲音;當pc1為“0”時蜂鳴器被中斷,不能發(fā)出聲音。這樣,我們在硬件上實現了通過8255a芯片輸入設備的輸入信號并通過它傳送給8253,讓8253進行相應的處理后輸出給蜂鳴器的功能。我們要通過對8255a的初始化和編程控制它的相關工作,使其能夠實現上面提到的相應功能。然后,我們對8253進行編程,使其初始化,并根據從8255a芯片傳遞來的信息的種類為8253的運行編寫不同的程序段,使其在運行中根據8255a芯片傳遞來的信息的不同執(zhí)行不同的程

7、序(輸出不同的音頻)。 4.2可存儲式電子琴硬件課程設計中的各鍵所對應的音符及頻率和n值如下表:鍵值01h02h03h04h05h06h07h08h音符1234567中止頻率5245886606987848809881048n值381734013030286525512273202419084.3可存儲式電子琴硬件課程設計的電路圖設計如下:圖2-1 8255a芯片與鍵盤的連接pc1pc0cs 8253gate0out0 csu87接揚 聲器頻率發(fā)生器y0 y1 74ls138 8255a地址為300h303h8253 地址為308h30bh圖2-2 8255a與8253芯片之間的連接5 軟件設

8、計方案5.1對8255a及8253芯片進行初始化。8255a的a,b,c以及控制字端口的地址分別是300h,301h,302h,303h;8255a的初始化控制字為10000010b。8253的0,1,2通道以及控制字端口的地址分別為308h,309h,30ah,30bh;8253的初始化控制字為00110111b。5.2從8255a芯片的端口中確認是鍵盤中的哪一個鍵被按下,并進行編碼。從8255a的b端口中讀入鍵盤的狀態(tài),進行一系列的比較。確認是哪一個鍵按下了,接著再通過著不同的鍵被按下進行執(zhí)行不同的程序段。將不同的鍵所對應的頻率的n值送入8253的0通道。這樣,就產生了不同頻率的方波。在送

9、入揚聲器后就能發(fā)出不同音頻和音長的聲音。6 流程圖開始初始化8255a和8253檢測鍵盤是否有鍵按下,對鍵進行編碼,并跳轉play子程序執(zhí)行play子程序結束 圖4-1總體流程圖開始 保存所按下的鍵8255a中輸出8253的0通道的門控允許信號并記時8253的out0中輸出鍵值所對應的音符的頻率鍵盤是否仍按著? 是 否8255a中輸出8253門控禁止信號,保存時間結束返回圖4-2 play子程序流程開始所有鍵都松開有鍵按下消除抖動,確認按下,編碼跳轉encode按鍵松開?y 圖4-3鍵盤檢測流程圖ydo鍵?lei鍵?nynymi鍵?nfa鍵?ynso鍵?yla鍵?nynxi鍵?ynzonzi鍵

10、y跳轉play子程序n跳轉回放回放鍵?n y跳轉文件播放n文件播放?y返回繼續(xù)檢測鍵盤狀態(tài) 圖4-4 編碼流程圖 7 程序源代碼,-,數據段定義,-data segment key_table dw 7634,6802,6061,5764,5102,4545,4049,3759 ,定義各音符所對應的n值表 key_num db 100 dup(?) ,鍵盤存儲數組的定義 key_time db 100 dup(?) , twotigers_fre dw 2 dup(3817,3401,3030,3817,0) , 音樂文件的定義 dw 2 dup(3030,2865,2551,0) dw 2

11、dup(2551,2273,2551,2865,3030,3817,0) dw 2 dup(3344, 5102,3817,0) twotigers_time dw 10 dup(100),200,100,100,200 dw 2 dup(50,50,50,100,100) dw 2 dup(100,100,200) key_long equ $-key_num file_long equ $-twotigers_fre data ends,-,代碼段定義,- code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mo

12、v dx,303h mov al,10000010b ,8255初始化 ,控制字為10000010b out dx,al mov dx,30bh mov al,00110111b ,8253初始化,控制字為00110111b out dx,al mov dx,300h mov al,00h ,初始化8255的a端口 out dx,al mov dx,301h wait_open: in al,dx ,檢測鍵盤是否松開,若無則循環(huán)檢測 and al,0fh cmp al,0fh ,檢測各列是否還有鍵按下 jne wait_open wait_pres: in al,dx ,檢測鍵盤的鍵是否有鍵按

13、下,若無這循環(huán)檢測 and al,0fh cmp al,0fh ,檢測列上是否有鍵按下 ,即是否又不唯一的列 je wait_pres mov cx,16eah ,消除抖動 delay: loop delay mov di,offset key_num mov si,offset key_time in al,dx and al,0fh cmp al,0fh ,確認有鍵按下 je wait_pres mov al,0feh mov cl,al next_row: mov dx,300h ,檢查是哪一行的鍵按下 out dx,al mov dx,301h in al,dx and al,0fh

14、cmp al,0fh ,檢測是否是這一行的鍵按下 jne encode,-,編碼確認是哪一個鍵按下,- encode: cmp al,11101110b jz do cmp al,11101101b jz lei cmp al,11101011b jz mi cmp al,11100111b jz fa cmp al,11011110b jz so cmp al,11011101b jz la cmp al,11011011b jz xi cmp al,11010111b jz zonzi cmp al,10111110b jz back_play cmp al,10111101b jz fi

15、le_play,-,確認哪一鍵被按下后,跳轉這一個鍵所對應的鍵的功能程序段實現其功能,- do: mov bx,7634 call play ,調用play 子程序 jmp wait_pres lei: mov bx,6802 call play jmp wait_pres mi: mov bx,6061 call play jmp wait_pres fa: mov bx,5764 call play jmp wait_pres so: mov bx,5102 call play jmp wait_pres la: mov bx,4545 call play jmp wait_pres xi

16、: mov bx,4049 call play jmp wait_pres zonzi: mov bx,3759 call play jmp wait_pres back_play: mov cx,key_long ,回放鍵所對應的程序段 ,實現回放功能 mov di,offset key_num mov si,offset key_time mov bx,0 next: mov ax,key_tablebx ,按順序調出在輸入時被按下的鍵 mov dx,308h out dx,al mov al,ah out dx,al mov al,si dec_al: dec al ,發(fā)出跟該鍵被按下的

17、時間一樣長的音長 jnz dec_al inc di inc si inc bx inc bx loop next jmp wait_pres ,轉回等待鍵盤的輸入 file_play: mov di,offset twotigers_fre ,音樂文件的播放程序段 mov bx,offset twotigers_time mov cx,file_long next_play: mov dx,308h mov al,di out dx,al inc di mov al,di ,調出音樂文件中的各個音符所對應的 n 值 out dx,al mov dl,bx inc bx mov dh,bx d

18、x_dec: dec dx ,各個音符所對應的音長控制 jnz dx_dec inc di inc bx loop next_play jmp wait_pres ,轉回等待鍵盤的輸入,-,play 子程序的定義,- play proc mov di,al ,將當前被按下的鍵進行保存 inc di mov ah,al or al,03h ,形成8253門控信號 mov dx,302h ,輸出門控信號 out dx,al mov dx,308h mov al,bl ,在8253中輸出各音符的頻率 out dx,al mov al,bh out dx,al mov dx,301h mov bl,0

19、0h ,初始化計時器 test_open: inc bl ,給按鍵進行計時并檢測鍵盤是否松開 in al,dx and al,0fh cmp al,0fh jnz test_open mov si,bl ,存儲計時器中的時間 inc si mov al,ah and al,11111000b ,輸出門控信號使8253停止輸出 mov dx,302h out dx,al ret play endp code ends end start,-,代碼段定義結束,-8 分析與測試可存儲式電子琴的關鍵在于存儲和播放兩個模塊,這次的課程設計過程我們經過精心的準備與設計,通過資料的查詢和自己思維的創(chuàng)造,所完

20、成的作品能夠達到課程設計的要求,但是由于設備條件的限制,我們只設計了10個按鈕鍵實現樂音的演奏與播放,從8個開關按鈕來輸入控制演奏過程,設計過程中程序能夠無錯運行,唯一遺憾的就是器材所限,沒有揚聲器來實現最后的演奏過程,只能用led燈來模擬演示.9 實驗體會xxxx在此次項目開發(fā)中,我擔任組長,同時也負責軟件主要部分的編程。由于在平時我都有認真學習,上課時都有認真聽講,因此,我在接到這一個課題后,覺得非常簡單,因此,馬上就進行硬件和軟件的設計,設計出來后滿以為能馬上完成設計,但是令我很失落的是在調試程序時,程序出現非常多的奇奇怪怪的錯誤。后來找了好久才找出來,改正后,才知道很多錯誤都是因為自己

21、對匯編語言的一些語法只是一些模糊的概念導致的。當等到所有的錯誤都改正后,我又有些困惑了。在調試系統(tǒng)時,小燈泡根本不會像我想象的那樣發(fā)亮。我調試了很久,后來經過我跟組員的探討和問老師,問同學后才解決。才把試驗完成。心里挺高興的。下面我談談我的體會:在一些工作或生活中,當我們遇到問題時不要感到恐懼也不要輕視,否則,小小的問題都有可能讓你陷入僵局中。在遇到這些問題時,我們要充分利用我們身邊的可利用的資源。比如說:請求他人的幫助;在處理問題時,我們要努力的拉動團隊的積極性,培養(yǎng)和促進團隊的合作精神。因為隊伍的力量非常大。一些問題只能通過團隊來來解決。并且當今社會團隊精神越來越重要了。xxx在做這次大作業(yè)之前,我對計算機地了解只限于計算機系統(tǒng)地各個主要組件,比如主板,內存,硬盤,光驅等,是在微機原理課上我才開始真正接觸計算機的基本工作方式,知道了幾種最簡單但是也很常用的幾種接口芯片,讓我深切地感受到計算機地奇妙,尤其是我們這次地題目:可存儲式電子琴,讓我知道了竟然不用音箱竟然也可以聽歌,編寫一個簡單的程序竟然還可以彈奏!于是我就開始積極準備這個大作業(yè)。但在準備的過程中,我深感自己所學有限,很有一種書到用時方恨少的感覺,于是就一有空就鉆進圖書館查資料,在完成過程中,我們還充分地利用了網絡,通過它獲取了不少知識,解

溫馨提示

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

評論

0/150

提交評論