版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 目 錄</b></p><p> 第1章系統(tǒng)總體方案說明……………………………………1</p><p> 第2章系統(tǒng)硬件電路設計框圖和工作原理…………………4</p><p> §2.1 89C51單片機……………………………………4</p><p> §2.2
2、 3×5矩陣式鍵盤…………………………………5</p><p> §2.3 I/O并行口直接驅動LED顯示…………………6</p><p> §2.4 發(fā)音電路…………………………………………7</p><p> 第3章 軟件設計及調試……………………………………8</p><p> §3.1
3、主程序設計流程框圖……………………………8</p><p> §3.2按鍵處理子程序…………………………………9</p><p> §3.3音樂播放程序流程框圖…………………………9</p><p> §3.4翻譯按鍵碼程序…………………………………10</p><p> §3.5延遲子程序……
4、…………………………………11</p><p> §3.6軟件調試…………………………………………11</p><p> 第4章 總結和體會………………………………………12</p><p> 第5章 參考文獻……………………………………………13</p><p> 附錄…………………………………………………………14 &
5、lt;/p><p> §附錄A 系統(tǒng)硬件電路原理圖…………………14</p><p> §附錄B源程序清單……………………………………15</p><p> 第1章 系統(tǒng)總體方案說明</p><p> 本文的主要內容是用AT89C51單片機為核心控制元件,設計一個電子琴。以單片機作為主控核心,與鍵盤、蜂鳴器等模塊組成核
6、心主控制模塊,在主控模塊上設有15個按鍵和蜂鳴器。本文主要對使用單片機設計簡易電子琴進行了分析,并介紹了基于單片機電子琴統(tǒng)硬件組成。利用單片機產生不同頻率來獲得我們要求的音階,最終可隨意彈奏想要表達的音樂。但是由于按鍵數目有限,本設計只有15個按鍵,并且還可以通過按轉換鍵(本文為MUSIC來切換歌曲與音符的轉換。還有,本文分別從原理圖,主要芯片,各模塊原理及各模塊的程序的調試來詳細闡述。</p><p> 本課
7、題要求以單片機為核心設計一個簡易電子琴,具有自動播放樂曲和彈奏樂曲的功能。一首音樂是許多不同的音階組成的,而每個音階對應著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構成我們所想要的音樂了,音階對應頻率關系圖1-1:</p><p> C調各音符頻率與計數值T的關系</p><p><b> 圖1-1</b></p><p> 本
8、設計用89C51單片機為核心,利用8段數碼管顯示器.采用動態(tài)顯示輸出,用戶信息輸入則采用3×5矩陣式鍵盤,聲音輸出用蜂鳴器來實現。采用8段數碼管顯示器進行動態(tài)顯示需要占用4根I/O線,3×5矩陣式鍵盤占用7根I/O線,蜂鳴器占用1根I/O線,89C51單片機有足夠的線,不用擴展I/O口。用一片單片機即可滿足本設計的輸入輸出。系統(tǒng)框圖如圖1-2所示:</p><p><b> 圖1-
9、2</b></p><p> 通過對電子琴主體部分的電路進行模仿設計,達到電子琴固有的基本功能,設定按鈕K1、 K2和K3。按鈕K1打開并自動播放樂曲1;按鈕K2打開并自動播放樂曲2;按鈕K3為手動控制音樂停止的按鍵。用12個按鍵開關來分別控制產生低音“1、2..7”、中音“1、2、..7”和高音“1、2、..7”中的部分樂音。根據設計要求該電子琴能實現音鍵的控制,根據各個音調的頻率的差異,來實現按
10、下不同的音鍵而發(fā)出不同的聲音。除此之外還實現了存儲并讀出兩首音樂的附加功能。通過中斷INT-1來實現功能的選擇,當未按下中斷按鈕時,執(zhí)行分支1,即按鍵產生低、中、高的‘1、2…7’音,由12個按鍵產生12種不同的音;當按下中斷按鈕式,執(zhí)行分支2,即可以播放音樂,共有兩首音樂,由兩個鍵來分別控制它們,此外,還設計了一個鍵來停止音樂的播放。系統(tǒng)主要由電子琴發(fā)聲模塊、按鍵選擇控制模塊和存儲器模塊構成。電子琴發(fā)聲模塊負責發(fā)出音鍵相應的音符;選擇
11、控制模塊負責由外部控制電子琴的各項功能的實現;顯示模塊負責按鍵時產生相應的值,由數碼管來實現。在只實現基本功能時(由功能控制鍵控制),外部輸入的音鍵,由電子琴發(fā)聲模塊發(fā)出相應的音符。本文的</p><p> 第2章 系統(tǒng)硬件電路設計框圖與工作原理</p><p> 2.1 89C51單片機</p><p> 本設計使用的是ATMEL公司生產的AT89C51高性
12、能8位單片機,片內含8Kbytes的可反復擦寫的只讀程序存儲器和256bytes的隨機存取數據存儲器,器件采用ATMEL公司的高密度,非易失性存儲技術生產,與標準MCS—51指令系統(tǒng)及8051產品引腳兼容,片內置8位中央處理器(CPU)和Flash存儲單元,功能強大的AT89C52單片機適合于許多較為復雜控制應用場合。如圖2-1和2-2所示:</p><p><b> 圖2-1和2-2</b&g
13、t;</p><p> 2.2 3×5矩陣式鍵盤</p><p> 我們所用的開發(fā)板一共有12個按鍵,可采用3×5矩陣式鍵盤(即3行4列鍵盤),由P2.0~P2.2控制行線,P2.4~P2.7來控制列線,P2.3置1,每個按鍵有它的行值和列值,行值和列值的組合就是識別這個按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和CPU通信。每個按鍵的狀態(tài)同樣需變成數字量“0
14、”和“1”,開關的一端(列線)通過電阻接VCC,而接地是通過程序輸出數字“0”實現的。鍵盤處理程序的任務是:確定有無鍵按下,判斷哪一個鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開時的抖動。兩個并行口中,一個輸出掃描碼,使按鍵逐行動態(tài)接地,另一個并行口輸入按鍵狀態(tài),由行掃描值和回饋信號共同形成鍵編碼而識別按鍵,通過軟件查表,查出該鍵的功能,如圖2-3所示:</p><p><b> 圖2-3<
15、/b></p><p> 2.3 I/O并行口直接驅動LED顯示</p><p> 由于要顯示每個按鍵的鍵值,就需要用到數碼管LED顯示模塊。本設計一共用了一個數碼管顯示器。利用AT89S51單片機的P0端口的P2.0-P2.4連接到一個共陰數碼管的筆段上,數碼管的公共端接地。在數碼管上循環(huán)顯示0-9數字,如圖2-4所示:</p><p><b&g
16、t; 圖2-4</b></p><p><b> 2.4 發(fā)音電路</b></p><p> 發(fā)音電路有三極管,電阻和揚聲器組成,三極管的基極接在單片機的P1.0端口,通過定時器溢出的時間不同,P1.0端口輸出不同頻率的高低電平,P1.0輸出的脈沖頻率不同,三極管導通的頻率也不相同,從而揚聲器根據不同頻率的脈沖發(fā)出的聲音也不相同,發(fā)音電路如下圖2-
17、4所示:</p><p><b> 圖2-5</b></p><p> 第3章 軟件設計及調試</p><p> 主程序設計的第一步為初始化,初始化I/O口,設置定時器定時時間,寫定時器工作方式寄存器,設置允許T0中斷。剛開始需要將存儲單元置1,全部置1之后更新顯示緩沖區(qū)。接著進行顯示初始化,開定時器T0,這樣就可以開始顯示了。設置完以后
18、程序就不斷檢測按鍵情況。檢測使用軟件去抖,也就是第一次檢測到有鍵按下后,延時10ms后再次檢測,如果有鍵按下則執(zhí)行相應指令。本設計還設計了防誤操作程序,也就是對于一個鍵,按一下和一直按著的效果是一樣的,這樣可以防止用戶還沒放開此鍵時,程序已進行第二次或多次同樣的操作。</p><p> 3.1 主程序設計流程框圖</p><p> 見附錄系統(tǒng)硬件原理圖可知矩陣鍵盤的行線由P3.4、P3
19、.6、P3.7連接,列線由P1.3-P1.7連接。檢測有無按鍵按下采取的方法為先將行線清零由列線讀取數據。如果讀入數據不全為1,則表明有鍵按下;然后將行線清零,由列線讀取數據,如果讀入數據不全為1,則表明有鍵按下。按下的鍵不同經過高位和低位值組合后返回的值也不同,每個 圖3-1</p><p> 按鍵都具有唯一對應的按鍵碼,這樣就可以很方便的分析出按下的是幾號鍵。子程序流程圖如圖3-1所示。</
20、p><p> 3.2 按鍵處理子程序</p><p> 知道用戶按下鍵的序號之后,就需要根據按鍵功能執(zhí)行相應的程序。此子程序用分支的方法依次判斷鍵號,和預置鍵號相同的則轉入相應子程序,不同則繼續(xù)執(zhí)行下面判斷。如本程序即MUSIC開關鍵來控制樂音與音樂相互之間的轉換。</p><p> 3.3 音樂播放程序流程框圖</p><p> 知道
21、用戶按下鍵的序號之后,就需要根據按鍵功能執(zhí)行相應的程序。此子程序用分支的方法依次判斷鍵號,和預置鍵號相同的則轉入相應子程序,不同則繼續(xù)執(zhí)行下面判斷。如本程序設置的是0號鍵來關斷音樂的播放,高電平1鍵用來自動播放音樂功能,通過MUSIC來進行切換,如圖3-2主程序,圖3-3 T0中斷子程序所示:</p><p> 圖3-2主程序 圖3-3 T0中斷子程</p><p> 3.
22、4翻譯按鍵碼程序</p><p> 得到的按鍵碼不能直接使用,還需要經過翻譯才能使用,采用的方法為查詢法,從按鍵碼表格中依次取出按鍵碼和P2口采集的按鍵碼進行比較,不同,則繼續(xù)查找,相同,則記錄在按鍵碼表格中的偏移量翻譯按鍵碼子如表圖3-1所示。</p><p> 3.5 延遲子程序</p><p> 本程序是采用動態(tài)顯示,用定時器T0中斷來顯示,用這種方法
23、的好處在于每次刷新顯示的時間相同,每個數碼管顯示的時間也相同,這樣就可以讓數碼管清晰而且穩(wěn)定的顯示數據。用中斷的方法顯示就必須對用到的寄存器和PSW進行入棧保護,這樣才不會影響其他程序的正常運行。晶振頻率為11.0592MHz每次中斷對一個數碼管進行顯示,每次定時3ms,數碼管刷新一次需要24ms。</p><p><b> 3、6軟件調試</b></p><p>
24、 在將程序下到板子上調試的過程花了大概兩天的時間。出現的問題都很細微,而且試行了很多種辦法。</p><p> 此實驗主要是采用Keil軟件生成.HEX文件,在 Proteus畫好原理圖之后,調用.HEX文件在單片機AT89C51上進行軟件調試,我們通過3×5矩陣式鍵盤進行音樂的彈奏,顯示器就顯示我們想要彈得數字,而二極管輪流閃燈,營造一種音樂交替的效果。但當切換MUSIC口時,也就是把它變?yōu)楦唠娖?/p>
25、時,這時按照軟件程序的要求是會自動播放列表中的音樂,程序的大概流程就是這樣,但在這次課程設計調試過程中,我遇到了很多的問題,剛開始程序用Keil軟件運行之后,就很多錯誤,我自己通過摸索發(fā)現,程序旁邊不能有文字解釋,會顯示多余字符。還有,一些警戒性的語句,需要我們詢問老師才得以解決的。雖然程序沒有多大的問題,也就是說,生成了.HEX文件,但調試的時候顯示器顯示的數字有點不對,后者經常是會出現一些亂碼,切換也不自動播放音樂,我經過再三的分析
26、程序,然后才得以解決。</p><p><b> 第4章 總結和體會</b></p><p> 在看完任務書后,我首先想到的是上網查找一些相關的資料,搜尋了一會兒后,結果覺得不是很滿意。因為網上的一些課程設計跟我們的設計要求不一樣,所使用的芯片也不一樣,所以只能拿來起個參考作用。圖書館這個資源不能浪費,我也從圖書館那借閱了幾本跟單片機有關的書籍,我還不至于能達到白
27、手起家的那種高度。</p><p> 本次設計要我們熟悉電子琴產生音樂的原理,設計一個用單片機程序產生音樂和自動播放音樂的功能。我以前單片機學得不是很扎實,這次要我自己設計系統(tǒng)方框圖以及各單元電路圖,然后利用Keil軟件和Proteus進行仿真和對系統(tǒng)進行調試。課程設計的這些要求是對我的一個極大的考驗,不過我已下定決心把它們一個一個的克服。因為世上無難事,只怕有心人。時間過得真快,轉眼間2個星期已經過去了?,F在
28、回想起來,調試的日子歷歷在目,其中有苦也有甜,各中滋味也只有自己最清楚。但是它鍛煉了我不怕困難,堅持到底的精神。這次設計我們學到了很多東西,雖然作出來的東西很基礎,但是加深了我們的動手能力和對書本知識的理解和掌握。做為一名大四的學生,我覺得能多做類似的課程設計是十分有意義的。特別是在仿真設計的過程中出現的一些故障的檢測和排除的一些方法,使我積累了經驗技巧,提高了試驗能力和水平。</p><p> 過去在自己的心
29、里,老是有種畏難的心理在作祟,懷疑自己的水平和能力,認為自己不能把這么難的東西做出來,甚至連嘗試的膽量都沒有。通過這次的實習,我明白了只要拋棄心中的恐懼,不斷培養(yǎng)自己,就能做出自己都不敢相信的成績來。</p><p><b> 第5章 參考文獻</b></p><p> 1、《51系列單片機應用與實踐教程》 周向紅 編 北航出版社2、《單片機應用系統(tǒng)設計》
30、何立民 編 北航出版社</p><p> 3、《單片機原理及應用》 王迎旭 主編 機械工業(yè)出版社</p><p> 4、《51系列單片機設計實例》 樓然苗 等編 北航出版社</p><p> 5、《51單片機應用系統(tǒng)開發(fā)典型實例》戴家 編中國電力出版社</p><p> 6、《單片微型計算機原理及接口技術》陳光東編 華中科技出版
31、社</p><p> 7、《單片機實用系統(tǒng)設計技術》 房小翠 編 國防工業(yè)出版社</p><p><b> 附錄</b></p><p> 附錄A 系統(tǒng)硬件電路原理圖</p><p><b> 電路原理圖</b></p><p><b> 附錄B源程序
32、清單</b></p><p><b> ORG 0000H</b></p><p><b> JMP START</b></p><p> ORG 000BH ;定時器T0的入口地址</p><p> CPL P1.0 ;P1.0取反</p><
33、p> MOV TH0,R2</p><p> MOV TL0,R3</p><p><b> RETI</b></p><p> org 001bh ;定時器T1的入口地址</p><p> INC 20h ;寄存器內容加1</p><p> MOV TH1,#3
34、CH ;送計數初值</p><p> MOV TL1,#0B0H</p><p><b> RETI</b></p><p> ORG 0030H ;外部中斷0入口地址</p><p><b> START:</b></p><p> MOV P2,#00H ;
35、P2送初值0</p><p> MOV SP,#05FH</p><p> MOV TMOD,#11H ;采用工作方式三</p><p> SETB ET0 ;定時器T0開放</p><p> SETB EA ;允許CPU中斷定時器</p><p> SETB ET1 ;開放定時器T1</
36、p><p> MOV 20h,#00H</p><p> ;------------ 鍵盤模塊------------</p><p><b> TEST:</b></p><p><b> CLR P1.7</b></p><p> JNB P3.5,BMUSIC
37、 ;P3.5口為0就轉BMUSIC</p><p> setb p1.7 ;p1.7置1</p><p><b> CLR P1.6</b></p><p> jNB P3.5,B1 ;P3.5口為0就跳轉B1</p><p> jNB P3.7,B5</p
38、><p><b> SETB P1.6</b></p><p><b> CLR P1.5</b></p><p> JNB P3.6,BSTUDY</p><p> JNB P3.5,B2</p><p> JNB P3.7,B6</p><p&g
39、t; SETB P1.5 ;P1.5置1</p><p><b> CLR P1.4</b></p><p> JNB P3.5,B3</p><p> JNB P3.7,B7</p><p><b> SETB P1.4</b></p><p&
40、gt;<b> CLR P1.3</b></p><p> JNB P3.5,B4</p><p><b> SETB P1.3</b></p><p> JMP TEST ;跳轉至TEST</p><p> ;-----------------------------------
41、------</p><p> BMUSIC:MOV DPTR,#M1</p><p><b> JMP MUSIC</b></p><p> B1: MOV DPTR,#Y1</p><p><b> JMP MUSIC</b></p><p> B5: MOV
42、DPTR,#Y5</p><p><b> JMP MUSI</b></p><p> B2:MOV DPTR,#Y2</p><p><b> JMP MUSIC</b></p><p> B6:MOV DPTR,#Y6</p><p><b> JMP
43、 MUSIC</b></p><p> B3:MOV DPTR,#Y3</p><p><b> JMP MUSIC</b></p><p> B7:MOV DPTR,#Y7</p><p><b> JMP MUSIC</b></p><p> B4
44、:MOV DPTR,#Y4</p><p><b> JMP MUSIC</b></p><p><b> BSTUDY:</b></p><p> ;----------音樂模塊-------------</p><p><b> MUSIC:</b></p&g
45、t;<p> MOV 20h,#00H</p><p><b> CLR A</b></p><p> MOVC A,@A+DPTR</p><p><b> MOV R0,A</b></p><p><b> INC DPTR</b></p>
46、;<p><b> CLR A</b></p><p> MOVC A,@A+DPTR</p><p><b> MOV R1,A</b></p><p> CJNE A,#00H,GO</p><p> JMP JIE_SHU</p><p> G
47、O:CJNE A,#0FFH,GGO ;判斷A和#0FFH是否相等</p><p> JMP ZAN_TING</p><p> GGO:CJNE A,#0EEH,YY</p><p> JMP TAN_ZOU</p><p> YY: LCALL QYF ;長調用指令</p><p>
48、;<b> MOV A,R1</b></p><p><b> SETB TR0</b></p><p><b> SETB TR1</b></p><p><b> mov A,R1</b></p><p> AM:MOV P2,R0</
49、p><p> CJNE A,20h,AM</p><p><b> CLR TR0</b></p><p><b> CLR TR1</b></p><p><b> INC DPTR</b></p><p> LJMP MUSIC</p&g
50、t;<p><b> JIE_SHU:</b></p><p><b> CLR P1.0</b></p><p><b> JMP TEST</b></p><p> ZAN_TING:SETB TR1</p><p><b> MOV A,
51、R1</b></p><p><b> MOV A,05H</b></p><p><b> CLR P1.0</b></p><p> AN:CJNE A,20h,AN ;判斷A和20h是否相等</p><p><b> CLR TR1</b><
52、/p><p> MOV 20h,#00H</p><p> INC DPTR ;DPTR加1</p><p><b> JMP MUSIC</b></p><p> TAN_ZOU:LCALL QYF</p><p><b> SETB TR0</b></p&g
53、t;<p><b> SETB TR1</b></p><p> AAA:MOV P2,R0</p><p> MOV A,#0AH</p><p> CJNE A,20h,AAA</p><p> MOV 20h,#00H</p><p> JNB P3.5,AAA&l
54、t;/p><p> JNB P3.7,AAA</p><p><b> CLR TR0</b></p><p><b> CLR TR1</b></p><p><b> JMP TEST</b></p><p> ;---------------
55、---附加子程序----------------------</p><p> QYF:PUSH dph</p><p><b> PUSH dpl</b></p><p><b> MOV A,R0</b></p><p><b> DEC A</b></p&g
56、t;<p> mov b,#02h</p><p><b> MUL AB</b></p><p> MOV DPTR,#YFC</p><p> MOVC A,@A+DPTR</p><p><b> MOV R2,A</b></p><p><
57、;b> MOV TH0,A</b></p><p><b> INC DPTR</b></p><p><b> MOV A,R0</b></p><p><b> DEC A</b></p><p> MOV B,#02H</p>
58、<p><b> MUL AB</b></p><p> MOVC A,@A+DPTR</p><p><b> MOV R3,A</b></p><p><b> MOV TH0,A</b></p><p><b> POP dpl</b
59、></p><p><b> POP dph</b></p><p><b> RET</b></p><p><b> YFC:</b></p><p> DB 0FCH,44H, 0FCH,0ACH, 0FDH,09H, 0FDH,33H, 0FDH,
60、082H, 0FDH,0C7H, 0FEH,05H, 0FEH,022H, 0FEH,56H</p><p><b> Y1:</b></p><p> DB 01H,0EEH</p><p><b> Y2:</b></p><p> DB 02H,0EEH</p&g
61、t;<p><b> Y3:</b></p><p> DB 03H,0EEH</p><p><b> Y4:</b></p><p> DB 04H,0EEH</p><p><b> Y5:</b></p><p>
62、DB 05H,0EEH</p><p><b> Y6:</b></p><p> DB 06H,0EEH</p><p><b> Y7: </b></p><p> DB 07H,0EEH</p><p><b> ;歌曲</b>&l
63、t;/p><p><b> M1:</b></p><p> DB 05H,0AH, 03H,05H, 05H,05H, 08H,14H, 06H,0AH, 08H,05H, 06H,05H, 05H,14H</p><p> DB 05H,0AH, 01H,05H, 02H,05H, 03H,0AH
64、, 02H,05H, 01H,05H, 02H,14H, 00H,00H</p><p><b> m2:</b></p><p> db 08h,0ah,05h,05h,06h,05h,03h,05h,02h,05h,03h,05h,01h,05h,01h,05h</p><p> db 08h,05h,0ah,05h,0ah,
65、05h,09h,05h,08h,05h,09h,05h,06h,05h,05h,05h ;sdnu</p><p><b> END</b></p><p><b> ;程序說明:</b></p><p> TE0控制彈奏的音符頻率TE1控制節(jié)拍長短</p><p> ;一個表中去音符和節(jié)
66、拍 根據音符再去另一個表中取定時器初始值</p><p><b> ;R0 音符</b></p><p> ;R1節(jié)拍 ;50ms 的整數R1倍;;;;;05 0A0 0F0H 14H 1.5S 1EH 2S 28H<
67、/p><p><b> ;R2 TH0</b></p><p><b> ;R3 TL0</b></p><p> ;m: fuma ; jiepai</p><p> ;YFC 取音樂中的節(jié)拍和音符</p><p> ;QYF 根據音符取表yfc中的中斷初
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論