版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 課程名稱 單片機(jī)原理及應(yīng)用 </p><p> 設(shè)計(jì)題目 電子琴的設(shè)計(jì) </p><p> 專業(yè)班級(jí) 自動(dòng)化1041 </p><p> 姓 名
2、 </p><p> 學(xué) 號(hào) </p><p> 指導(dǎo)教師 </p><p> 起止時(shí)間 2013.6.24-2011.7.12 </p><p><b> 成 績(jī) 評(píng) 定</b></p>
3、<p> 12/13學(xué)年第二學(xué)期</p><p> 《單片機(jī)控制系統(tǒng)設(shè)計(jì)與調(diào)試》 課程設(shè)計(jì)任務(wù)書(shū)</p><p> 指導(dǎo)教師:蔡長(zhǎng)青 班級(jí):自動(dòng)化1041、2班 </p><p> 地點(diǎn):機(jī)房、單片機(jī)實(shí)驗(yàn)室(實(shí)訓(xùn)中心415)</p><p> 課程設(shè)計(jì)題目:基于
4、51單片機(jī)原理的電子琴的設(shè)計(jì)</p><p><b> 課程設(shè)計(jì)目的</b></p><p> 靈活運(yùn)用單片機(jī)的基礎(chǔ)知識(shí),依據(jù)課程設(shè)計(jì)內(nèi)容,能夠完成從硬件電路圖設(shè)計(jì),到PCB制版,再到軟件編程及系統(tǒng)調(diào)試實(shí)現(xiàn)系統(tǒng)功能,完成課程設(shè)計(jì),加深對(duì)單片機(jī)基礎(chǔ)知識(shí)的理解,并靈活運(yùn)用,將各門(mén)知識(shí)綜合應(yīng)用。</p><p> 能夠上網(wǎng)查詢器件資料,培養(yǎng)對(duì)新
5、知識(shí)新技術(shù)的獨(dú)立的學(xué)習(xí)能力和應(yīng)用能力。</p><p> 獨(dú)立完成一個(gè)小的系統(tǒng)設(shè)計(jì),從硬件設(shè)計(jì)到軟件設(shè)計(jì),增強(qiáng)分析問(wèn)題、解決問(wèn)題的能力,為日后的畢業(yè)設(shè)計(jì)及科研工作奠定良好的基礎(chǔ)。</p><p> 課程設(shè)計(jì)內(nèi)容(包括技術(shù)指標(biāo))</p><p> 本設(shè)計(jì)主要任務(wù)是設(shè)計(jì)一簡(jiǎn)易電子琴,利用所給鍵盤(pán)的1,2,3,4,5,6,7七個(gè)鍵,能夠發(fā)出1,2,3,4,5,6,7
6、等7個(gè)音符,具有一般演奏功能,同時(shí)利用第八個(gè)鍵具有自動(dòng)播放已存曲目功能。 </p><p> 1. 電子琴及串口原理圖的設(shè)計(jì)、PCB板的制作、焊接。特別在焊接過(guò)程中認(rèn)真、仔細(xì),避免缺焊、漏焊。</p><p> 2. 頻率初值的計(jì)算。會(huì)計(jì)算脈沖值與頻率的關(guān)系。正確計(jì)算出各音階所對(duì)應(yīng)的頻率的初值。</p><p> 3. 電子琴的工作過(guò)程分析。&l
7、t;/p><p><b> ?。?)初始化過(guò)程</b></p><p> 啟動(dòng)時(shí),首先是對(duì)定時(shí)器T0 進(jìn)行初始化,設(shè)定它的工作狀態(tài),對(duì)于本系統(tǒng)將T0 設(shè)定為工作方式1;</p><p><b> ?。?)按鍵檢測(cè)過(guò)程</b></p><p> 初始化完成后,是判斷是否有鍵按下,如果沒(méi)有按鍵按下,則繼
8、續(xù)判斷,如果有按鍵按下,延時(shí)一段時(shí)間在判斷是否有鍵按下,若無(wú)按鍵按下返回繼續(xù)判斷,若確實(shí)有鍵按下則判斷是哪個(gè)鍵按下;</p><p><b> ?。?)聲音播放過(guò)程</b></p><p> 根據(jù)按鍵的功能將計(jì)數(shù)初值裝入定時(shí)器T0 、T1中中并啟動(dòng)T0 、T1,當(dāng)T0定時(shí)完畢后,重新裝入計(jì)數(shù)初值繼續(xù)定時(shí)并將P3.3取反,再次定時(shí)完畢后再一次的裝入計(jì)數(shù)初值繼續(xù)定時(shí)并將
9、P3.3取反,一直循環(huán)此操作直到按鍵釋放為止,按鍵釋放后停止T0工作并再次判斷是否又有按鍵按下,并繼續(xù)執(zhí)行以前的過(guò)程。單片機(jī)定時(shí)器啟動(dòng)時(shí),發(fā)出一定頻率的脈沖(各音調(diào)對(duì)應(yīng)的頻率脈沖),該頻率的脈沖經(jīng)喇叭驅(qū)動(dòng)電路放大濾波后,就回發(fā)出相應(yīng)的音調(diào)。</p><p> ?。?)流水燈工作過(guò)程</p><p> 單片機(jī)上電后執(zhí)行事先設(shè)定好的流水燈程序,有按鍵按下時(shí)則亮對(duì)應(yīng)音調(diào)的燈。</p>
10、;<p><b> 課程設(shè)計(jì)原則</b></p><p> 盡可能使音色、音律更準(zhǔn)確;</p><p> 在滿足控制的前提下,力求使控制系統(tǒng)簡(jiǎn)單、經(jīng)濟(jì);</p><p> 保證控制系統(tǒng)安全可靠。</p><p><b> 課程設(shè)計(jì)步驟</b></p><p
11、> 對(duì)控制系統(tǒng)任務(wù)和要求作深入的調(diào)查研究,明確控制任務(wù)。</p><p> 根據(jù)原理畫(huà)出電子琴原理圖及串口原理圖。</p><p><b> 選擇合適的芯片。</b></p><p> 依據(jù)原理圖,把所選用的板子焊接好。</p><p> 確定系統(tǒng)整體設(shè)計(jì)方案,進(jìn)行軟件編程。</p><
12、;p> 控制系統(tǒng)的硬件設(shè)計(jì)。</p><p> 電子琴原理圖及PCB圖;</p><p> 串口原理圖及PCB圖。</p><p> 控制系統(tǒng)的軟件設(shè)計(jì)。</p><p> 設(shè)計(jì)七個(gè)基本高低音調(diào);</p><p><b> 設(shè)計(jì)歌曲;</b></p><p&g
13、t;<b> 設(shè)計(jì)流水燈程序。</b></p><p><b> 聯(lián)機(jī)調(diào)試。</b></p><p><b> 撰寫(xiě)設(shè)計(jì)說(shuō)明書(shū)。</b></p><p><b> 時(shí)間安排</b></p><p><b> 基本要求</b>
14、</p><p><b> (一)課程設(shè)計(jì)報(bào)告</b></p><p> 電子琴原理圖及PCB圖一份(電子版)。</p><p> 串口原理圖及PCB圖一份(電子版)。</p><p> 設(shè)計(jì)說(shuō)明書(shū)一份,包括以下內(nèi)容。</p><p> 寫(xiě)出設(shè)計(jì)計(jì)劃和基本步驟。</p>&
15、lt;p><b> 畫(huà)出軟件流程圖。</b></p><p> 寫(xiě)出軟件程序,并加以注釋。</p><p> 寫(xiě)出調(diào)試過(guò)程和結(jié)果。</p><p><b> 寫(xiě)課程設(shè)計(jì)小結(jié)。</b></p><p><b> ?。ǘ┏煽?jī)?cè)u(píng)定標(biāo)準(zhǔn)</b></p>&
16、lt;p> 對(duì)學(xué)生進(jìn)行全面考核,重點(diǎn)考核設(shè)計(jì)圖紙、說(shuō)明書(shū)質(zhì)量;獨(dú)立思考、獨(dú)立工作能力,綜合運(yùn)用知識(shí)的能力;平時(shí)的工作態(tài)度及表現(xiàn);答辯情況。</p><p> 最后按平時(shí)表現(xiàn)、報(bào)告質(zhì)量、答辯成績(jī),其權(quán)重分別為0.2、0.4、0.4綜合評(píng)定成績(jī),分優(yōu)、良、中、及、不及格五個(gè)等級(jí)。</p><p><b> 組長(zhǎng): 張 娜</b></p><
17、p><b> 組員:龔壽濤、趙偉</b></p><p><b> 任務(wù)分配:</b></p><p><b> 摘 要</b></p><p> 本設(shè)計(jì)主要是通過(guò)對(duì)電子琴主體部分的電路進(jìn)行模仿設(shè)計(jì),達(dá)到電子琴固有的基本功能,故叫簡(jiǎn)易電子琴。本設(shè)計(jì)的主要內(nèi)容是用AT89C51單片機(jī)為核
18、心控制元件并與鍵盤(pán)、揚(yáng)聲器等模塊組成核心主控制模塊,在主控模塊上設(shè)有8個(gè)按鍵和揚(yáng)聲器。通過(guò)編寫(xiě)程序讓其中七個(gè)按鍵分別對(duì)應(yīng)音樂(lè)的七個(gè)音符,可以通過(guò)這七個(gè)按鍵任意彈奏我們想要的音樂(lè)節(jié)奏,最終實(shí)現(xiàn)電子琴的模擬設(shè)計(jì),寧外一個(gè)按鍵用來(lái)控制歌曲的連續(xù)播放,將一首歌曲翻譯成單片機(jī)定時(shí)器能識(shí)別的頻率初值通過(guò)按下第八個(gè)按鍵就能播放設(shè)計(jì)好的歌曲,同時(shí)還增加了流水燈的動(dòng)感效果,用流水燈反應(yīng)音樂(lè)的音階,流水燈將隨音樂(lè)節(jié)奏的跳動(dòng)而不停的切換。</p>
19、<p> 關(guān)鍵詞 </p><p> 單片機(jī) 按鍵 音階 揚(yáng)聲器</p><p> Abstract: </p><p> This design mainly through to mimic keyboard main body part of the circuit desig
20、n, to achieve electronic organ inherent basic function, so called simple electronic organ. The main content of this design is to use AT89C51 as the core control component with the keyboard, speakers and other core module
21、s of main control module, on the main control module has eight keys and speakers. By writing program for one of the seven keys corresponding to music seven notes, can through the seven key any we want</p><p>
22、; Key words : Single chip microcomputer The keys Scale The speaker</p><p><b> 目 錄</b></p><p><b> 緒論1</b></p><p><b> 1系統(tǒng)方案設(shè)計(jì)1</b></p&g
23、t;<p> 1.1系統(tǒng)方案的選擇1</p><p> 1.2系統(tǒng)硬件組成框圖2</p><p> 2 STC89C52最小系統(tǒng)設(shè)計(jì)3</p><p> 2.1單片機(jī)芯片選擇3</p><p> 2.2復(fù)位電路設(shè)計(jì)4</p><p> 2.3時(shí)鐘電路設(shè)計(jì)5</p>&
24、lt;p> 3 電子琴硬件設(shè)計(jì)5</p><p> 3.1 鍵盤(pán)電路設(shè)計(jì)5</p><p> 3.2 顯示電路設(shè)計(jì)7</p><p> 3.3 串口電路設(shè)計(jì)7</p><p> 3.4發(fā)音電路設(shè)計(jì)9</p><p> 4 電子琴軟件設(shè)計(jì)9</p><p> 4.1
25、 電子琴發(fā)聲原理9</p><p> 4.2 程序流程圖設(shè)計(jì)14</p><p> 4.3電子琴模塊化程設(shè)計(jì)14</p><p><b> 5 系統(tǒng)調(diào)試16</b></p><p><b> 6 總結(jié)18</b></p><p><b> 參考文
26、獻(xiàn)19</b></p><p><b> 附錄20</b></p><p><b> 附錄一20</b></p><p><b> 附錄二25</b></p><p><b> 緒論</b></p><p&g
27、t; 本設(shè)計(jì)主要對(duì)使用單片機(jī)設(shè)計(jì)簡(jiǎn)易電子琴進(jìn)行了分析,并介紹了基于單片機(jī)電子琴總體硬件組成。利用單片機(jī)定時(shí)器產(chǎn)生不同頻率來(lái)獲得我們要求的音階,最終可通過(guò)按鍵隨意彈奏想要表達(dá)的音樂(lè)節(jié)奏。本次設(shè)計(jì)分別從原理圖,主要芯片,各模塊原理及各模塊的程序的調(diào)試來(lái)詳細(xì)闡述設(shè)計(jì)過(guò)程。</p><p> 電子琴是現(xiàn)代電子科技與音樂(lè)結(jié)合的產(chǎn)物,是一種新型的鍵盤(pán)樂(lè)器。本文的主要內(nèi)容是用AT89S51單片機(jī)為核心控制元件,設(shè)計(jì)一個(gè)電子
28、琴。以單片機(jī)作為主控核心,與鍵盤(pán)、揚(yáng)聲器等模塊組成核心主控制模塊,在主控模塊上設(shè)有8個(gè)按鍵和揚(yáng)聲器。通過(guò)編程使按鍵能對(duì)應(yīng)相應(yīng)的音調(diào)或者連續(xù)播放音樂(lè),并能通過(guò)流水燈的亮滅來(lái)顯示音樂(lè)的節(jié)奏,功能簡(jiǎn)單而其實(shí)用,在生活中得到了廣泛的應(yīng)用。 每首歌曲是由許多不同的音階組成的,而每個(gè)音階對(duì)應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂(lè),當(dāng)然對(duì)于單片機(jī)來(lái)產(chǎn)生不同的頻率非常方便,我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0
29、來(lái)產(chǎn)生這樣方波頻率信號(hào)。</p><p><b> 1系統(tǒng)方案設(shè)計(jì)</b></p><p> 1.1系統(tǒng)方案的選擇</p><p> 實(shí)現(xiàn)本次設(shè)計(jì)的方案有多種,下面比較說(shuō)明一下最佳方案的選擇。</p><p> 方案一:采用單個(gè)的邏輯器件組合</p><p> 音樂(lè)是有由不同的音階組成的
30、,而不同的音階又是由不同的頻率發(fā)出的,那么利用不同的頻率,就可以發(fā)出不同的音樂(lè)了。我們知道計(jì)數(shù)器8253可以產(chǎn)生任意頻率的方波頻率信號(hào),因此,我們只要把一首歌曲的音階對(duì)應(yīng)頻率與計(jì)數(shù)器的頻率對(duì)應(yīng)起來(lái)就可通過(guò)計(jì)數(shù)器產(chǎn)生音樂(lè)了。根據(jù)本實(shí)驗(yàn)要求,采用8279將鍵掃得到的鍵值通過(guò)查表得到相應(yīng)的8253的頻率值,將從8253得到相對(duì)應(yīng)的按鍵彈奏信號(hào)經(jīng)過(guò)LM386進(jìn)行放大,再用喇叭輸出,就實(shí)現(xiàn)了簡(jiǎn)易電子琴的基本功能,也就完成了實(shí)驗(yàn)的要求。</p
31、><p> 方案二:采用AT89S52單片機(jī)作為主控芯片,設(shè)置鍵盤(pán)、蜂鳴器等外圍器件,另外還用到一些簡(jiǎn)單器件如:兩位數(shù)碼管,和PNP型三極管及電阻等。利用按鍵實(shí)現(xiàn)音符和音調(diào)的輸入;兩位的數(shù)碼管進(jìn)行被操作的按鍵顯示;用PNP型三極管9012實(shí)現(xiàn)低音頻功率放大;最后用蜂鳴器發(fā)音。</p><p><b> 兩種方案的比較:</b></p><p>
32、 方案一采用單個(gè)的邏輯器件組合實(shí)現(xiàn)。這樣雖然比較直觀,邏輯器件分工鮮明,思路也比清晰,一目了然,但是由于元器件種類、個(gè)數(shù)繁多,而過(guò)于復(fù)雜的硬件電路也容易引起系統(tǒng)的精度不高、體積過(guò)大等不利因素。例如七個(gè)不同的音符是由七個(gè)不同的頻率來(lái)控制發(fā)出的,所用儀器之多顯而易見(jiàn)。方案二與前一種方案相比,主控芯片采用AT89S52單片機(jī),它是大規(guī)模集成電路技術(shù)發(fā)展的產(chǎn)物,具有高性能、高速度、體積小、價(jià)格低廉、穩(wěn)定可靠、應(yīng)用廣泛的特點(diǎn)。同時(shí)具有強(qiáng)大的控制
33、功能和靈活的編程實(shí)現(xiàn)特性,由于本設(shè)計(jì)主要用于人們娛樂(lè)方面,因此在設(shè)計(jì)上盡量使其安全以及簡(jiǎn)單易操作。而第二種方案具有經(jīng)濟(jì)可行性、技術(shù)可行性、實(shí)物應(yīng)用性。</p><p> 綜上所述,本次課程設(shè)計(jì)采用第二種方案。</p><p> 1.2系統(tǒng)硬件組成框圖</p><p> 圖1.2 系統(tǒng)硬件組成框圖</p><p> 實(shí)驗(yàn)中每按下一個(gè)琴鍵
34、,單片機(jī)能夠檢測(cè)到鍵盤(pán)的按鍵,并根據(jù)按鍵的位置,通過(guò)程序來(lái)控制,使喇叭發(fā)出不同頻率(音調(diào))的聲音,聲音延遲一段時(shí)間,等到按鍵放開(kāi)之后,聲音停止。然后再繼續(xù)掃描,看是否有鍵按下。如此循環(huán),即可實(shí)現(xiàn)基本的琴鍵功能。</p><p> 2 STC89C52最小系統(tǒng)設(shè)計(jì)</p><p> 硬件電路要以單片機(jī)作為主控芯片,實(shí)現(xiàn)按鍵輸入音符和音調(diào),兩位數(shù)碼管的顯示以及低音頻功率放大和蜂鳴器發(fā)音。針
35、對(duì)本設(shè)計(jì)的功能和用途,采用AT89C52單片機(jī)更好,實(shí)現(xiàn)功能完全,性價(jià)比較高,更適合本設(shè)計(jì)。</p><p> 2.1單片機(jī)芯片選擇</p><p> 此次設(shè)計(jì)采用的是STC89C52單片機(jī)芯片,其特點(diǎn)及管腳封裝介紹如下:</p><p> STC89C52 是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。使用Atmel司
36、高密度非 易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完 全兼容。STC89C52具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,256字節(jié)RAM, 32 位I/O 口線,看門(mén)狗定時(shí)器,2個(gè)數(shù)據(jù)指針,三個(gè)16 位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口, 片內(nèi)晶振及時(shí)鐘電路。另外,STC89C52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷
37、繼續(xù)工 作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié), 單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。8 位微控制器 8K 字節(jié)在系統(tǒng)可編程 Flash STC89C52</p><p> 其中P3口亦作為STC89C52特殊功能(第二功能)使用,如下表所示。 </p><p> 在flash編程和校驗(yàn)時(shí),P3口也接收一些控制信號(hào)。 </p><p>
38、 端口引腳 第二功能 </p><p> P3.0 RXD(串行輸入口) </p><p> P3.1 TXD(串行輸出口) </p><p> P3.2 INTO(外中斷0) </p><p> P3.3 INT1(外中斷1) </p><p> P3.4 TO(定時(shí)/計(jì)數(shù)器0) </p>
39、<p> P3.5 T1(定時(shí)/計(jì)數(shù)器1) </p><p> P3.6 WR(外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通) </p><p> P3.7 RD(外部數(shù)據(jù)存儲(chǔ)器讀選通) </p><p> 此外,P3口還接收一些用于FLASH閃存編程和程序校驗(yàn)的控制信號(hào)。 </p><p> RST——復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩
40、個(gè)機(jī)器周期以上高電平將是單片機(jī)復(fù)位在89系列中,在器件引腳的封裝上,MCS-51系列機(jī)通常有兩種封裝:一種是雙列直插式,常為HMOS型器件所用;另一種是方形封裝,大多數(shù)在CHMOS型器件中使用。89C52單片機(jī)DIP40封裝如2.1所示</p><p> 圖2.1 89C52直插式封裝</p><p><b> 2.2復(fù)位電路設(shè)計(jì)</b></p>&
41、lt;p><b> 圖2.2 復(fù)位電路</b></p><p> 單片機(jī)最小系統(tǒng)常采用上電自動(dòng)復(fù)位和手動(dòng)按鍵復(fù)位兩種方式實(shí)現(xiàn)系統(tǒng)的復(fù)位操作。上電復(fù)位要求接通電源后,自動(dòng)實(shí)現(xiàn)復(fù)位操作。手動(dòng)復(fù)位要求在電源接通的條件下,在單片機(jī)運(yùn)行期間,用按鈕開(kāi)關(guān)操作使單片機(jī)復(fù)位。其結(jié)構(gòu)如下圖。上電自動(dòng)復(fù)位通過(guò)電容C4充電來(lái)實(shí)現(xiàn)。手動(dòng)按鍵復(fù)位是通過(guò)按鍵將電阻R2與VCC接通來(lái)實(shí)現(xiàn)。</p>
42、<p><b> 2.3時(shí)鐘電路設(shè)計(jì)</b></p><p><b> 圖2.3 時(shí)鐘電路</b></p><p> 單片機(jī)內(nèi)部具有一個(gè)高增益反相放大器,用于構(gòu)成振蕩器。通常在引腳XTALl和XTAL2跨接石英晶體和兩個(gè)補(bǔ)償電容構(gòu)成自激振蕩器,結(jié)構(gòu)圖中Y1、C1、C2??梢愿鶕?jù)情況選擇6MHz、12MHz或24MHz等頻率的石英
43、晶體,補(bǔ)償電容通常選擇30pF左右的瓷片電容。</p><p><b> 3 電子琴硬件設(shè)計(jì)</b></p><p> 3.1 鍵盤(pán)電路設(shè)計(jì)</p><p> 常用的按鍵有三種:機(jī)械觸點(diǎn)式按鍵、導(dǎo)電橡膠式和柔性按鍵(又稱觸摸式鍵盤(pán))。 機(jī)械觸點(diǎn)式按鍵是利用機(jī)械彈性使鍵復(fù)位,手感明顯,連線清晰
44、,工藝簡(jiǎn)單,適合單件制造。但是觸點(diǎn)處易侵入灰塵而導(dǎo)致接觸不良,體積相對(duì)較大。 導(dǎo)電橡膠按鍵是利用橡膠的彈性來(lái)復(fù)位,通過(guò)壓制的方法把面板上所有的按鍵制成一塊,體積小,裝配方便,適合批量生產(chǎn)。但是時(shí)間長(zhǎng)了,橡膠老化而使彈力下降,同時(shí)易侵入灰塵。 柔性按鍵是近年來(lái)迅速發(fā)展的一種新型按鍵,可以分為凸球型和平面型兩種。柔性按鍵最大特點(diǎn)是防塵、防潮、耐蝕
45、,外形美觀,裝嵌方便。而且外形和面板的布局、色彩、鍵距可按照整機(jī)的要求來(lái)設(shè)計(jì)。</p><p> 但是由于客觀條件與經(jīng)濟(jì)能力有限,本系統(tǒng)采用機(jī)械觸點(diǎn)式按鍵。當(dāng)測(cè)試表明有鍵被按下之后,緊接著就進(jìn)行去抖動(dòng)處理。因?yàn)殒I是機(jī)械開(kāi)關(guān)結(jié)構(gòu),由于機(jī)械觸點(diǎn)的彈性及電壓突跳等原因,在觸點(diǎn)閉合或斷開(kāi)的瞬間會(huì)出現(xiàn)電壓抖動(dòng)。為保證鍵識(shí)別的準(zhǔn)確,在電壓信號(hào)抖動(dòng)的情況下不能進(jìn)行行狀態(tài)輸入。為此需進(jìn)行去抖動(dòng)處理。去抖動(dòng)有硬件和軟件兩種方法。
46、硬件方法就是加去抖動(dòng)電路,從根本上避免抖動(dòng)的產(chǎn)生。軟件消抖,在第一次檢測(cè)到有鍵按下時(shí),執(zhí)行一段延時(shí)程序之后,再檢測(cè)此按鍵,如果第二次檢測(cè)結(jié)果仍為按下?tīng)顟B(tài),CPU便確認(rèn)此按鍵己按下,消除了抖動(dòng)。</p><p><b> 圖3.1 鍵盤(pán)電路</b></p><p> 利用所給鍵盤(pán)的1,2,3,4,5,6,7,8八個(gè)鍵,能夠發(fā)出7個(gè)不同的音調(diào),而且有一個(gè)按鍵可以自動(dòng)播
47、放歌曲,要求按鍵按下時(shí)發(fā)聲,松開(kāi)延時(shí)一小段時(shí)間,中間再按別的鍵則發(fā)另外一音調(diào)的聲音,當(dāng)系統(tǒng)掃描到鍵盤(pán)按下,則快速檢測(cè)出是哪一個(gè)按鍵被按下,然后單片機(jī)的定時(shí)器啟動(dòng),發(fā)出一定頻率的脈沖,該頻率的脈沖經(jīng)喇叭驅(qū)動(dòng)電路放大濾波后,就會(huì)發(fā)出相應(yīng)的音調(diào)。如果在前一個(gè)按下的鍵發(fā)聲的同時(shí)有另一個(gè)按鍵被按下,則啟動(dòng)中斷系統(tǒng)。前面的發(fā)音停止,轉(zhuǎn)到后按的鍵的發(fā)音程序。發(fā)出后按的鍵的音調(diào)。</p><p> 3.2 顯示電路設(shè)計(jì)<
48、/p><p> 圖3.2 流水燈顯示電路</p><p> 本設(shè)計(jì)利用8個(gè)燈對(duì)應(yīng)8個(gè)按鍵的功能顯示,當(dāng)按下1-7按鍵時(shí)對(duì)應(yīng)7個(gè)音調(diào)同時(shí)對(duì)應(yīng)的小燈閃爍,當(dāng)按下第8 個(gè)按鍵時(shí)播放歌曲同時(shí)小燈輪閃,閃亮的時(shí)間等于音調(diào)的長(zhǎng)短,小燈之間的切換時(shí)間為節(jié)拍時(shí)間,這樣就實(shí)現(xiàn)了小燈隨音樂(lè)而跳動(dòng)閃爍的景象。使小燈隨音樂(lè)跳動(dòng)起來(lái),這就是小燈顯示的優(yōu)點(diǎn)。</p><p> 3.3 串口
49、電路設(shè)計(jì)</p><p> 本設(shè)計(jì)采用MAX232串口轉(zhuǎn)換芯片其性能特點(diǎn)如下:</p><p> 1、符合所有的RS-232C技術(shù)指標(biāo); </p><p> 2、只需要單一+5V電源供電; </p><p> 3、片載電荷泵具有升壓、電壓極性反轉(zhuǎn)能力,能夠產(chǎn)生+10V和-10V電壓V+、V-; </p><p>
50、; 4、功耗低,典型供電電流5mA; </p><p> 5、內(nèi)部集成2個(gè)RS-232C驅(qū)動(dòng)器; </p><p> 6、內(nèi)部集成兩個(gè)RS-232C接收器; </p><p> 7、高集成度,片外最低只需4個(gè)電容即可工作。</p><p> MAX232芯片是美信公司專門(mén)為電腦的RS-232標(biāo)準(zhǔn)串口設(shè)計(jì)的單電源電平轉(zhuǎn)換芯片,使用+5
51、v單電源供電。</p><p> 內(nèi)部基本上可以分為三部分:</p><p> 第一部分是電荷泵電路。由1、2、3、4、5、6腳和4只電容構(gòu)成。功能是產(chǎn)生+12v和-12v兩個(gè)電源,提供給RS-232串口電平的需要。 </p><p> 第二部分是數(shù)據(jù)轉(zhuǎn)換通道。由7、8、9、10、11、12、13、14腳構(gòu)成兩個(gè)數(shù)據(jù)通道。 </p><p&
52、gt; 其中13腳(R1IN)、12腳(R1OUT)、11腳(T1IN)、14腳(T1OUT)為第一數(shù)據(jù)通道。 </p><p> 8腳(R2IN)、9腳(R2OUT)、10腳(T2IN)、7腳(T2OUT)為第二數(shù)據(jù)通道。</p><p> TTL/CMOS數(shù)據(jù)從11引腳(T1IN)、10引腳(T2IN)輸入轉(zhuǎn)換成RS-232數(shù)據(jù)從14腳(T1OUT)、7腳(T2OUT)送到電腦D
53、B9插頭;DB9插頭的RS-232數(shù)據(jù)從13引腳(R1IN)、8引腳(R2IN)輸入轉(zhuǎn)換成TTL/CMOS數(shù)據(jù)后從12引腳(R1OUT)、9引腳(R2OUT)輸出。</p><p> 第三部分是供電。15腳GND、16腳VCC(+5v)。下圖所示為MAX232管腳封裝圖。</p><p> 圖3.3 MAX232封裝引腳圖</p><p><b>
54、圖3.4 串口電路</b></p><p> 電容器應(yīng)選擇1μF的電解電容。 </p><p> 由于RS232電平較高,在接通時(shí)產(chǎn)生的瞬時(shí)電涌非常高,很有可能擊毀MAX232,所以在使用中應(yīng)盡量避免熱插拔。如圖3.4所示為通信下載電路圖。</p><p><b> 3.4發(fā)音電路設(shè)計(jì)</b></p><p
55、> 圖3.4 揚(yáng)聲器發(fā)聲電路</p><p> 本設(shè)計(jì)采用9012PNP型三極管,三極管9012是一種常用的小功率PNP型硅管,</p><p> 在圖中,三極管主要是做驅(qū)動(dòng)用的,因?yàn)閱纹瑱C(jī)的IO口驅(qū)動(dòng)能力不夠讓蜂鳴器發(fā)出聲音,所以我們通過(guò)三極管放大驅(qū)動(dòng)電流,從而可以讓蜂鳴器發(fā)出聲音,當(dāng)P3.3口輸出高電平三極管導(dǎo)通,集電極電流通過(guò)蜂鳴器讓蜂鳴器發(fā)出聲音,當(dāng)輸出低電平時(shí),三極
56、管截止,沒(méi)有電流流過(guò)蜂鳴器,所以就不會(huì)發(fā)出聲音,從而實(shí)現(xiàn)單片機(jī)控制發(fā)聲。</p><p><b> 4 電子琴軟件設(shè)計(jì)</b></p><p> 4.1 電子琴發(fā)聲原理</p><p> 一般說(shuō)來(lái),單片機(jī)演奏音樂(lè)基本都是單音頻率,它不包含相應(yīng)幅度的諧波</p><p> 頻率,也就是說(shuō)不能象電子琴那樣能奏出多種音
57、色的聲音。因此單片機(jī)奏樂(lè)只需</p><p> 弄清楚兩個(gè)概念即可,也就是“音調(diào)”和“節(jié)拍”。音調(diào)表示一個(gè)音符唱多高的</p><p> 頻率,節(jié)拍表示一個(gè)音符唱多長(zhǎng)的時(shí)間。在音樂(lè)中所謂“音調(diào)”,其實(shí)就是我們</p><p> 常說(shuō)的“音高”。在音樂(lè)中常把中央C 上方的A 音定為標(biāo)準(zhǔn)音高,其頻率f=440Hz。</p><p> 當(dāng)兩
58、個(gè)聲音信號(hào)的頻率相差一倍時(shí),也即f2=2*f1時(shí),則稱f2比f(wàn)1高一個(gè)倍頻程,</p><p> 在音樂(lè)中1(do)與.1,2(re)與.2……正好相差一個(gè)倍頻程,在音樂(lè)學(xué)中稱它</p><p> 相差一個(gè)八度音。在一個(gè)八度音內(nèi),有12個(gè)半音。以1—i 八音區(qū)為例, 12 個(gè)</p><p> 半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,
59、#4—5、5 一#5、</p><p> ?。?—6、6—#6、#6—7、7—i。這12 個(gè)音階的分度基本上是以對(duì)數(shù)關(guān)系來(lái)劃</p><p> 分的。如果我們只要知道了這十二個(gè)音符的音高,也就是其基本音調(diào)的頻率,我</p><p> 們就可根據(jù)倍頻程的關(guān)系得到其他音符基本音調(diào)的頻率。</p><p> 知道了一個(gè)音符的頻率后,我們就可以
60、采用通過(guò)單片機(jī)的定時(shí)器定時(shí)中斷</p><p> 的方法,將單片機(jī)上對(duì)應(yīng)蜂鳴器的I/O 口來(lái)回取反,或者說(shuō)來(lái)回清零,置位,從</p><p> 而讓蜂鳴器發(fā)出聲音,為了讓單片機(jī)發(fā)出不同頻率的聲音,我們只需將定時(shí)器予</p><p> 置不同的定時(shí)值就可實(shí)現(xiàn)。我們就以本次設(shè)計(jì)中標(biāo)準(zhǔn)音高A為例進(jìn)行演示。A的頻</p><p> 率f =
61、440 Hz,其對(duì)應(yīng)的周期為:</p><p> T = 1/ f = 1/440 =2272μs</p><p> 圖4.1.1 脈沖產(chǎn)生原理圖</p><p> 由圖4.1.1可知,單片機(jī)上對(duì)應(yīng)蜂鳴器的I/O 口來(lái)回取反的時(shí)間應(yīng)為:</p><p> t=T/2=2272/2=1136μs</p><p>
62、 這個(gè)時(shí)間t 也就是單片機(jī)上定時(shí)器應(yīng)有的中斷觸發(fā)時(shí)間。</p><p> 一般情況下,單片機(jī)奏樂(lè)時(shí),其定時(shí)器為工作方式1,它以振蕩器的十二分</p><p> 頻信號(hào)為計(jì)數(shù)脈沖。設(shè)振蕩器頻率為f0,則定時(shí)器的予置初值由下式來(lái)確定:</p><p> t=12*(TALL–THL)/f0</p><p> 式中TALL = 216 =
63、 65536,THL為定時(shí)器待確定的計(jì)數(shù)初值。</p><p> 因此定時(shí)器的高低計(jì)數(shù)器的初值為:</p><p> TH=THL/256=(TALL–t*f0/12)/256</p><p> TL=THL%256=(TALL–t*f0/12)%256</p><p> 將t=1136μs 代入上面兩式(注意:計(jì)算時(shí)應(yīng)將時(shí)間和頻率的
64、單位換算一致),</p><p> 即可求出標(biāo)準(zhǔn)音高A 在單片機(jī)晶振頻率f0=12Mhz,定時(shí)器在工作方式1下的定時(shí)</p><p> 器高低計(jì)數(shù)器的予置初值為:</p><p> TH440Hz=(65536–1136*12/12)/256=0XFB</p><p> TL440Hz=(65536–1136*12/12)%256=0
65、X90</p><p> 根據(jù)上面的求解方法,我們就可求出其他音調(diào)相應(yīng)的計(jì)數(shù)器的予置初值。</p><p> 音符的節(jié)拍我們也可以舉例來(lái)說(shuō)明。在一張樂(lè)譜中,我們經(jīng)常會(huì)看到這樣的</p><p> 表達(dá)式,如1=C、1=G…… 等等,這里1=C,1=G表示樂(lè)譜的曲調(diào),和我們前面所談</p><p> 的音調(diào)有很大的關(guān)聯(lián),、就是用來(lái)表示節(jié)
66、拍的。以為例加以說(shuō)明,它表示樂(lè)譜中</p><p> 以四分音符為節(jié)拍,每一小結(jié)有三拍。比如:</p><p> 圖4.1.2 部分樂(lè)譜圖</p><p> 在圖4.1.2中1 、2 為一拍,3、4、5 為一拍,6為一拍共三拍。1 、2的時(shí)長(zhǎng)為四分音符的一半,即為八分音符長(zhǎng),3、4的時(shí)長(zhǎng)為八分音符的一半,即為十六分音符長(zhǎng),5 的時(shí)長(zhǎng)為四分音符的一半,即為八分
67、音符長(zhǎng),6的時(shí)長(zhǎng)為四分音符長(zhǎng)。</p><p> 一般說(shuō)來(lái),如果樂(lè)曲沒(méi)有特殊說(shuō)明,一拍的時(shí)長(zhǎng)大約為400—500ms 。我們以一</p><p> 拍的時(shí)長(zhǎng)為400ms 為例,則當(dāng)以四分音符為節(jié)拍時(shí),四分音符的時(shí)長(zhǎng)就為400ms,</p><p> 八分音符的時(shí)長(zhǎng)就為200ms,十六分音符的時(shí)長(zhǎng)就為100ms??梢?jiàn),在單片機(jī)上控制一個(gè)音符唱多長(zhǎng)可采用循環(huán)延時(shí)的
68、方法來(lái)實(shí)現(xiàn)。首先,我們確定一個(gè)基本時(shí)長(zhǎng)的延時(shí)程序,比如說(shuō)以十六分音符的時(shí)長(zhǎng)為基本延時(shí)時(shí)間,那么,對(duì)于一個(gè)音符,如果它為十六分音符,則只需調(diào)用一次延時(shí)程序,如果它為八分音符,則只需調(diào)用二次延時(shí)程序,如果它為四分音符,則只需調(diào)用四次延時(shí)程序,依次類推。</p><p> 通過(guò)上面關(guān)于一個(gè)音符音調(diào)和節(jié)拍的確定方法,我們就可以在單片機(jī)上實(shí)現(xiàn)演奏音樂(lè)了。具體的實(shí)現(xiàn)方法為:將樂(lè)譜中的每個(gè)音符的音調(diào)及節(jié)拍變換成相應(yīng)的音調(diào)參數(shù)
69、和節(jié)拍參數(shù),將他們做成數(shù)據(jù)表格,存放在存儲(chǔ)器中,通過(guò)程序取出一個(gè)音符的相關(guān)參數(shù),播放該音符,該音符唱完后,接著取出下一個(gè)音符的相關(guān)參數(shù),如此直到播放完畢最后一個(gè)音符,根據(jù)需要也可循環(huán)不停地播放整個(gè)樂(lè)曲。另外,對(duì)于樂(lè)曲中的休止符,一般將其音調(diào)參數(shù)設(shè)為0XFF,0XFF,其節(jié)拍參數(shù)與其他音符的節(jié)拍參數(shù)確定方法一致,樂(lè)曲結(jié)束用節(jié)拍參數(shù)為00H來(lái)表示。</p><p> 音調(diào)數(shù)據(jù)表(C調(diào))</p>&l
70、t;p> 本次設(shè)計(jì)采用樂(lè)譜如下圖:</p><p> 根據(jù)以上原理可知此樂(lè)譜為C調(diào)2/4,延時(shí)一拍為250ms</p><p> 若單片機(jī)采用12MHZ晶振,則音符與計(jì)數(shù)T0相關(guān)的計(jì)數(shù)值如圖4.1.3:</p><p> 圖4.1.3 音符頻率表</p><p><b> 音樂(lè)彈奏原理:</b></
71、p><p> 本次設(shè)計(jì)中單片機(jī)晶振為12MHZ,那么定時(shí)器的計(jì)數(shù)周期為1MHZ,假如選擇工作方式1,那T值便為T(mén)=2^16—5*105/相應(yīng)的頻率,那么根據(jù)不同的頻率計(jì)算出應(yīng)該賦給定時(shí)器的計(jì)數(shù)值。按鍵與音階的對(duì)應(yīng)關(guān)系如圖4.1.4所示:</p><p> 圖4.1.4 按鍵與音階對(duì)照表 </p><p> 4.2 程序流程圖設(shè)計(jì)</
72、p><p> 根據(jù)8個(gè)按鍵對(duì)應(yīng)不同的發(fā)聲狀態(tài),程序主要流程圖如圖4.2</p><p> 圖4.2 程序主要流程圖</p><p> 4.3電子琴模塊化程序設(shè)計(jì)</p><p> 本次程序設(shè)計(jì)采用模塊化編程,模塊化編程具有很多優(yōu)點(diǎn),能夠使程序更加簡(jiǎn)單明了,將程序分為不同的模塊讓人一看就能知道程序由哪幾個(gè)部分組成,各個(gè)部分之間有什么聯(lián)系,而
73、且能很方便的看出各個(gè)模塊的功能,因?yàn)楦鱾€(gè)模塊都是功能相互獨(dú)立的,每個(gè)模塊都具有可移植性,方便重復(fù)使用,不必每次都重新編寫(xiě)程序,大大節(jié)約了編程時(shí)間,提高了編程效率。</p><p> 模塊化編程的步驟如下:</p><p> 1.創(chuàng)建頭文件,建立一個(gè).C文件(源文件)和一個(gè).h文件(頭文件)。原則上.C文件和.h文件同名;文件名要有意義,最好是能體現(xiàn)文件代碼的功能。例如延時(shí)函數(shù)相關(guān)的源文
74、件和頭文件命名為delay.c與delay.h</p><p> 2.防重復(fù)包含處理,在.h文件中加入如下代碼:</p><p> #ifndef XXX</p><p> #defineXXX</p><p><b> ……………..</b></p><p><b> #en
75、dif</b></p><p> 3.代碼封裝,將需要模塊化的代碼封裝入函數(shù)或者宏定義,函數(shù)先在頭文件里聲明,函數(shù)體放在.c文件中;需要被外部調(diào)用的宏定義放在.h文件中;僅會(huì)被本.c文件調(diào)用的宏定義放在.c文件中。盡量少用或者不用全局變量,必須要用全局變量的聲明放在.C文件中;當(dāng)需要調(diào)用外部全局變量時(shí),需要在.h中用extern重新聲明。</p><p> 4.使用源文件,
76、將.c文件添加到工程中,在其他.c文件中吧.h文件包含進(jìn)去。所包含的頭文件中的函數(shù),宏定義,全局變量可以在.c文件中有調(diào)用。 </p><p> 下面我用電子琴中程序簡(jiǎn)單介紹一下:</p><p> 首先將程序大致分為四個(gè)模塊如延時(shí)(delay.c),主程序(main.c),流水燈(led.c)和放歌子程序(song.c)。在KEIL軟件中創(chuàng)建上面四個(gè)源文件并添加到工程中,然后再創(chuàng)
77、建各個(gè)模塊的.h頭文件如(delay.h),(led.h),(song.h)等,然后在每個(gè)帶.c的文件中輸入每個(gè)模塊的程序,在帶.h文件中輸入(#ifndef #define #endif)結(jié)構(gòu)語(yǔ)句并包含用到的源文件名如延時(shí)語(yǔ)句可表示為</p><p> #ifndef __DELAY_H__</p><p> #define __DELAY_H__</p>&l
78、t;p> void DelayUs2x(unsigned char t);</p><p> void delay_ms(unsigned char t);</p><p><b> #endif</b></p><p> 最終建立好的模塊化程序結(jié)構(gòu)如圖4.3所示</p><p> 圖4.3 模塊化編程結(jié)
79、果</p><p><b> 5 系統(tǒng)調(diào)試</b></p><p> 此次調(diào)試用到的軟件有Keil C51和STC-ISP。Keil C51是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),與匯編相比,C語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。用過(guò)匯編語(yǔ)言后再使用C來(lái)開(kāi)發(fā),體會(huì)更加深刻。</p>
80、<p> Keil C51軟件提供豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開(kāi)發(fā)調(diào)試工具,全Windows界面。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語(yǔ)句生成的匯編代碼很緊湊,容易理解。在開(kāi)發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)語(yǔ)言的優(yōu)勢(shì)。</p><p> 圖5.1 KEIL軟件界面</p><p> STC-ISP 是一款單片
81、機(jī)下載編程燒錄軟件,是針對(duì)STC系列單片機(jī)而設(shè)計(jì)的,可下載STC89系列、12C2052 系列和12C5410等系列的STC單片機(jī),使用簡(jiǎn)便,現(xiàn)已被廣泛使用。 </p><p> 1、打開(kāi)STC-ISP,如下圖界面,在MCU Type欄目下選中單片機(jī),如STC89C52RC。 </p><p> 2、根據(jù)您的9針數(shù)據(jù)線連接情況選中COM端口,波特率一般保持默認(rèn),如果遇到下載問(wèn)題,
82、可以適當(dāng)下調(diào)一些,按圖示選中各項(xiàng):</p><p> 3、先確認(rèn)硬件連接正確,按如圖點(diǎn)擊“打開(kāi)文件”并在對(duì)話框內(nèi)找到您要下載的HEX文件:</p><p> 4、按下圖選中兩個(gè)條件項(xiàng),這樣可以使您在每次編譯KEIL時(shí)HEX代碼能自動(dòng)加載到STC-ISP,點(diǎn)擊“Download/下載”:</p><p> 5、手動(dòng)按下電源開(kāi)關(guān)便即可把可執(zhí)行文件HEX寫(xiě)入到單片機(jī)
83、內(nèi),如圖5.2是正在寫(xiě)入程序截圖:</p><p> 圖5.2 STC-ISP下載界面</p><p><b> 6 總結(jié)</b></p><p> 經(jīng)過(guò)三個(gè)星期的單片機(jī)課程實(shí)習(xí),我們經(jīng)歷了硬件的整個(gè)制作流程以及后面的程序編寫(xiě)與調(diào)試,我們先是利用Protel DXP繪制出電子琴原理圖,然后利用軟件功能生成PCB,根據(jù)PCB打印出電路圖并
84、轉(zhuǎn)印到銅板上,將轉(zhuǎn)印的銅板進(jìn)行腐蝕得到實(shí)際電路板,再對(duì)電路板打孔,將元器件安裝到電路板上然后進(jìn)行焊接,焊接完成經(jīng)過(guò)調(diào)試確定電路板制作是否成功。電路板制作完成就是程序的編寫(xiě)和調(diào)試,在這過(guò)程中加深了對(duì)單片機(jī)系列知識(shí)及其系統(tǒng)的認(rèn)識(shí),同時(shí)通過(guò)查資料找音樂(lè)也對(duì)音樂(lè)的發(fā)聲原理有了基本的了解能根據(jù)樂(lè)譜寫(xiě)出相應(yīng)的頻率初值表。通過(guò)這次課程設(shè)計(jì)讓我重新復(fù)習(xí)了以前學(xué)過(guò)的知識(shí)包括數(shù)字電子,模擬電子,電路,單片機(jī)以及C語(yǔ)言等課程,對(duì)所學(xué)知識(shí)有了系統(tǒng)的掌握,我將繼
85、續(xù)秉著學(xué)習(xí)的態(tài)度繼續(xù)努力。</p><p><b> 參考文獻(xiàn)</b></p><p> MCS-51系列單片機(jī)原理及應(yīng)用-劉淑榮-中國(guó)電力出版社-2011.1</p><p> 新概念51單片機(jī)C語(yǔ)言教程-郭天祥-電子工業(yè)出版社-2009.1</p><p> 模擬電子技術(shù)基礎(chǔ)第四版-童詩(shī)白-高等教育出版社-2
86、011.5</p><p> 數(shù)字電子技術(shù)基礎(chǔ)第四版-閻石-高等教育出版社-2011.7</p><p> 微型計(jì)算機(jī)控制技術(shù)-潘新民-高等教育出版社-2012.2</p><p> C語(yǔ)言程序設(shè)計(jì)-楊忠寶-北京大學(xué)出版社-2010.2</p><p> Altium Deigner教程-谷樹(shù)忠,劉文洲-電子工業(yè)出版社-2010.1&
87、lt;/p><p> 電子電路設(shè)計(jì)與實(shí)踐-周文良著-國(guó)防工業(yè)出版社-2011.1</p><p> 單片機(jī)原理及應(yīng)用-張虹-中國(guó)電力出版社-2009</p><p><b> 附錄</b></p><p><b> 附錄一</b></p><p><b> 電
88、子琴程序:</b></p><p> /*------------------------------------</p><p><b> 名稱:電子琴</b></p><p><b> 編寫(xiě):趙偉</b></p><p><b> 日期:2013.7</b&g
89、t;</p><p><b> 內(nèi)容:</b></p><p> -----------------------------------*/</p><p> #include<reg52.h>//52單片機(jī)頭文件</p><p> #define uchar unsigned char</p&
90、gt;<p> #define uint unsigned int</p><p> sbit SPK=P3^3;//定義輸出端口</p><p> uint num,count;</p><p> /*--------------低中高音調(diào)頻率初值------------*/</p><p> int code la
91、b[]={</p><p> 61719,62435,62506,62679,62985,63263,63512,</p><p> 63628,63835,64021,64103,64260,64400,64524,</p><p> 64580,64684,64777,64810,64898,64968,65080,</p><p>
92、; 65058,65110,65157,65178,65217,65252,65283</p><p><b> };</b></p><p> /*----------------音樂(lè)碼表--------------*/</p><p> uint code Song[]={0x12,125,0x0e,125,</p>
93、<p> 0x13,125,0x0e,125,0x12,125,</p><p> 0x10,125,0x12,125,0x0f,125,0x10,125,</p><p> 0x12,125,0xff,125,</p><p> 0x10,62,0x12,62,0x13,62,0x0e,62,</p><p> 0x12
94、,62,0x13,62,0x12,62,0x10,62,</p><p> 0x12,125,0x0e,250,0x10,125,</p><p> 0x0f,250,0xff,250,</p><p> 0x10,125,0x0f,125,0x0e,125,0x0f,125,</p><p><b> 0x10,125,&
95、lt;/b></p><p> 0x0c,125,0x12,125,0x10,125,0x12,125,</p><p> 0x13,50,0xff,125,</p><p> 0x12,125,0x0e,125,0x0c,250,0x12,125,</p><p> 0x10,125,0x12,125,0x0f,250,<
96、;/p><p> 0x12,125,0x0f,125,0x10,125,0x0f,125,</p><p> 0x0e,250,0x00,0x00</p><p><b> };</b></p><p> uint code table[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0x
97、fe};//不同音調(diào)對(duì)應(yīng)的小燈代碼</p><p> /*-----------------流水燈代碼-------------------------*/</p><p> uchar code seg[]={0x7f,0xbf,0xdf,0xef,</p><p> 0xf7,0xfb,0xfd,0xfe,</p><p> 0x
98、ff,0xff,0x00,0x00,</p><p> 0x55,0x55,0xaa,0xaa</p><p><b> };</b></p><p> uchar m,i,j;</p><p> void led_delay(uchar t)</p><p><b> {&l
99、t;/b></p><p> for(i=0;i<t;i++)</p><p><b> {</b></p><p> if(P2!=0xff)</p><p><b> break;</b></p><p> for(j=0;j<t;j++)&l
100、t;/p><p><b> {</b></p><p> if(P2!=0xff)</p><p><b> break; </b></p><p><b> }</b></p><p><b> }</b></p&g
101、t;<p><b> }</b></p><p> void display()</p><p> { P1=0xFE; //第1個(gè)LED亮</p><p> for(m=0;m<8;m++)</p><p><b> {</b&g
102、t;</p><p> led_delay(100);</p><p><b> P1 <<=1;</b></p><p><b> }</b></p><p> P1=0x7F; //第8個(gè)LED亮</p><p>
103、 for(m=0;m<8;m++)</p><p><b> {</b></p><p> led_delay(100);</p><p><b> P1 >>=1;</b></p><p><b> }</b></p><p>
104、; P1=0xFE; //第1個(gè)LED亮</p><p> for(m=0;m<8;m++)</p><p><b> {</b></p><p> led_delay(100);</p><p><b> P1 <<=1;</b><
105、;/p><p> P1 |=0x01;</p><p><b> }</b></p><p> P1=0x7F; //第8個(gè)LED亮</p><p> for(m=0;m<8;m++)</p><p><b> {</b><
106、/p><p> led_delay(100);</p><p><b> P1 >>=1;</b></p><p> P1 |=0x80;</p><p><b> }</b></p><p> //下面通過(guò)查表方法獲得花樣參數(shù)</p><
107、;p> for(m=0;m<16;m++)//查表顯示各種花樣 </p><p><b> {</b></p><p> led_delay(100);</p><p> P1=seg[m];</p><p><b> }</b></p><p><
108、;b> }</b></p><p> void init()//計(jì)數(shù)器終端初始化函數(shù)</p><p><b> {</b></p><p><b> num=0;</b></p><p> TMOD=0x11;//T0,T1工作方式1定時(shí)模式</p>&
109、lt;p><b> TH0=0xff;</b></p><p><b> TL0=0xff;</b></p><p> TH1=0xD8; //裝初值</p><p> TL1=0xEF;</p><p> EA=1; //開(kāi)總中斷</p><p&g
110、t; ET0=1; //允許T0中斷</p><p> ET1=1; //允許T1中斷</p><p><b> }</b></p><p> void DelayUs2x(uchar t)</p><p><b> { </b></p><p> w
111、hile(--t);</p><p><b> }</b></p><p> /*------------------------------------------------</p><p> mS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無(wú)返回值</p><p> unsigned char
112、是定義無(wú)符號(hào)字符變量,其值的范圍是</p><p> 0~255 這里使用晶振12M</p><p> ------------------------------------------------*/</p><p> void delay_ms(uchar t)</p><p><b> {</b><
113、/p><p> while(t--)</p><p><b> {</b></p><p><b> //大致延時(shí)1mS</b></p><p> DelayUs2x(245);</p><p> DelayUs2x(245);</p><p>
114、<b> }</b></p><p><b> }</b></p><p> void time0() interrupt 1//定時(shí)器0中斷</p><p><b> {</b></p><p> TH0=lab[num]/256;</p><
115、p> TL0=lab[num]%256;</p><p><b> SPK=!SPK;</b></p><p><b> }</b></p><p> void timer1() interrupt 3//定時(shí)器1中斷</p><p><b> {</b>&
116、lt;/p><p> TH1=0xD8; //重裝初值</p><p><b> TL1=0xEF;</b></p><p><b> count++;</b></p><p><b> }</b></p><p> void fang_Son
117、g()//放歌子程序</p><p><b> {</b></p><p> uchar Temp;</p><p> uint s,c=0;</p><p> count = 0;</p><p><b> while(1)</b></p>
118、<p><b> {</b></p><p> num = Song[s];</p><p><b> s++;</b></p><p> TH0=lab[num]/256;</p><p> TL0=lab[num]%256;</p><p> if
119、( num == 0xFF ) //休止符</p><p><b> {</b></p><p> Temp = Song[s++];</p><p> TR1 = 0;//關(guān)定時(shí)器T1</p><p> delay_ms(Temp);</p><p><b>
120、 }</b></p><p> else if ( num == 0x00 ) //歌曲結(jié)束符</p><p><b> {</b></p><p><b> return;</b></p><p><b> }</b></p><
121、p><b> else</b></p><p><b> {</b></p><p> Temp = Song[s++];</p><p> P1=table[c];</p><p><b> c++;</b></p><p><
122、;b> if(c==8)</b></p><p><b> c=0;</b></p><p> TR1 = 1;//啟動(dòng)定時(shí)器T1</p><p> delay_ms(Temp);</p><p><b> }</b></p><p><
123、;b> }</b></p><p><b> }</b></p><p> void sound(uchar a)//按鍵發(fā)聲子程序</p><p><b> {</b></p><p><b> switch(a)</b></p&
124、gt;<p><b> {</b></p><p> case 0x7f: num=14;P1=table[0]; break;</p><p> case 0xbf: num=15;P1=table[1]; break;</p><p> case 0xdf: num=16;P1=table[2]; break;<
125、/p><p> case 0xef: num=17;P1=table[3]; break;</p><p> case 0xf7: num=18;P1=table[4]; break;</p><p> case 0xfb: num=19;P1=table[5]; break;</p><p> case 0xfd: num=20;P1=
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子琴課程設(shè)計(jì)--基于單片機(jī)的電子琴設(shè)計(jì)
- 電子琴課程設(shè)計(jì)-- 基于單片機(jī)的電子琴設(shè)計(jì)
- 基于單片機(jī)的電子琴課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告--電子琴
- 基于單片機(jī)的電子琴課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)—基于單片機(jī)的電子琴
- 基于單片機(jī)的電子琴課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---基于單片機(jī)的電子琴設(shè)計(jì)
- 基于單片機(jī)的電子琴課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---電子琴
- 單片機(jī)課程設(shè)計(jì)(電子琴)
- 單片機(jī)課程設(shè)計(jì)-電子琴
- 單片機(jī)課程設(shè)計(jì)——電子琴
- 單片機(jī)原理課程設(shè)計(jì)報(bào)告--電子琴
- 基于單片機(jī)的電子琴設(shè)計(jì)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---電子琴設(shè)計(jì)
- 單片機(jī)簡(jiǎn)易電子琴單片機(jī)課程設(shè)計(jì)
- 單片機(jī)電子琴課程設(shè)計(jì)--基于單片機(jī)的可存儲(chǔ)式電子琴設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---電子琴設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告---簡(jiǎn)單電子琴設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論