版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 《微機原理與單片機接口技術(shù)》</p><p><b> 課程設(shè)計報告</b></p><p><b> 題目:電子琴</b></p><p> 姓 名: </p><p> 學(xué) 號: &
2、lt;/p><p> 專業(yè)班級: </p><p> 指導(dǎo)老師: </p><p> 所在學(xué)院:電氣工程與自動化學(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è)計思路5</p><p> 第二章 系
4、統(tǒng)總體方案及硬件設(shè)計6</p><p> 2.1設(shè)計任務(wù)與主要內(nèi)容分析6</p><p> 2.2系統(tǒng)的硬件設(shè)計6</p><p><b> 2.3最小系統(tǒng)6</b></p><p><b> 2.4復(fù)位電路7</b></p><p> 2.5 顯示單元設(shè)
5、計原理7</p><p> 2.6蜂鳴器電路9</p><p><b> 2.7鍵盤電路9</b></p><p> 第三章 系統(tǒng)軟件設(shè)計10</p><p> 3.1軟件的結(jié)構(gòu)圖10</p><p> 3.2程序流程圖11</p><p> 3.
6、3音階的實現(xiàn)與初值計算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è)計是用AT89C52單片機為核心控制元件,設(shè)計一個模擬電子琴發(fā)聲控制系統(tǒng)。以單片機作為主控核心,與鍵盤、
8、揚聲器、LED顯示器等模塊組成核心主控制模塊。在主控模塊上設(shè)有11個按鍵,其中7個按鍵控制7個音符,1個作為播放示例樂曲使用,具有手動隨意彈奏和自動播放樂曲的功能,另外3個按鍵用來實現(xiàn)高、中、低音的音符發(fā)音。下面具體介紹一下單片機各端口的分配功能:單片機的P2.0-P2.6為輸入端口,用來控制7個音符的選擇彈奏;P2.7為功能轉(zhuǎn)換鍵,它能切換手動隨意彈奏和自動播放樂曲的功能;P2.0-P2.2為單片機控制電子琴實現(xiàn)彈奏高、中、低的功能切
9、換鍵;P0端口通過上拉電阻接到+5V上,然后接LED共陰數(shù)碼管;P1.0為單片機的輸出端口,它通過限流電阻R與三極管級基極相接,三極管的集電極接有接蜂鳴器。 </p><p> 本設(shè)計通過控制單片機定時器的定時時間產(chǎn)生不同頻率的音頻脈沖,經(jīng)三極管放大信號后驅(qū)動蜂鳴器發(fā)出不同音節(jié)的聲音。要實現(xiàn)7個音符的各自的高、中、低音,需要建立三個表,分別存儲高音、中音和低音的頻率值;當(dāng)三個撥碼
10、開關(guān)中某一個按下,通過軟件選擇相應(yīng)的音頻。按下彈奏鍵就可彈奏出不同的聲音。</p><p> 另外用軟件延時來控制發(fā)音時間的長短,來控制節(jié)拍。通過把樂譜中的音符和相應(yīng)的節(jié)拍變換為定時常數(shù)和延時常數(shù),作為數(shù)據(jù)表格存放在存儲器中。由程序查表得到定時常數(shù)和延時常數(shù),分別用來控制定時器產(chǎn)生的脈沖頻率和發(fā)出該音頻脈沖的持續(xù)時間,這樣就可以實現(xiàn)樂曲的演奏。</p><p> 為了實現(xiàn)按鍵的準(zhǔn)確判斷
11、和完善電子琴發(fā)聲的效果,本設(shè)計采用了軟件防抖的方法,有效的解決了按鍵抖動的問題。另外當(dāng)按下功能切換樂曲播放鍵,本系統(tǒng)能實現(xiàn)自動播放一首樂曲,另附帶數(shù)碼管顯示提醒。這樣使得電子琴的功能變的更加強大。</p><p> 本系統(tǒng)運行穩(wěn)定,其優(yōu)點是硬件電路簡單,軟件功能完善,控制系統(tǒng)可靠,性價比較高等,具有一定的實用和參考價值。</p><p><b> 第一章 引言</b&
12、gt;</p><p> 1.1 電子琴系統(tǒng)概述</p><p> 本設(shè)計是基于AT89C52單片機的簡易電子琴設(shè)計。主要組成是以51單片機最小系統(tǒng)為核心,通過鍵盤獲取按鍵信息,通過運用單片機定時器等部件實現(xiàn)蜂鳴器發(fā)聲同時用數(shù)碼管同步顯示。本系統(tǒng)具有播放歌曲及選取按鍵輸入高、中、低音的功能。本設(shè)計的特點是:大部分功能通過軟件實現(xiàn),使電路簡單明了,系統(tǒng)穩(wěn)定性好。</p>
13、<p> 電子琴是電子科技與音樂結(jié)合的產(chǎn)物是一種新型的鍵盤樂器。一首音樂是許多不同的音階組成的,而每個音階對應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂了,當(dāng)然對于單片機來產(chǎn)生不同的頻率非常方便,我們可以利用單片機的定時/計數(shù)器T0來產(chǎn)生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應(yīng)頻率關(guān)系弄正確即可。</p><p> 單片微型計算機是大規(guī)模集成電路技術(shù)發(fā)展的
14、產(chǎn)物,屬第四代電子計算機,它具有高性能、高速度、體積小、價格低廉、穩(wěn)定可靠、應(yīng)用廣泛的特點。它的應(yīng)用必定導(dǎo)致傳統(tǒng)的控制技術(shù)從根本上發(fā)生變革。因此,單片機的開發(fā)應(yīng)用已成為高科技和工程領(lǐng)域的一項重大課題。 它在現(xiàn)代音樂扮演著重要的角色,單片機具有強大的控制功能和靈活的編程實現(xiàn)特性,它已經(jīng)溶入現(xiàn)代人們的生活中,成為不可替代的一部分。本文的主要內(nèi)容是用AT89C52單片機為核心控制元件,設(shè)計一個電子琴。以單片機作為主控核心,與鍵盤、揚聲器
15、等模塊組成核心主控制模塊,在主控模塊上設(shè)有11個按鍵和揚聲器。 本文主要對使用單片機設(shè)計簡易電子琴進(jìn)行了分析,并介紹了基于單片機電子琴統(tǒng)硬件組成。利用單片機產(chǎn)生不同頻率來獲得我們要求的音階,最終可隨意彈奏想要表達(dá)的音樂。并且本文分別從原理圖,主要芯片,各模塊原理及各模塊的程序的調(diào)試來詳細(xì)闡述。本系統(tǒng)是簡易電子琴的設(shè)計,按下鍵盤矩陣中的按鍵會使揚聲器播放對應(yīng)的音符。</p><p><b> 1
16、.2 設(shè)計思路</b></p><p> 從系統(tǒng)實現(xiàn)的功能上來看,電子琴的設(shè)計主要分為手動彈奏樂曲和自動播放音樂兩大部分組成。手動彈奏樂曲是根據(jù)具體的硬件鍵盤設(shè)置了7個音符按鍵,3個高、中、低音模式切換鍵和1個功能轉(zhuǎn)換鍵,自動播放音樂是在單片機的存儲器中通過軟件編程的方法放置音樂代碼和相關(guān)播放程序來實現(xiàn)。</p><p> 從系統(tǒng)硬件結(jié)構(gòu)上來看,主要使用到52系列單片機、7
17、個鍵輸入電路、LED數(shù)碼管顯示電路、揚聲器以及電源電路等等。將這些硬件電路有機地結(jié)合起來使之滿足電子琴設(shè)計的基本硬件要求。</p><p> 從系統(tǒng)軟件設(shè)計角度來看,將電子琴的設(shè)計采用程序模塊化設(shè)計方法,將程序分為主程序、鍵盤掃描程序模塊、數(shù)碼顯示模塊、轉(zhuǎn)換控制模塊、音樂產(chǎn)生模塊等等。此外,采用程序設(shè)計思想,將中斷定時方式與外部按鍵查詢方式相結(jié)合,實現(xiàn)手動彈奏樂曲到自動播放音樂的切換。</p>&
18、lt;p> 從音樂產(chǎn)生原理方面來看,通過控制單片機的定時器的定時時間產(chǎn)生不同頻率的音頻脈沖,經(jīng)放大后驅(qū)動揚聲器發(fā)出不同音樂的聲音。用軟件延時來控制發(fā)音時間的長短,控制節(jié)拍。把音樂的音符和相應(yīng)的節(jié)拍變換為定時常數(shù)和延時常數(shù),作為數(shù)據(jù)表格存放在程序存儲器中,由程序查表得到定時常數(shù)和延時常數(shù),分別用來控制定時器產(chǎn)生的脈沖頻率和發(fā)出音頻脈沖的持續(xù)時間。</p><p> 第二章 系統(tǒng)總體方案及硬件設(shè)計<
19、/p><p> 2.1設(shè)計任務(wù)與主要內(nèi)容分析</p><p> 本次課程設(shè)計的課題所要達(dá)到的要求如下:</p><p> 利用蜂鳴器作為發(fā)聲部件。</p><p> 兩個數(shù)碼管顯示所按下鍵值。</p><p> 設(shè)置10個按鍵,實現(xiàn)高音、中音、低音的1、2、3、4、5、6、7發(fā)音。</p><
20、p> 存儲一首歌曲的內(nèi)容,可以實現(xiàn)自動循環(huán)播放。</p><p> 實現(xiàn)功能轉(zhuǎn)換(播放模式和彈奏模式的轉(zhuǎn)換)</p><p> 本次設(shè)計主要是要通過軟硬件的配合實現(xiàn)電子琴的上述功能,操作人員可以通過按下鍵盤上任意一個鍵來發(fā)出相應(yīng)的音符。</p><p> AT89C52具有高速度、低電壓、低功耗、且可靠性和成本都比較低的特點。因此本次課程設(shè)計采用AT8
21、9C52單片機作為整個電路核心控制器件。對于本交通控制系統(tǒng)使用一片AT89C52系列的單片機,不需要外擴(kuò)展存儲器,就能實現(xiàn)顯示、預(yù)制狀態(tài)、動態(tài)調(diào)節(jié)的功能,因而整體結(jié)構(gòu)簡單。</p><p> 設(shè)計電路時運用89C52系列單片機的接口來實現(xiàn)各種輸入、輸出功能。P1.待定部分0口用來作輸出口,向發(fā)聲電路輸出信號;P2口和P0口共同實現(xiàn)一個矩陣鍵盤的功能。同時設(shè)計了一個直流穩(wěn)壓電路增加電路的適應(yīng)性,增加了電路的適用性
22、,使整個系統(tǒng)更加緊湊,工作十分穩(wěn)定。</p><p> 2.2系統(tǒng)的硬件設(shè)計</p><p><b> 2.3最小系統(tǒng)</b></p><p> 最小系統(tǒng)包括晶體振蕩電路、復(fù)位開關(guān)和電源部分。圖為AT89C52的最小系統(tǒng)電路圖。</p><p> 晶振電路 89C52系列單片機片內(nèi)有一個高增益的反向放大器其輸入
23、引腳為XTAL1輸出引腳為XTAL2用于外接石英振蕩器和微調(diào)電容,構(gòu)成自激振蕩器。如右圖所示。</p><p><b> 2.4復(fù)位電路</b></p><p> 復(fù)位是通過給RST引腳持續(xù)周期的低電平實現(xiàn)的。一般為上電復(fù)位和手動復(fù)位。上電自動復(fù)位是通過外部復(fù)位電路的電容充電來實現(xiàn)的。一般選取晶振為12MHZ時選取電容為20PF。手動復(fù)位通過手動持續(xù)按復(fù)位按鍵個周
24、期來實現(xiàn)的。</p><p> 2.5 顯示單元設(shè)計原理</p><p> 共陰極LED數(shù)碼管的內(nèi)部結(jié)構(gòu)原理圖</p><p> 數(shù)碼管動態(tài)顯示介面是單片機中應(yīng)用最為廣泛的一種顯示方式之一,動態(tài)驅(qū)動是將所有數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp "的同名端連在一起,另外為每個數(shù)碼管的公共極COM增加位選通控制電路,位選通由各
25、自獨立的I/O線控制,當(dāng)單片機輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但究竟是那個數(shù)碼管會顯示出字形,取決于單片機對位元選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。</p><p> 本設(shè)計中,例如當(dāng)高音鍵被按下時,會產(chǎn)生“yin=12,m=2”兩個值(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,對應(yīng)“共陰極數(shù)碼管顯示字段”表,顯然為“H”,這樣便得到了我們想要的顯示效果</p><p><b> 2.6蜂鳴器電路</b></p><p> 當(dāng)驅(qū)動蜂鳴器
29、的P2.2口有一定頻率的脈沖輸出時,蜂鳴器就能發(fā)出聲音。通過控制P2.2發(fā)出脈沖的頻率能夠控制蜂鳴器發(fā)出聲音的音調(diào),進(jìn)而能發(fā)出美妙的音樂。蜂鳴器無法由P2.2口直接驅(qū)動,故在設(shè)計時添加了一個三極管放大器強化驅(qū)動能力。</p><p><b> 2.7鍵盤電路</b></p><p> 鍵盤電路作為電子琴系統(tǒng)中最重要的輸入設(shè)備,在系統(tǒng)中承擔(dān)著把操作人員想要輸入的信號
30、輸入單片機的重要作用。鍵盤有獨立鍵盤和矩陣鍵盤。由于設(shè)計要求簡單和編程方便,本設(shè)計采用獨立按鍵。根據(jù)設(shè)計要求,本設(shè)計使用11個獨立按鍵,電路功能分配與下:</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è)計</p><p><b> 3.1軟件的結(jié)構(gòu)圖</b></p><p> 硬件設(shè)計的任務(wù)是根據(jù)總體設(shè)計要求,在選擇的機型的基礎(chǔ)上,具有確定系統(tǒng)中所要使用的元器件,設(shè)計出系統(tǒng)的原理框圖、電路原理圖。</p><p> 該設(shè)計要實現(xiàn)一種有單片機控制的電子琴,單片機工作于12MHZ
33、時鐘頻率,使用其定時/計數(shù)器T0,工作模式為1,改變計數(shù)值TH0和TL0可以產(chǎn)生不同頻率的脈沖信號.該設(shè)計具有11個音節(jié)鍵盤,用戶可以根據(jù)樂譜在鍵盤上進(jìn)行演奏,音樂發(fā)生器會根據(jù)用戶的彈奏,通過揚聲器將音樂播放出來,本設(shè)計可以實現(xiàn)用戶自由彈奏音樂。用單片機產(chǎn)生的音頻脈沖直接驅(qū)動揚聲器并不能產(chǎn)生所要實現(xiàn)的音樂,因為它沒有足夠的驅(qū)動能力,這就需要音頻功率放大器,本設(shè)計采用三極管就可以實現(xiàn)信號放大功能。</p><p>
34、<b> 3.2程序流程圖</b></p><p> 3.3音階的實現(xiàn)與初值計算</p><p> 利用AT89C52的內(nèi)部定時器使其工作計數(shù)器模式(MODE1)下,改變計數(shù)值TH0及TL0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階,例如,頻率為523Hz,其周期T=1/523=1912μs,因此只要令計數(shù)器計956μs/1μs=956,每計數(shù)956次時將I/O反相,就可
35、得到中音DO(523Hz)。計數(shù)脈沖值與頻率的關(guān)系式是:N=fi÷2÷fr ,式中N是計數(shù)值;fi是機器頻率(晶體振蕩器為12MHz時,其頻率為1MHz);fr是想要產(chǎn)生的頻率。其計數(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)的計數(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> 初始化程序的主要作用是定義一些變量的初值以及對中斷、定時器的初始化。在初始化程序中對變量賦初值,并要對中斷進(jìn)行設(shè)置,也要對定時器進(jìn)行設(shè)置。根據(jù)這
38、個思路,初始化程序如下</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;//開定時器0中斷</p><p> ET
40、1=1;//開定時器1中斷</p><p> TMOD=0x11;//定時器0,1工作在定時狀態(tài),均為方式1,16位模式</p><p><b> }</b></p><p><b> 3.5鍵盤消抖</b></p><p> 鍵盤是人與單片機通信的重要接口。合適的鍵盤掃描程序能使單片機準(zhǔn)確
41、的運行。同時我們在設(shè)計按鍵時注意了按鍵的消抖現(xiàn)象。</p><p> 去抖動:每個按鍵在按下或松開時,都會產(chǎn)生短時間的抖動。抖動的持續(xù)時間與鍵的質(zhì)量相關(guān),一般為5—20ms。所謂抖動是指在識別被按鍵是必須避開抖動狀態(tài),只有處在穩(wěn)定接通或穩(wěn)定斷開狀態(tài)才能保證識別正確無誤。去抖問題可通過軟件延時或硬件電路解決。</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);”便有效的去抖動!</p><p><b> 3.6顯示程序</b>&l
44、t;/p><p> 本設(shè)計采用的共陰極數(shù)碼管作為數(shù)據(jù)顯示。采用的數(shù)碼管動態(tài)顯示,可以節(jié)約單片機的I/O口,為以后的擴(kuò)展做準(zhǔn)備。</p><p><b> 3.7發(fā)聲程序</b></p><p> 在完成了鍵盤服務(wù)子程序后,我們就知道了具體是哪一個鍵被按下了,下一步就是要讓喇叭發(fā)出這個按鍵所特有的音符。我們知道,每個音符之所以不同是因為它們都有
45、各自不同的頻率,而我們正好可以利用89S52中的定時器來產(chǎn)生不同的頻率以達(dá)到這個目的。我們只要對定時器T1的初值進(jìn)行合理的設(shè)置就可完成這個工作,我們根據(jù)電子琴的音符頻率表來為定時器賦初值。主要是根據(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]; //對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)做完電子琴的時候內(nèi)心無比欣喜,確實深深感受到學(xué)習(xí)單片機要動手做才能有所收獲,不然根本學(xué)不會,雖然各功能都已實現(xiàn)但發(fā)現(xiàn)還是有很多不足之處,比如:1.發(fā)音不準(zhǔn)2.所彈奏音樂并不“美妙”3.設(shè)計顯得不夠靈活,太呆板了(就只能發(fā)音,然后彈) 4.可彈奏的音符數(shù)較少,只能在一定
52、范圍內(nèi)滿足用戶需要??赏ㄟ^改進(jìn)鍵盤識別模塊和發(fā)生模塊來增加其復(fù)雜度。5.音量不可調(diào)等等,也許這是51單片機功能自身所限,但是我們自身的不足還是很明顯的,設(shè)計有待改進(jìn)之處很多。</p><p> 通過本次設(shè)計實驗,使我對所學(xué)51系列的單片機從理論知識到實踐硬件的應(yīng)用以及C語言及匯編語言知識的回顧,更加熟悉了89C51單片機的每一個引腳的輸出和各項功能,而且對硬件電路的布線以及焊接能力有了很大的進(jìn)步。我們的綜合設(shè)計
53、主要涉及硬件和軟件兩方面的內(nèi)容,通過這些我們的硬件和軟件開發(fā)能力都獲得了提高。首先硬件方面,基本了解了電子產(chǎn)品的開發(fā)流程和所要做的工作;基本掌握了Proteus繪制原理圖的方法,并設(shè)計了一個單片機最小系統(tǒng)。通過開發(fā)板的設(shè)計和硬件搭建的過程,使我們對51系單片機的接口有了更深層次的理解,熟悉了一些單片機常用的外圍電路引腳和連接方法,如LED數(shù)碼管,鍵盤等。并且我們學(xué)會了分析問題解決問題的能力,加深了對所學(xué)理論知識的理解和運用。我們的動手能
54、力得到了很大的提高,創(chuàng)新意識得到了鍛煉。</p><p><b> 參考文獻(xiàn)</b></p><p> 【1】譚浩強,C程序設(shè)計,清華大學(xué)出版社2005</p><p> 【2】范紅剛,51單片機自學(xué)筆記,北京航空航天大學(xué)出版社</p><p> 【3】閻石,數(shù)字電子技術(shù)基礎(chǔ),高等教育出版社</p>
55、<p> 【4】李朝青,單片機原理及接口技術(shù),北京航空航天大學(xué)出版社</p><p> 【5】雷麗文 等,微機原理與接口技術(shù)[M].北京,電子工業(yè)出版社</p><p> 【6】李華,MCS-51系列單片機實用接口技術(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;//定時器0,1工作在定時狀態(tài),均為方式1,16位模式</p><p><b> }</b></p><p> //******數(shù)碼管動態(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);//延時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);//延時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> //******定時器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> //******定時器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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計--電子琴
- 電子琴課程設(shè)計
- 電子琴課程設(shè)計---電子琴的設(shè)計與實現(xiàn)
- 微機課程設(shè)計電子琴
- 接口課程設(shè)計電子琴
- 簡易電子琴課程設(shè)計
- 簡易電子琴課程設(shè)計
- 簡易電子琴課程設(shè)計
- 電子琴課程設(shè)計報告
- 電子琴的課程設(shè)計
- 電子琴課程設(shè)計論文
- 電子琴課程設(shè)計--基于單片機的電子琴設(shè)計
- 電子琴的設(shè)計 課程設(shè)計
- 電子琴課程設(shè)計--基于單片機的電子琴設(shè)計
- 電子琴課程設(shè)計-- 基于單片機的電子琴設(shè)計
- eda課程設(shè)計---自動電子琴
- 數(shù)電課程設(shè)計---電子琴
- 課程設(shè)計報告--- 簡易電子琴
- 簡易電子琴課程設(shè)計 (2)
- 微機原理課程設(shè)計----電子琴
評論
0/150
提交評論