版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 《微機(jī)原理與單片機(jī)接口技術(shù)》</p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p><b> 題目:電子琴</b></p><p> 姓 名: </p><p> 學(xué) 號(hào): &
2、lt;/p><p> 專業(yè)班級(jí): </p><p> 指導(dǎo)老師: </p><p> 所在學(xué)院:電氣工程與自動(dòng)化學(xué)院 </p><p> 2013 年 5月 16 日</p><p>
3、;<b> 目錄</b></p><p><b> 摘要3</b></p><p><b> 第一章 引言4</b></p><p> 1.1 電子琴系統(tǒng)概述4</p><p> 1.2 設(shè)計(jì)思路5</p><p> 第二章 系
4、統(tǒng)總體方案及硬件設(shè)計(jì)6</p><p> 2.1設(shè)計(jì)任務(wù)與主要內(nèi)容分析6</p><p> 2.2系統(tǒng)的硬件設(shè)計(jì)6</p><p><b> 2.3最小系統(tǒng)6</b></p><p><b> 2.4復(fù)位電路7</b></p><p> 2.5 顯示單元設(shè)
5、計(jì)原理7</p><p> 2.6蜂鳴器電路9</p><p><b> 2.7鍵盤電路9</b></p><p> 第三章 系統(tǒng)軟件設(shè)計(jì)10</p><p> 3.1軟件的結(jié)構(gòu)圖10</p><p> 3.2程序流程圖11</p><p> 3.
6、3音階的實(shí)現(xiàn)與初值計(jì)算12</p><p> 3.4初始化程序12</p><p> 3.5鍵盤消抖13</p><p> 3.6顯示程序13</p><p> 3.7發(fā)聲程序13</p><p><b> 結(jié)束語16</b></p><p><
7、b> 參考文獻(xiàn)17</b></p><p> 附1 源程序代碼及詳細(xì)解析18</p><p> 附錄2 系統(tǒng)原理圖26</p><p><b> 摘要</b></p><p> 本設(shè)計(jì)是用AT89C52單片機(jī)為核心控制元件,設(shè)計(jì)一個(gè)模擬電子琴發(fā)聲控制系統(tǒng)。以單片機(jī)作為主控核心,與鍵盤、
8、揚(yáng)聲器、LED顯示器等模塊組成核心主控制模塊。在主控模塊上設(shè)有11個(gè)按鍵,其中7個(gè)按鍵控制7個(gè)音符,1個(gè)作為播放示例樂曲使用,具有手動(dòng)隨意彈奏和自動(dòng)播放樂曲的功能,另外3個(gè)按鍵用來實(shí)現(xiàn)高、中、低音的音符發(fā)音。下面具體介紹一下單片機(jī)各端口的分配功能:?jiǎn)纹瑱C(jī)的P2.0-P2.6為輸入端口,用來控制7個(gè)音符的選擇彈奏;P2.7為功能轉(zhuǎn)換鍵,它能切換手動(dòng)隨意彈奏和自動(dòng)播放樂曲的功能;P2.0-P2.2為單片機(jī)控制電子琴實(shí)現(xiàn)彈奏高、中、低的功能切
9、換鍵;P0端口通過上拉電阻接到+5V上,然后接LED共陰數(shù)碼管;P1.0為單片機(jī)的輸出端口,它通過限流電阻R與三極管級(jí)基極相接,三極管的集電極接有接蜂鳴器。 </p><p> 本設(shè)計(jì)通過控制單片機(jī)定時(shí)器的定時(shí)時(shí)間產(chǎn)生不同頻率的音頻脈沖,經(jīng)三極管放大信號(hào)后驅(qū)動(dòng)蜂鳴器發(fā)出不同音節(jié)的聲音。要實(shí)現(xiàn)7個(gè)音符的各自的高、中、低音,需要建立三個(gè)表,分別存儲(chǔ)高音、中音和低音的頻率值;當(dāng)三個(gè)撥碼
10、開關(guān)中某一個(gè)按下,通過軟件選擇相應(yīng)的音頻。按下彈奏鍵就可彈奏出不同的聲音。</p><p> 另外用軟件延時(shí)來控制發(fā)音時(shí)間的長(zhǎng)短,來控制節(jié)拍。通過把樂譜中的音符和相應(yīng)的節(jié)拍變換為定時(shí)常數(shù)和延時(shí)常數(shù),作為數(shù)據(jù)表格存放在存儲(chǔ)器中。由程序查表得到定時(shí)常數(shù)和延時(shí)常數(shù),分別用來控制定時(shí)器產(chǎn)生的脈沖頻率和發(fā)出該音頻脈沖的持續(xù)時(shí)間,這樣就可以實(shí)現(xiàn)樂曲的演奏。</p><p> 為了實(shí)現(xiàn)按鍵的準(zhǔn)確判斷
11、和完善電子琴發(fā)聲的效果,本設(shè)計(jì)采用了軟件防抖的方法,有效的解決了按鍵抖動(dòng)的問題。另外當(dāng)按下功能切換樂曲播放鍵,本系統(tǒng)能實(shí)現(xiàn)自動(dòng)播放一首樂曲,另附帶數(shù)碼管顯示提醒。這樣使得電子琴的功能變的更加強(qiáng)大。</p><p> 本系統(tǒng)運(yùn)行穩(wěn)定,其優(yōu)點(diǎn)是硬件電路簡(jiǎn)單,軟件功能完善,控制系統(tǒng)可靠,性價(jià)比較高等,具有一定的實(shí)用和參考價(jià)值。</p><p><b> 第一章 引言</b&
12、gt;</p><p> 1.1 電子琴系統(tǒng)概述</p><p> 本設(shè)計(jì)是基于AT89C52單片機(jī)的簡(jiǎn)易電子琴設(shè)計(jì)。主要組成是以51單片機(jī)最小系統(tǒng)為核心,通過鍵盤獲取按鍵信息,通過運(yùn)用單片機(jī)定時(shí)器等部件實(shí)現(xiàn)蜂鳴器發(fā)聲同時(shí)用數(shù)碼管同步顯示。本系統(tǒng)具有播放歌曲及選取按鍵輸入高、中、低音的功能。本設(shè)計(jì)的特點(diǎn)是:大部分功能通過軟件實(shí)現(xiàn),使電路簡(jiǎn)單明了,系統(tǒng)穩(wěn)定性好。</p>
13、<p> 電子琴是電子科技與音樂結(jié)合的產(chǎn)物是一種新型的鍵盤樂器。一首音樂是許多不同的音階組成的,而每個(gè)音階對(duì)應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂了,當(dāng)然對(duì)于單片機(jī)來產(chǎn)生不同的頻率非常方便,我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來產(chǎn)生這樣方波頻率信號(hào),因此,我們只要把一首歌曲的音階對(duì)應(yīng)頻率關(guān)系弄正確即可。</p><p> 單片微型計(jì)算機(jī)是大規(guī)模集成電路技術(shù)發(fā)展的
14、產(chǎn)物,屬第四代電子計(jì)算機(jī),它具有高性能、高速度、體積小、價(jià)格低廉、穩(wěn)定可靠、應(yīng)用廣泛的特點(diǎn)。它的應(yīng)用必定導(dǎo)致傳統(tǒng)的控制技術(shù)從根本上發(fā)生變革。因此,單片機(jī)的開發(fā)應(yīng)用已成為高科技和工程領(lǐng)域的一項(xiàng)重大課題。 它在現(xiàn)代音樂扮演著重要的角色,單片機(jī)具有強(qiáng)大的控制功能和靈活的編程實(shí)現(xiàn)特性,它已經(jīng)溶入現(xiàn)代人們的生活中,成為不可替代的一部分。本文的主要內(nèi)容是用AT89C52單片機(jī)為核心控制元件,設(shè)計(jì)一個(gè)電子琴。以單片機(jī)作為主控核心,與鍵盤、揚(yáng)聲器
15、等模塊組成核心主控制模塊,在主控模塊上設(shè)有11個(gè)按鍵和揚(yáng)聲器。 本文主要對(duì)使用單片機(jī)設(shè)計(jì)簡(jiǎn)易電子琴進(jìn)行了分析,并介紹了基于單片機(jī)電子琴統(tǒng)硬件組成。利用單片機(jī)產(chǎn)生不同頻率來獲得我們要求的音階,最終可隨意彈奏想要表達(dá)的音樂。并且本文分別從原理圖,主要芯片,各模塊原理及各模塊的程序的調(diào)試來詳細(xì)闡述。本系統(tǒng)是簡(jiǎn)易電子琴的設(shè)計(jì),按下鍵盤矩陣中的按鍵會(huì)使揚(yáng)聲器播放對(duì)應(yīng)的音符。</p><p><b> 1
16、.2 設(shè)計(jì)思路</b></p><p> 從系統(tǒng)實(shí)現(xiàn)的功能上來看,電子琴的設(shè)計(jì)主要分為手動(dòng)彈奏樂曲和自動(dòng)播放音樂兩大部分組成。手動(dòng)彈奏樂曲是根據(jù)具體的硬件鍵盤設(shè)置了7個(gè)音符按鍵,3個(gè)高、中、低音模式切換鍵和1個(gè)功能轉(zhuǎn)換鍵,自動(dòng)播放音樂是在單片機(jī)的存儲(chǔ)器中通過軟件編程的方法放置音樂代碼和相關(guān)播放程序來實(shí)現(xiàn)。</p><p> 從系統(tǒng)硬件結(jié)構(gòu)上來看,主要使用到52系列單片機(jī)、7
17、個(gè)鍵輸入電路、LED數(shù)碼管顯示電路、揚(yáng)聲器以及電源電路等等。將這些硬件電路有機(jī)地結(jié)合起來使之滿足電子琴設(shè)計(jì)的基本硬件要求。</p><p> 從系統(tǒng)軟件設(shè)計(jì)角度來看,將電子琴的設(shè)計(jì)采用程序模塊化設(shè)計(jì)方法,將程序分為主程序、鍵盤掃描程序模塊、數(shù)碼顯示模塊、轉(zhuǎn)換控制模塊、音樂產(chǎn)生模塊等等。此外,采用程序設(shè)計(jì)思想,將中斷定時(shí)方式與外部按鍵查詢方式相結(jié)合,實(shí)現(xiàn)手動(dòng)彈奏樂曲到自動(dòng)播放音樂的切換。</p>&
18、lt;p> 從音樂產(chǎn)生原理方面來看,通過控制單片機(jī)的定時(shí)器的定時(shí)時(shí)間產(chǎn)生不同頻率的音頻脈沖,經(jīng)放大后驅(qū)動(dòng)揚(yáng)聲器發(fā)出不同音樂的聲音。用軟件延時(shí)來控制發(fā)音時(shí)間的長(zhǎng)短,控制節(jié)拍。把音樂的音符和相應(yīng)的節(jié)拍變換為定時(shí)常數(shù)和延時(shí)常數(shù),作為數(shù)據(jù)表格存放在程序存儲(chǔ)器中,由程序查表得到定時(shí)常數(shù)和延時(shí)常數(shù),分別用來控制定時(shí)器產(chǎn)生的脈沖頻率和發(fā)出音頻脈沖的持續(xù)時(shí)間。</p><p> 第二章 系統(tǒng)總體方案及硬件設(shè)計(jì)<
19、/p><p> 2.1設(shè)計(jì)任務(wù)與主要內(nèi)容分析</p><p> 本次課程設(shè)計(jì)的課題所要達(dá)到的要求如下:</p><p> 利用蜂鳴器作為發(fā)聲部件。</p><p> 兩個(gè)數(shù)碼管顯示所按下鍵值。</p><p> 設(shè)置10個(gè)按鍵,實(shí)現(xiàn)高音、中音、低音的1、2、3、4、5、6、7發(fā)音。</p><
20、p> 存儲(chǔ)一首歌曲的內(nèi)容,可以實(shí)現(xiàn)自動(dòng)循環(huán)播放。</p><p> 實(shí)現(xiàn)功能轉(zhuǎn)換(播放模式和彈奏模式的轉(zhuǎn)換)</p><p> 本次設(shè)計(jì)主要是要通過軟硬件的配合實(shí)現(xiàn)電子琴的上述功能,操作人員可以通過按下鍵盤上任意一個(gè)鍵來發(fā)出相應(yīng)的音符。</p><p> AT89C52具有高速度、低電壓、低功耗、且可靠性和成本都比較低的特點(diǎn)。因此本次課程設(shè)計(jì)采用AT8
21、9C52單片機(jī)作為整個(gè)電路核心控制器件。對(duì)于本交通控制系統(tǒng)使用一片AT89C52系列的單片機(jī),不需要外擴(kuò)展存儲(chǔ)器,就能實(shí)現(xiàn)顯示、預(yù)制狀態(tài)、動(dòng)態(tài)調(diào)節(jié)的功能,因而整體結(jié)構(gòu)簡(jiǎn)單。</p><p> 設(shè)計(jì)電路時(shí)運(yùn)用89C52系列單片機(jī)的接口來實(shí)現(xiàn)各種輸入、輸出功能。P1.待定部分0口用來作輸出口,向發(fā)聲電路輸出信號(hào);P2口和P0口共同實(shí)現(xiàn)一個(gè)矩陣鍵盤的功能。同時(shí)設(shè)計(jì)了一個(gè)直流穩(wěn)壓電路增加電路的適應(yīng)性,增加了電路的適用性
22、,使整個(gè)系統(tǒng)更加緊湊,工作十分穩(wěn)定。</p><p> 2.2系統(tǒng)的硬件設(shè)計(jì)</p><p><b> 2.3最小系統(tǒng)</b></p><p> 最小系統(tǒng)包括晶體振蕩電路、復(fù)位開關(guān)和電源部分。圖為AT89C52的最小系統(tǒng)電路圖。</p><p> 晶振電路 89C52系列單片機(jī)片內(nèi)有一個(gè)高增益的反向放大器其輸入
23、引腳為XTAL1輸出引腳為XTAL2用于外接石英振蕩器和微調(diào)電容,構(gòu)成自激振蕩器。如右圖所示。</p><p><b> 2.4復(fù)位電路</b></p><p> 復(fù)位是通過給RST引腳持續(xù)周期的低電平實(shí)現(xiàn)的。一般為上電復(fù)位和手動(dòng)復(fù)位。上電自動(dòng)復(fù)位是通過外部復(fù)位電路的電容充電來實(shí)現(xiàn)的。一般選取晶振為12MHZ時(shí)選取電容為20PF。手動(dòng)復(fù)位通過手動(dòng)持續(xù)按復(fù)位按鍵個(gè)周
24、期來實(shí)現(xiàn)的。</p><p> 2.5 顯示單元設(shè)計(jì)原理</p><p> 共陰極LED數(shù)碼管的內(nèi)部結(jié)構(gòu)原理圖</p><p> 數(shù)碼管動(dòng)態(tài)顯示介面是單片機(jī)中應(yīng)用最為廣泛的一種顯示方式之一,動(dòng)態(tài)驅(qū)動(dòng)是將所有數(shù)碼管的8個(gè)顯示筆劃"a,b,c,d,e,f,g,dp "的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位選通控制電路,位選通由各
25、自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,但究竟是那個(gè)數(shù)碼管會(huì)顯示出字形,取決于單片機(jī)對(duì)位元選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會(huì)亮。</p><p> 本設(shè)計(jì)中,例如當(dāng)高音鍵被按下時(shí),會(huì)產(chǎn)生“yin=12,m=2”兩個(gè)值(m值為發(fā)音值,暫且不管)又“P0=seg[yin]”,前面seg[]數(shù)組定義如下:&
26、lt;/p><p> uchar seg[]={ 0x3F,/*0*/</p><p> 0x06,/*1*/</p><p> 0x5B,/*2*/</p><p> 0x4F,/*3*/</p><p> 0x66,/*4*/</p><p> 0x6D,/*5*/</p&g
27、t;<p> 0x7D,/*6*/</p><p> 0x07,/*7*/</p><p> 0x7F,/*8*/</p><p> 0x6F,/*9*/</p><p> 0x37,/*N*///中音</p><p> 0x38,/*L*///低音</p><p>
28、 0x76,/*H*///高音</p><p> 0x79 /*E*/};//共陰極數(shù)碼管</p><p> 可得到P0=OX76=0111 0110,對(duì)應(yīng)“共陰極數(shù)碼管顯示字段”表,顯然為“H”,這樣便得到了我們想要的顯示效果</p><p><b> 2.6蜂鳴器電路</b></p><p> 當(dāng)驅(qū)動(dòng)蜂鳴器
29、的P2.2口有一定頻率的脈沖輸出時(shí),蜂鳴器就能發(fā)出聲音。通過控制P2.2發(fā)出脈沖的頻率能夠控制蜂鳴器發(fā)出聲音的音調(diào),進(jìn)而能發(fā)出美妙的音樂。蜂鳴器無法由P2.2口直接驅(qū)動(dòng),故在設(shè)計(jì)時(shí)添加了一個(gè)三極管放大器強(qiáng)化驅(qū)動(dòng)能力。</p><p><b> 2.7鍵盤電路</b></p><p> 鍵盤電路作為電子琴系統(tǒng)中最重要的輸入設(shè)備,在系統(tǒng)中承擔(dān)著把操作人員想要輸入的信號(hào)
30、輸入單片機(jī)的重要作用。鍵盤有獨(dú)立鍵盤和矩陣鍵盤。由于設(shè)計(jì)要求簡(jiǎn)單和編程方便,本設(shè)計(jì)采用獨(dú)立按鍵。根據(jù)設(shè)計(jì)要求,本設(shè)計(jì)使用11個(gè)獨(dú)立按鍵,電路功能分配與下:</p><p> P3.5———高音階切換鍵</p><p> P3.4———中音階切換鍵</p><p> P3.3———低音階切換鍵</p><p> P1.0———do音輸入
31、鍵</p><p> P1.1———re音輸入鍵</p><p> P1.2———mi音輸入鍵 </p><p> P1.3———fa音輸入鍵</p><p> P1.4———so音輸入鍵</p><p> P1.5———la音輸入鍵</p><p> P1.6———ti音輸入鍵&l
32、t;/p><p> 第三章 系統(tǒng)軟件設(shè)計(jì)</p><p><b> 3.1軟件的結(jié)構(gòu)圖</b></p><p> 硬件設(shè)計(jì)的任務(wù)是根據(jù)總體設(shè)計(jì)要求,在選擇的機(jī)型的基礎(chǔ)上,具有確定系統(tǒng)中所要使用的元器件,設(shè)計(jì)出系統(tǒng)的原理框圖、電路原理圖。</p><p> 該設(shè)計(jì)要實(shí)現(xiàn)一種有單片機(jī)控制的電子琴,單片機(jī)工作于12MHZ
33、時(shí)鐘頻率,使用其定時(shí)/計(jì)數(shù)器T0,工作模式為1,改變計(jì)數(shù)值TH0和TL0可以產(chǎn)生不同頻率的脈沖信號(hào).該設(shè)計(jì)具有11個(gè)音節(jié)鍵盤,用戶可以根據(jù)樂譜在鍵盤上進(jìn)行演奏,音樂發(fā)生器會(huì)根據(jù)用戶的彈奏,通過揚(yáng)聲器將音樂播放出來,本設(shè)計(jì)可以實(shí)現(xiàn)用戶自由彈奏音樂。用單片機(jī)產(chǎn)生的音頻脈沖直接驅(qū)動(dòng)揚(yáng)聲器并不能產(chǎn)生所要實(shí)現(xiàn)的音樂,因?yàn)樗鼪]有足夠的驅(qū)動(dòng)能力,這就需要音頻功率放大器,本設(shè)計(jì)采用三極管就可以實(shí)現(xiàn)信號(hào)放大功能。</p><p>
34、<b> 3.2程序流程圖</b></p><p> 3.3音階的實(shí)現(xiàn)與初值計(jì)算</p><p> 利用AT89C52的內(nèi)部定時(shí)器使其工作計(jì)數(shù)器模式(MODE1)下,改變計(jì)數(shù)值TH0及TL0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階,例如,頻率為523Hz,其周期T=1/523=1912μs,因此只要令計(jì)數(shù)器計(jì)956μs/1μs=956,每計(jì)數(shù)956次時(shí)將I/O反相,就可
35、得到中音DO(523Hz)。計(jì)數(shù)脈沖值與頻率的關(guān)系式是:N=fi÷2÷fr ,式中N是計(jì)數(shù)值;fi是機(jī)器頻率(晶體振蕩器為12MHz時(shí),其頻率為1MHz);fr是想要產(chǎn)生的頻率。其計(jì)數(shù)初值T的求法如下:</p><p> T=65536-N=65536-fi÷2÷fr</p><p> 例如:設(shè)K=65536,fi=1MHz,求低音DO
36、(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的計(jì)數(shù)值。</p><p> T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr</p><p> 低音DO的T=65536-500000/262=63627</p><p> 中音DO的T=
37、65536-500000/523=64580</p><p> 高音DO的T=65536-500000/1046=65059</p><p><b> 3.4初始化程序</b></p><p> 初始化程序的主要作用是定義一些變量的初值以及對(duì)中斷、定時(shí)器的初始化。在初始化程序中對(duì)變量賦初值,并要對(duì)中斷進(jìn)行設(shè)置,也要對(duì)定時(shí)器進(jìn)行設(shè)置。根據(jù)這
38、個(gè)思路,初始化程序如下</p><p> //*******初始化數(shù)據(jù)*****//</p><p> void init(void)</p><p><b> {</b></p><p> speaker=0;//關(guān)蜂鳴器</p><p> LED1=1;//開燈一,即開播放模式<
39、;/p><p> LED2=0;//關(guān)燈二,即關(guān)彈奏模式</p><p> EA=1;//開總中斷</p><p> TCON=0x01;//外部中斷0設(shè)置為邊沿觸發(fā)</p><p> EX0=1;//開外部中斷0</p><p> ET0=1;//開定時(shí)器0中斷</p><p> ET
40、1=1;//開定時(shí)器1中斷</p><p> TMOD=0x11;//定時(shí)器0,1工作在定時(shí)狀態(tài),均為方式1,16位模式</p><p><b> }</b></p><p><b> 3.5鍵盤消抖</b></p><p> 鍵盤是人與單片機(jī)通信的重要接口。合適的鍵盤掃描程序能使單片機(jī)準(zhǔn)確
41、的運(yùn)行。同時(shí)我們?cè)谠O(shè)計(jì)按鍵時(shí)注意了按鍵的消抖現(xiàn)象。</p><p> 去抖動(dòng):每個(gè)按鍵在按下或松開時(shí),都會(huì)產(chǎn)生短時(shí)間的抖動(dòng)。抖動(dòng)的持續(xù)時(shí)間與鍵的質(zhì)量相關(guān),一般為5—20ms。所謂抖動(dòng)是指在識(shí)別被按鍵是必須避開抖動(dòng)狀態(tài),只有處在穩(wěn)定接通或穩(wěn)定斷開狀態(tài)才能保證識(shí)別正確無誤。去抖問題可通過軟件延時(shí)或硬件電路解決。</p><p><b> 例如下面一段程序:</b>&l
42、t;/p><p> if(high==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> if(high==0)</p><p><b> {yin=12;</b></p&g
43、t;<p><b> m=2;</b></p><p> //返回12為seg[12]顯示H</p><p><b> }</b></p><p> 其中我們加了“delay(5);”便有效的去抖動(dòng)!</p><p><b> 3.6顯示程序</b>&l
44、t;/p><p> 本設(shè)計(jì)采用的共陰極數(shù)碼管作為數(shù)據(jù)顯示。采用的數(shù)碼管動(dòng)態(tài)顯示,可以節(jié)約單片機(jī)的I/O口,為以后的擴(kuò)展做準(zhǔn)備。</p><p><b> 3.7發(fā)聲程序</b></p><p> 在完成了鍵盤服務(wù)子程序后,我們就知道了具體是哪一個(gè)鍵被按下了,下一步就是要讓喇叭發(fā)出這個(gè)按鍵所特有的音符。我們知道,每個(gè)音符之所以不同是因?yàn)樗鼈兌加?/p>
45、各自不同的頻率,而我們正好可以利用89S52中的定時(shí)器來產(chǎn)生不同的頻率以達(dá)到這個(gè)目的。我們只要對(duì)定時(shí)器T1的初值進(jìn)行合理的設(shè)置就可完成這個(gè)工作,我們根據(jù)電子琴的音符頻率表來為定時(shí)器賦初值。主要是根據(jù)一張頻率表,表如下所示:</p><p><b> 電子琴音符頻率表</b></p><p> 通過這張表,我們就可以完成發(fā)聲程序的編寫了。根據(jù)以上的思路以及頻率表可以
46、寫出發(fā)聲程序如下:</p><p> code unsigned char FH[]={ 0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,</p><p><b> //中音的高八位</b></p><p> 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,</p><p
47、><b> //低音的高八位</b></p><p> 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,</p><p><b> //高音的高八位</b></p><p><b> };</b></p><p> code unsigne
48、d char FL[]={0x8E,0xED,0x44,0x6B,0xB4,0xF4,0x2D,</p><p><b> //中音的低八位</b></p><p> 0x21,0xDB,0x87,0xD7,0x68,0xE8,0x5B</p><p><b> //低音的低八位</b></p>&
49、lt;p> 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,</p><p><b> //高音的低八位</b></p><p><b> };</b></p><p> void timer1() interrupt 3</p><p><b> {
50、TR1=0;</b></p><p> TH1=FH[7*m+n];</p><p> TL1=FL[7*m+n]; //對(duì)T1的賦值</p><p> speaker=~speaker;//產(chǎn)生脈沖</p><p><b> TR1=1;</b></p><p><b
51、> }</b></p><p><b> 結(jié)束語</b></p><p> 當(dāng)做完電子琴的時(shí)候內(nèi)心無比欣喜,確實(shí)深深感受到學(xué)習(xí)單片機(jī)要?jiǎng)邮肿霾拍苡兴斋@,不然根本學(xué)不會(huì),雖然各功能都已實(shí)現(xiàn)但發(fā)現(xiàn)還是有很多不足之處,比如:1.發(fā)音不準(zhǔn)2.所彈奏音樂并不“美妙”3.設(shè)計(jì)顯得不夠靈活,太呆板了(就只能發(fā)音,然后彈) 4.可彈奏的音符數(shù)較少,只能在一定
52、范圍內(nèi)滿足用戶需要??赏ㄟ^改進(jìn)鍵盤識(shí)別模塊和發(fā)生模塊來增加其復(fù)雜度。5.音量不可調(diào)等等,也許這是51單片機(jī)功能自身所限,但是我們自身的不足還是很明顯的,設(shè)計(jì)有待改進(jìn)之處很多。</p><p> 通過本次設(shè)計(jì)實(shí)驗(yàn),使我對(duì)所學(xué)51系列的單片機(jī)從理論知識(shí)到實(shí)踐硬件的應(yīng)用以及C語言及匯編語言知識(shí)的回顧,更加熟悉了89C51單片機(jī)的每一個(gè)引腳的輸出和各項(xiàng)功能,而且對(duì)硬件電路的布線以及焊接能力有了很大的進(jìn)步。我們的綜合設(shè)計(jì)
53、主要涉及硬件和軟件兩方面的內(nèi)容,通過這些我們的硬件和軟件開發(fā)能力都獲得了提高。首先硬件方面,基本了解了電子產(chǎn)品的開發(fā)流程和所要做的工作;基本掌握了Proteus繪制原理圖的方法,并設(shè)計(jì)了一個(gè)單片機(jī)最小系統(tǒng)。通過開發(fā)板的設(shè)計(jì)和硬件搭建的過程,使我們對(duì)51系單片機(jī)的接口有了更深層次的理解,熟悉了一些單片機(jī)常用的外圍電路引腳和連接方法,如LED數(shù)碼管,鍵盤等。并且我們學(xué)會(huì)了分析問題解決問題的能力,加深了對(duì)所學(xué)理論知識(shí)的理解和運(yùn)用。我們的動(dòng)手能
54、力得到了很大的提高,創(chuàng)新意識(shí)得到了鍛煉。</p><p><b> 參考文獻(xiàn)</b></p><p> 【1】譚浩強(qiáng),C程序設(shè)計(jì),清華大學(xué)出版社2005</p><p> 【2】范紅剛,51單片機(jī)自學(xué)筆記,北京航空航天大學(xué)出版社</p><p> 【3】閻石,數(shù)字電子技術(shù)基礎(chǔ),高等教育出版社</p>
55、<p> 【4】李朝青,單片機(jī)原理及接口技術(shù),北京航空航天大學(xué)出版社</p><p> 【5】雷麗文 等,微機(jī)原理與接口技術(shù)[M].北京,電子工業(yè)出版社</p><p> 【6】李華,MCS-51系列單片機(jī)實(shí)用接口技術(shù),北京航空航天大學(xué)出版社, 1993</p><p> 【7】電子技術(shù)論壇,http://bbs.elecfans.com/<
56、;/p><p> 附1 源程序代碼及詳細(xì)解析</p><p> #include<reg52.h></p><p> #define uint unsigned int </p><p> #define uchar unsigned char</p><p> //*******為引腳“取名”*
57、*******//</p><p> sbit P1_0=P1^0;</p><p> sbit P1_1=P1^1;</p><p> sbit P1_2=P1^2;</p><p> sbit P1_3=P1^3;</p><p> sbit P1_4=P1^4;</p><p>
58、 sbit P1_5=P1^5;</p><p> sbit P1_6=P1^6;</p><p> sbit P1_7=P1^7; </p><p> sbit change=P3^2;</p><p> sbit high=P3^5;</p><p> sbit normal=P3^4;</p&g
59、t;<p> sbit low=P3^3;</p><p> sbit P2_0=P2^0;</p><p> sbit P2_1=P2^1;</p><p> sbit speaker=P2^2;</p><p> unsigned char i;</p><p> unsigned cha
60、r key,yin=0;</p><p> uchar m,n;</p><p> bit a=0; //a為change鍵,即功能轉(zhuǎn)換建的鍵值</p><p> //*******數(shù)碼管顯示定義********//</p><p> uchar seg[]={ 0x3F,/*0*/</p><p>
61、; 0x06,/*1*/</p><p> 0x5B,/*2*/</p><p> 0x4F,/*3*/</p><p> 0x66,/*4*/</p><p> 0x6D,/*5*/</p><p> 0x7D,/*6*/</p><p> 0x07,/*7*/</p>
62、;<p> 0x7F,/*8*/</p><p> 0x6F,/*9*/</p><p> 0x37,/*N*///中音</p><p> 0x38,/*L*///低音</p><p> 0x76,/*H*///高音</p><p> 0x79 /*E*/};//共陰極數(shù)碼管</p&g
63、t;<p> code unsigned char FH[]={ 0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,</p><p><b> //中音的高八位</b></p><p> 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,</p><p><b> //
64、低音的高八位</b></p><p> 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,</p><p><b> //高音的高八位</b></p><p><b> };</b></p><p> code unsigned char FL[]={0x
65、8E,0xED,0x44,0x6B,0xB4,0xF4,0x2D,</p><p><b> //中音的低八位</b></p><p> 0x21,0xDB,0x87,0xD7,0x68,0xE8,0x5B,</p><p><b> //低音的低八位</b></p><p> 0x47,0
66、x77,0xA2,0xB6,0xDA,0xFA,0x16,</p><p><b> //高音的低八位</b></p><p><b> };</b></p><p> //*******《兩只老虎》的曲********//</p><p> code uchar star[]={1,2,3
67、,1, 1,2,3,1, 3,4,5, 3,4,5, 5,6,5,4,3,1, 5,6,5,4,3,1, 1,12/*低音5*/,1, 1,12,1};</p><p> //*******歌曲節(jié)拍********//</p><p> code uchar shijian[]={4,4,4,4, 4,4,4, 4, 4,
68、4,8, 4,4,8, 2,1,2,1,4,4, 2,1,2,1,4,4, 4,4,6, 4,4,6};</p><p> void init(void);</p><p> void music();</p><p> void play();</p><p> void seg1();</p
69、><p> void yinjie();</p><p> //*********主程序*****//</p><p> void main()</p><p><b> {</b></p><p> init();//初始化</p><p><b> w
70、hile(1)</b></p><p><b> {</b></p><p><b> if(a==0)</b></p><p><b> music();</b></p><p><b> else</b></p>&
71、lt;p><b> play();</b></p><p><b> }</b></p><p><b> }</b></p><p> //*******1ms延遲********//</p><p> void delay(uint x)</p>
72、<p><b> {</b></p><p><b> uint i,j;</b></p><p> for(i=x;i>0;i--)</p><p> for(j=340;j>0;j--);</p><p><b> }</b></p
73、><p> //*******初始化數(shù)據(jù)*****//</p><p> void init(void)</p><p><b> {</b></p><p> speaker=0;</p><p><b> LED1=1;</b></p><p&g
74、t;<b> LED2=0;</b></p><p> EA=1;//開總中斷</p><p> TCON=0x01;//外部中斷0設(shè)置為邊沿觸發(fā)</p><p> EX0=1;//開外部中斷0</p><p><b> ET0=1;</b></p><p><
75、;b> ET1=1;</b></p><p> TMOD=0x11;//定時(shí)器0,1工作在定時(shí)狀態(tài),均為方式1,16位模式</p><p><b> }</b></p><p> //******數(shù)碼管動(dòng)態(tài)顯示*******//</p><p> void seg1()</p>
76、<p><b> {</b></p><p> P2_0=1;//關(guān)數(shù)碼管1</p><p> P2_1=0;//開數(shù)碼管2</p><p> P0=seg[n+1];//送數(shù)碼管2的數(shù)據(jù)</p><p> delay(15);//延時(shí)15ms</p><p> P2_1=1
77、;//關(guān)數(shù)碼管2</p><p> P2_0=0;//開數(shù)碼管1</p><p> P0=seg[yin];//yin為high,normal,low的判斷結(jié)果送數(shù)碼管1的數(shù)據(jù)</p><p> delay(15);//延時(shí)15ms</p><p><b> }</b></p><p>
78、 //********高低音的選擇*******//</p><p> void yinjie()</p><p><b> {</b></p><p> if(normal==0)</p><p><b> {</b></p><p><b> de
79、lay(5);</b></p><p> if(normal==0)</p><p> { yin=10;</p><p><b> m=0;</b></p><p> //返回10為seg[10]顯示C//</p><p><b> }</b>&l
80、t;/p><p><b> }</b></p><p> if(low==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> if(low==0)</p><p&
81、gt;<b> {yin=11;</b></p><p><b> m=1;</b></p><p> //返回11為seg[11]顯示L//</p><p><b> }</b></p><p><b> }</b></p>&
82、lt;p> if(high==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> if(high==0)</p><p><b> {yin=12;</b></p><p&g
83、t;<b> m=2;</b></p><p> //返回12為seg[12]顯示H</p><p><b> }</b></p><p><b> }</b></p><p> if(yin==0)</p><p><b> {&
84、lt;/b></p><p><b> yin=13;</b></p><p><b> }</b></p><p><b> }</b></p><p> //********外部中斷0********//</p><p> void
85、inter0() interrupt 0 </p><p><b> {</b></p><p> if(change==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> wh
86、ile(change==0);</p><p><b> a=~a;</b></p><p> LED1=~LED1;</p><p> LED2=~LED2;</p><p><b> }</b></p><p><b> }</b><
87、;/p><p> //*******播放音樂程序*****//</p><p> void music()</p><p><b> {</b></p><p> TH0=FH[star[i]-1];</p><p> TL0=FL[star[i]-1];</p><p
88、> while(a==0)</p><p><b> {</b></p><p><b> if(i<32)</b></p><p><b> {</b></p><p><b> TR0=1;</b></p><
89、;p> delay(57*shijian[i]);</p><p><b> i++;</b></p><p><b> }</b></p><p><b> if(i==32)</b></p><p><b> {</b></p&g
90、t;<p><b> i=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //*******演奏模式*****//</p>
91、;<p> void play()</p><p><b> {</b></p><p><b> TR0=0;</b></p><p><b> TR1=0;</b></p><p><b> yinjie();</b></
92、p><p> P2_1=1;//關(guān)數(shù)碼管2</p><p> P2_0=0;//開數(shù)碼管1</p><p> P0=seg[yin];</p><p> if(yin!=13&&a==1)</p><p><b> {</b></p><p> if
93、(P1_0==0)</p><p><b> {</b></p><p> TH1=FH[7*m+n];</p><p> TL1=FL[7*m+n];</p><p><b> TR1=1;</b></p><p> while(P1_0==0)</p&g
94、t;<p><b> {n=0;</b></p><p><b> seg1();</b></p><p><b> }</b></p><p><b> }</b></p><p> if(P1_1==0)</p>
95、<p> {TH1=FH[7*m+n];</p><p> TL1=FL[7*m+n];</p><p><b> TR1=1;</b></p><p> while(P1_1==0)</p><p><b> {n=1;</b></p><p>
96、<b> seg1();</b></p><p><b> }</b></p><p><b> }</b></p><p> if(P1_2==0)</p><p> {TH1=FH[7*m+n];</p><p> TL1=FL[7*
97、m+n];</p><p><b> TR1=1;</b></p><p> while(P1_2==0)</p><p><b> {n=2;</b></p><p><b> seg1();</b></p><p><b> }
98、</b></p><p><b> }</b></p><p> if(P1_3==0)</p><p> {TH1=FH[7*m+n];</p><p> TL1=FL[7*m+n];</p><p><b> TR1=1;</b></p>
99、<p> while(P1_3==0)</p><p><b> {n=3;</b></p><p><b> seg1();</b></p><p><b> }</b></p><p><b> }</b></p>
100、<p> if(P1_4==0)</p><p> {TH1=FH[7*m+n];</p><p> TL1=FL[7*m+n];</p><p><b> TR1=1;</b></p><p> while(P1_4==0)</p><p><b> {
101、n=4;</b></p><p><b> seg1();</b></p><p><b> }</b></p><p><b> }</b></p><p> if(P1_5==0)</p><p> {TH1=FH[7*m+
102、n];</p><p> TL1=FL[7*m+n];</p><p><b> TR1=1;</b></p><p> while(P1_5==0)</p><p><b> {n=5;</b></p><p><b> seg1();</b&g
103、t;</p><p><b> }</b></p><p><b> }</b></p><p> if(P1_6==0)</p><p> {TH1=FH[7*m+n];</p><p> TL1=FL[7*m+n];</p><p>
104、<b> TR1=1;</b></p><p> while(P1_6==0)</p><p><b> {n=6;</b></p><p><b> seg1();</b></p><p><b> }</b></p><
105、p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //******定時(shí)器0中斷******//</p><p> void timer0() interrupt 1</p>&l
106、t;p><b> {TR0=0;</b></p><p> TH0=FH[star[i]-1];</p><p> TL0=FL[star[i]-1];</p><p> speaker=~speaker;</p><p><b> TR0=1;</b></p>&l
107、t;p><b> }</b></p><p> //******定時(shí)器1中斷******//</p><p> void timer1() interrupt 3</p><p><b> {TR1=0;</b></p><p> TH1=FH[7*m+n];</p>
108、<p> TL1=FL[7*m+n];</p><p> speaker=~speaker;</p><p><b> TR1=1;</b></p><p><b> }</b></p><p><b> 附錄2 系統(tǒng)原理圖</b></p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)--電子琴
- 電子琴課程設(shè)計(jì)
- 電子琴課程設(shè)計(jì)---電子琴的設(shè)計(jì)與實(shí)現(xiàn)
- 微機(jī)課程設(shè)計(jì)電子琴
- 接口課程設(shè)計(jì)電子琴
- 簡(jiǎn)易電子琴課程設(shè)計(jì)
- 簡(jiǎn)易電子琴課程設(shè)計(jì)
- 簡(jiǎn)易電子琴課程設(shè)計(jì)
- 電子琴課程設(shè)計(jì)報(bào)告
- 電子琴的課程設(shè)計(jì)
- 電子琴課程設(shè)計(jì)論文
- 電子琴課程設(shè)計(jì)--基于單片機(jī)的電子琴設(shè)計(jì)
- 電子琴的設(shè)計(jì) 課程設(shè)計(jì)
- 電子琴課程設(shè)計(jì)--基于單片機(jī)的電子琴設(shè)計(jì)
- 電子琴課程設(shè)計(jì)-- 基于單片機(jī)的電子琴設(shè)計(jì)
- eda課程設(shè)計(jì)---自動(dòng)電子琴
- 數(shù)電課程設(shè)計(jì)---電子琴
- 課程設(shè)計(jì)報(bào)告--- 簡(jiǎn)易電子琴
- 簡(jiǎn)易電子琴課程設(shè)計(jì) (2)
- 微機(jī)原理課程設(shè)計(jì)----電子琴
評(píng)論
0/150
提交評(píng)論