版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 通信工程學(xué)院</b></p><p> 課程設(shè)計(jì)說明書(論文)</p><p> 題 目 帶存儲播放功能的簡易電子琴設(shè)計(jì) </p><p> 課 程 名 稱 單片機(jī)原理及應(yīng)用 B </p><p> 專 業(yè) 通信工程 &l
2、t;/p><p> 班 級 </p><p><b> 1.前言3</b></p><p> 1.1. 課題背景3</p><p> 1.2. 電子琴系統(tǒng)設(shè)計(jì)的意義3</p><p> 1.3. 簡易電子琴功能概述4</p>
3、<p> 2. 系統(tǒng)總體設(shè)計(jì)方案4</p><p> 2.1. 系統(tǒng)的組成4</p><p> 2.2. 工作原理5</p><p> 3. 硬件電路設(shè)計(jì)5</p><p> 3.1. 總體設(shè)計(jì)軟件模型5</p><p> 3.2. AT89C51單片機(jī)相關(guān)介紹6</p>
4、;<p> 3.2.1. AT89C51簡介6</p><p> 3.2.2. AT89C51管腳說明7</p><p> 3.2.3. 芯片擦除8</p><p> 3.3. 矩陣式鍵盤的識別和顯示9</p><p> 3.3.1. 矩陣式鍵盤的結(jié)構(gòu)與工作原理9</p><p>
5、3.3.2. 矩陣式鍵盤的按鍵識別方法9</p><p> 3.3.3. 鍵盤接口必須具有的4個(gè)基本功能11</p><p> 3.4. 按鍵顯示模塊12</p><p> 3.4.1. 數(shù)碼管的分類12</p><p> 3.4.2. 數(shù)碼管的驅(qū)動(dòng)方式12</p><p> 3.5. 功能顯示燈模
6、塊13</p><p> 3.6. 音樂播放裝置14</p><p> 4. 軟件電路設(shè)計(jì)17</p><p> 4.1. 系統(tǒng)整體程序處理流程圖17</p><p> 4.2. I/O并行口直接驅(qū)動(dòng)LED顯示19</p><p> 4.3. 音樂播放設(shè)計(jì)19</p><p&g
7、t; 4.4. 放歌子程序20</p><p> 5. 系統(tǒng)調(diào)試21</p><p> 5.1. 系統(tǒng)運(yùn)行環(huán)境21</p><p> 5.2. 系統(tǒng)安裝及配置21</p><p> 6. 設(shè)計(jì)總結(jié)22</p><p><b> 參考文獻(xiàn)22</b></p>&
8、lt;p><b> 附錄23</b></p><p><b> 1.前言</b></p><p><b> 課題背景</b></p><p> 隨著社會(huì)的發(fā)展進(jìn)步,音樂逐漸成為我們生活中很重要的一部分,有人曾說喜歡音樂的人不會(huì)向惡。我們都會(huì)抽空欣賞世界名曲,作為對精神的洗禮。本論文設(shè)計(jì)
9、一個(gè)基于單片機(jī)的簡易電子琴。電子琴是現(xiàn)代電子科技與音樂結(jié)合的產(chǎn)物,是一種新型的鍵盤樂器。它在現(xiàn)代音樂扮演著重要的角色,單片機(jī)具有強(qiáng)大的控制功能和靈活的編程實(shí)現(xiàn)特性,它已經(jīng)溶入現(xiàn)代人們的生活中,成為不可替代的一部分。電子科技也在不斷的前進(jìn),電子技術(shù)正在以不同的方式改變著我們的生活,本系統(tǒng)的電子琴設(shè)計(jì)也是希望給人們帶來一些生活的樂趣。本系統(tǒng)可以應(yīng)用在很多方面,比如一些簡易的玩具上或手機(jī)上。單片機(jī)技術(shù)使我們可以利用軟硬件實(shí)現(xiàn)電子琴的功能,從而
10、實(shí)現(xiàn)電子琴的微型化,也可以對本系統(tǒng)進(jìn)行一些擴(kuò)展的加入一些其他功能。</p><p> 本系展統(tǒng)的簡易電子琴是現(xiàn)代電子科技與音樂結(jié)合的產(chǎn)物,是一種新型的鍵盤樂器,它在現(xiàn)代音樂扮演著重要的角色。簡單是因?yàn)樾膳c和聲缺乏音量變化,過于協(xié)和、單一;在模仿各類館、弦樂器時(shí),音色還不夠逼真,模仿提琴類樂器的音色時(shí),失真度更大,還需要不斷改進(jìn)。</p><p> 本文的主要內(nèi)容是用AT89C51單片
11、機(jī)為核心控制元件,設(shè)計(jì)一個(gè)電子琴。以單片機(jī)作為主控核心,與鍵盤、揚(yáng)聲器等模塊組成核心主控制模塊,在主控模塊上設(shè)有16個(gè)按鍵和揚(yáng)聲器。</p><p> 本文主要對使用單片機(jī)設(shè)計(jì)簡易電子琴進(jìn)行了分析,并介紹了基于單片機(jī)電子琴統(tǒng)硬件組成。利用單片機(jī)產(chǎn)生不同頻率來獲得我們要求的音階,最終可隨意彈奏想要表達(dá)的音樂。并且本文分別從原理圖,主要芯片,各模塊原理及各模塊的程序的調(diào)試來詳細(xì)闡述。</p><
12、p> 電子琴系統(tǒng)設(shè)計(jì)的意義</p><p> 單片微型計(jì)算機(jī)是大規(guī)模集成電路技術(shù)發(fā)展的產(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)重大課題。 </p><p> 電子琴是現(xiàn)代電子科技與音樂結(jié)合的產(chǎn)物,是一種新型的鍵盤樂器。它
13、在現(xiàn)代音樂扮演著重要的角色,單片機(jī)具有強(qiáng)大的控制功能和靈活的編程實(shí)現(xiàn)特性,它已經(jīng)溶入現(xiàn)代人們的生活中,成為不可替代的一部分。本文的主要內(nèi)容是用AT89S51單片機(jī)為核心控制元件,設(shè)計(jì)一個(gè)電子琴。以單片機(jī)作為主控核心,與鍵盤、揚(yáng)聲器等模塊組成核心主控制模塊,在主控模塊上設(shè)有16個(gè)按鍵和揚(yáng)聲器。 </p><p> 本文主要對使用單片機(jī)設(shè)計(jì)簡易電子琴進(jìn)行了分析,并介紹了基于單片機(jī)電子琴統(tǒng)硬件組成。利用單片
14、機(jī)產(chǎn)生不同頻率來獲得我們要求的音階,最終可隨意彈奏想要表達(dá)的音樂。并且本文分別從原理圖,主要芯片,各模塊原理及各模塊的程序的調(diào)試來詳細(xì)闡述。本系統(tǒng)是簡易電子琴的設(shè)計(jì),按下鍵盤矩陣中的按鍵會(huì)使數(shù)碼管顯示當(dāng)前按鍵,揚(yáng)聲器播放器對應(yīng)的音符。本系統(tǒng)電子琴設(shè)計(jì),設(shè)計(jì)簡單,所需器件價(jià)格便宜,總體價(jià)格比較便宜,功能健全,能夠滿足一般消費(fèi)者,或愛好音樂的人的基本需求。因此本系統(tǒng)設(shè)計(jì)既實(shí)用又便宜。對于人們的業(yè)余生活意義較大。單片機(jī)是在一塊芯片內(nèi)集成了計(jì)算
15、機(jī)的各個(gè)功能部件,構(gòu)成一種單片式的微型計(jì)算機(jī)。</p><p> 通過單片機(jī)電子琴這個(gè)選題,更深層次的了解了單片機(jī)技術(shù),以前只是有理論,實(shí)踐的機(jī)會(huì)不是很多,在作單片機(jī)電子琴這個(gè)選題的過程中,更加熟練的掌握了一些單片機(jī)芯片的應(yīng)用,也解決了很多以前理論和實(shí)踐脫節(jié)的問題,可謂對單片機(jī)的認(rèn)識有了一個(gè)小的飛躍。</p><p><b> 目的:</b></p>
16、<p> 掌握單片機(jī)與行列式鍵盤接口電路的工作原理與使用方法</p><p> 掌握單片機(jī)總線擴(kuò)展的基本原理及操作時(shí)序</p><p> 掌握通過C51操作外部擴(kuò)展RAM程序的設(shè)計(jì)方法</p><p> 掌握利用單片機(jī)內(nèi)部定時(shí)器產(chǎn)生不同頻率聲音的方法</p><p> 軟件的介紹(keil Proteus)</p
17、><p> Keil是德國開發(fā)的一個(gè)51單片機(jī)開發(fā)軟件平臺,最開始只是一個(gè)支持C語言和匯編語言的編譯軟件。Keil的μVision3可以進(jìn)行純粹的軟件仿真(仿真軟件程序、不接硬件電路),也可以利用硬件仿真器,搭接上單片機(jī)硬件系統(tǒng),在仿真器中載入項(xiàng)目程序后進(jìn)行實(shí)時(shí)仿真,在不需要額外的硬件仿真器的條件下,搭接單片機(jī)硬件系統(tǒng)對項(xiàng)目程序進(jìn)行實(shí)時(shí)仿真。</p><p> Proteus是英國Labc
18、enter Electronics公司開發(fā)的多功能EDA軟件。Proteus是目前較先進(jìn)的單片機(jī)和嵌入式系統(tǒng)的設(shè)計(jì)與仿真平臺。它實(shí)現(xiàn)了在計(jì)算機(jī)上完成從原理圖與電路設(shè)計(jì)、電路分析與仿真、單片機(jī)代碼級調(diào)試與仿真、系統(tǒng)測試與功能驗(yàn)證到形成PCB的完整的電子設(shè)計(jì)、研發(fā)過程。由于Proteus軟件包逼真、真實(shí)的協(xié)同仿真功能,得到了包括劍橋在內(nèi)的眾多大學(xué)用戶,作為電子學(xué)或嵌入式系統(tǒng)的課程教學(xué)、實(shí)驗(yàn)和水平考試平臺。</p><p&
19、gt; 利用Proteus與Keil整合構(gòu)建單片機(jī)虛擬實(shí)驗(yàn)室,為解決電路設(shè)計(jì)以及仿真提供了很好的發(fā)展平臺。</p><p> 本設(shè)計(jì)是在Keil使用89C51單片機(jī)及單片機(jī)C語言,在Proteus仿真平臺上實(shí)現(xiàn)基于單片機(jī)的簡易電子琴。對于提高和改進(jìn)電子琴功能的設(shè)計(jì)有著重要參考意義。</p><p><b> 簡易電子琴功能概述</b></p>&l
20、t;p> 單片機(jī)因體積小、功能強(qiáng)、價(jià)格低廉而得到廣泛應(yīng)用。AT89C51單片機(jī)設(shè)計(jì)微型電子琴的方法,僅需AT89C51最小系統(tǒng),擴(kuò)展一組矩陣鍵盤,再接一組發(fā)光二極管用來指示電子琴的工作狀態(tài)。</p><p> 本系統(tǒng)分為兩個(gè)部分,一個(gè)是音樂,另一個(gè)就是電子琴。</p><p> 1.單片機(jī)并行連接4*4矩陣鍵盤和一位數(shù)碼管</p><p> 2.利用單
21、片機(jī)內(nèi)部定時(shí)器T0的定時(shí)功能產(chǎn)生音符所對應(yīng)的音調(diào)</p><p> 3.經(jīng)功率放大器后輸出至音箱</p><p> 4.在彈奏音樂的同時(shí)將音符顯示與數(shù)碼管</p><p> 5.具備存儲在播放所彈奏的音樂的功能</p><p><b> 系統(tǒng)總體設(shè)計(jì)方案</b></p><p><b
22、> 系統(tǒng)的組成</b></p><p> 嵌入式電路,按鍵電路,LED顯示電路和三個(gè)功能鍵組成,通過功能鍵可以選擇播放音樂。(按鍵一:是否錄音;按鍵二:是否播放;按鍵三:復(fù)位鍵)</p><p> 該系統(tǒng)通過電子琴按鍵隨意鍵入所要表達(dá)的音符,作為電平送給主體電路,中央處理器通過識別,解碼輸出音符,在揚(yáng)聲器中發(fā)出有效的聲音。通過這樣可以不斷的彈奏音樂。</p&g
23、t;<p><b> 工作原理</b></p><p> 打開電子琴電源開關(guān)后,電子琴默認(rèn)為彈奏狀態(tài)(錄音LED燈亮表示按鍵彈奏錄音,不亮則普通按鍵彈奏功能),彈奏/播放顯示燈點(diǎn)亮。此時(shí)可以進(jìn)行彈奏音樂,按下矩陣鍵盤中的任意鍵,揚(yáng)聲器發(fā)相應(yīng)的音調(diào),數(shù)碼管顯示對應(yīng)的數(shù)字。</p><p> 按下播放按鈕,電子琴處于自動(dòng)播放狀態(tài),彈奏/播放顯示燈不亮,
24、就會(huì)播放剛才彈走過的音樂,并循環(huán)進(jìn)行播放,如果按下錄音按鍵,將錄音燈滅掉,此時(shí)播放的音樂改變,播放電子琴內(nèi)置的音樂,并顯示相應(yīng)音符,循環(huán)播放。</p><p> 此時(shí),如果按下復(fù)位鍵,數(shù)碼管顯示0,清楚錄音,此時(shí)系統(tǒng)又處于彈奏狀態(tài)。</p><p><b> 硬件電路設(shè)計(jì)</b></p><p><b> 總體設(shè)計(jì)軟件模型<
25、;/b></p><p><b> 連線:</b></p><p> P3^7————蜂鳴器</p><p> P2^0————連接LED0(模式指示燈:彈奏--亮,播放--不亮)</p><p> P2^1————連接LED1和獨(dú)立開關(guān)(錄音指示燈:彈奏保存--亮,彈奏不保存--不亮)</p>
26、<p> P3^2————獨(dú)立按鍵,外部中斷控制復(fù)位鍵</p><p> P3^3————獨(dú)立按鍵,外部中斷播放/彈奏切換按鍵</p><p> P1————連接數(shù)碼管顯示</p><p> P0————連接矩陣鍵盤</p><p> 此設(shè)計(jì)模塊實(shí)現(xiàn)的功能有:</p><p> 1.把不同的頻
27、率也就是節(jié)拍的聲音輸入到放大器,播放彈奏的聲音;</p><p> 2.在彈奏音樂的同時(shí)將音符顯示于數(shù)碼管;</p><p> 3.彈奏音樂的時(shí)候要將音符輸入到數(shù)碼管;</p><p> 4.播放內(nèi)置儲存的音樂時(shí)要顯示此時(shí)播放的音樂音符;</p><p> 5.具備存儲在播放所彈奏的音樂的功能;</p><p>
28、; 6.復(fù)位功能,模式復(fù)位、錄音清楚,數(shù)碼管顯示為0。</p><p> AT89C51單片機(jī)相關(guān)介紹</p><p><b> AT89C51簡介</b></p><p> AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Mem
29、ory)的低電壓,高性能CMOS 8位微處理器,俗稱單片機(jī)。AT89C51它是一個(gè)低功耗高性能單片機(jī),40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)端口,同時(shí)內(nèi)含2個(gè)外中斷口,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,AT89C51可以按照常規(guī)方法進(jìn)行編程,也可以在線編程。AT89C51單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。外形及引腳排列如圖3.2所示。</p><p> AT89C
30、51管腳說明</p><p> ·VCC:供電電壓。</p><p> ·P0口:P0口為一個(gè)8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。</p><p> 當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)
31、時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。</p><p> ·P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。 </p><p> ·P2口:P2口為一個(gè)內(nèi)
32、部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)
33、接收高八位地址信號和控制信號。</p><p> ·P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p><p> ·RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間
34、。</p><p> ·ALE/PROG:當(dāng)訪問外部存儲器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時(shí),將跳過一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有
35、在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。</p><p> ·PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個(gè)機(jī)器周期兩次有效。但在訪問外部數(shù)據(jù)存儲器時(shí),這兩次有效的信號將不出現(xiàn)。</p><p> ·EA/VPP:當(dāng)保持低電平時(shí),則在此期間外部程序存儲器(0000H-
36、FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時(shí),將內(nèi)部鎖定為RESET;當(dāng)端保持高電平時(shí),此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p> ·XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。</p><p> ·XTAL2:來自反向振蕩器的輸出。</p><p> 另
37、外,P3口也可作為AT89C51的一些特殊功能口,如下所示。</p><p><b> 口管腳 備選功能</b></p><p> P3.0 RXD(串行輸入口)</p><p> P3.1 TXD(串行輸出口)</p><p> P3.2 /INT0(外部中斷0)</p><p> P
38、3.3 /INT1(外部中斷1)</p><p> P3.4 T0(記時(shí)器0外部輸入)</p><p> P3.5 T1(記時(shí)器1外部輸入)</p><p> P3.6 /WR(外部數(shù)據(jù)存儲器寫選通)</p><p> P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號。</p><p> AT89C51主要特性
39、</p><p> ·與MCS-51 兼容 </p><p> ·4K字節(jié)可編程閃爍存儲器 </p><p> ·壽命:1000寫/擦循環(huán)</p><p> ·數(shù)據(jù)保留時(shí)間:10年</p><p> ·全靜態(tài)工作:0Hz-24MHz</p>&l
40、t;p> ·三級程序存儲器鎖定</p><p> ·128×8位內(nèi)部RAM</p><p> ·32可編程I/O線</p><p> ·兩個(gè)16位定時(shí)器/計(jì)數(shù)器</p><p><b> ·5個(gè)中斷源 </b></p><p&
41、gt;<b> ·可編程串行通道</b></p><p> ·低功耗的閑置和掉電模式</p><p> ·片內(nèi)振蕩器和時(shí)鐘電路</p><p><b> 芯片擦除</b></p><p> 整個(gè)PEROM陣列和三個(gè)鎖定位的電擦除可通過正確的控制信號組合,并保持
42、ALE管腳處于低電平10ms 來完成。在芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲字節(jié)被重復(fù)編程以前,該操作必須被執(zhí)行。</p><p> 此外,AT89C51設(shè)有穩(wěn)態(tài)邏輯,可以在零頻率的條件下靜態(tài)邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM、定時(shí)器、計(jì)數(shù)器、串口和中斷系統(tǒng)仍在工作。在掉電模式下,保存RAM的內(nèi)容并且凍結(jié)振蕩器,禁止所用其他芯片功能,直到下一個(gè)硬件復(fù)位為止。&
43、lt;/p><p> 矩陣式鍵盤的識別和顯示</p><p> 矩陣式鍵盤的結(jié)構(gòu)與工作原理</p><p> 矩陣用法方面,節(jié)省材料。</p><p> 矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復(fù)雜一些,識別也要復(fù)雜一些,本系統(tǒng)中的矩陣鍵盤中,列線通過電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。</
44、p><p> 當(dāng)按鍵沒有按下時(shí),所有的輸出端都是高電平,代表無鍵按下。</p><p> 行線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。</p><p> 矩陣式鍵盤如圖所示。</p><p><b> 矩陣式鍵盤</b></p><p>
45、; 矩陣式鍵盤的按鍵識別方法</p><p><b> 矩陣掃描法:</b></p><p> 行掃描法 ,是一種最常用的按鍵識別方法,如上圖所示鍵盤,介紹過程如下。</p><p> 判斷鍵盤中有無鍵按下。將全部行線置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4
46、個(gè)按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。</p><p> 判斷閉合鍵所在的位置。在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時(shí),其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。</p><p><b> 相關(guān)代碼:
47、</b></p><p> P0 = 0xff;</p><p><b> Line = 1;</b></p><p> Mask = 0x01;</p><p> for(i=0;i<4;i++)</p><p><b> {</b></
48、p><p><b> Col = 0;</b></p><p> P0 = ~Mask;</p><p> ScanCode = P0 & 0xf0;</p><p> if(ScanCode!=0xf0) delay();</p><p> ScanCode = P0 &
49、 0xf0;</p><p> switch(ScanCode)</p><p><b> {</b></p><p> case 0xe0:Col = 1;break;</p><p> case 0xd0:Col = 2;break;</p><p> case 0xb0:Col =
50、 3;break;</p><p> case 0x70:Col = 4;break;</p><p> default:Col = 0;break;</p><p><b> }</b></p><p><b> if(Col>0)</b></p><p>&
51、lt;b> {</b></p><p> num = (Line-1)*4+Col;</p><p> if(SAVE==0) //保存 ,燈亮</p><p><b> {</b></p><p> save[a]=num;</p><p><b> a+
52、+;</b></p><p><b> }</b></p><p> if(num==0)</p><p><b> {</b></p><p><b> TR0=0;</b></p><p> SPK=1; //在未按鍵時(shí),防
53、止長期高電平損壞喇叭</p><p><b> }</b></p><p><b> else </b></p><p><b> {</b></p><p> P1 = CharCode[num-1];</p><p> High=tab[n
54、um-1][0];</p><p> Low =tab[num-1][1];</p><p><b> TR0=1;</b></p><p><b> while(1)</b></p><p><b> {</b></p><p> ScanC
55、ode = P0 & 0xf0;</p><p> if(ScanCode == 0xf0)</p><p><b> { </b></p><p><b> TR0 = 0;</b></p><p><b> SPK=1;</b></p><
56、;p><b> break;</b></p><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p><b> } </b></p>&
57、lt;p> Mask <<=1;</p><p><b> Line ++;</b></p><p><b> }</b></p><p> 鍵盤接口必須具有的4個(gè)基本功能</p><p> 去抖動(dòng):每個(gè)按鍵在按下或松開時(shí),都會(huì)產(chǎn)生短時(shí)間的抖動(dòng)。抖動(dòng)的持續(xù)時(shí)間與鍵的質(zhì)量相
58、關(guān),一般為5—20mm。所謂抖動(dòng)是指在識別被按鍵是必須避開抖動(dòng)狀態(tài),只有處在穩(wěn)定接通或穩(wěn)定斷開狀態(tài)才能保證識別正確無誤。</p><p> 被按鍵識別:如何識別被按鍵是接口解決的主要問題,一般可通過軟硬結(jié)合的方法完成。</p><p> (3)鍵碼產(chǎn)生:為了從鍵的行列坐標(biāo)編碼得到反映鍵功能的鍵碼,一般在內(nèi)存區(qū)中建立一個(gè)鍵盤編碼表,通過查表獲得被按鍵的鍵碼。</p><
59、;p><b> 如下為鍵盤編碼表:</b></p><p> unsigned char code tab[][2]=</p><p><b> { </b></p><p> 0x00,0x00,</p><p> 0xf8,0x8c,</p><p>
60、0xf9,0x5b,</p><p> 0xfa,0x15,</p><p> 0xfa,0x67,</p><p> 0xfb,0x04,</p><p> 0xfb,0x90,</p><p> 0xfc,0x0c,</p><p> 0xfc,0x44,</p>
61、<p> 0xfc,0xac,</p><p> 0xfd,0x09,</p><p> 0xfd,0x34,</p><p> 0xfd,0x82,</p><p> 0xfd,0xc8,</p><p> 0xfe,0x06,</p><p> 0xfe,0x22,&
62、lt;/p><p> 0xfe,0x56,</p><p> 0xfe,0x85,</p><p> 0xfe,0x9a,</p><p> 0xfe,0xc1,</p><p> 0xfe,0xe4,</p><p><b> 0xff,0x03</b></
63、p><p><b> };</b></p><p> 這是個(gè)二維數(shù)組,第一列是高位(THx),第二列是地位(TLx),一共有16行,第一行對應(yīng)休止符。</p><p> 用AT89C51的并行口P0接4×4矩陣鍵盤,以P0.0-P0.3作輸入線,以P0.4-P0.7作輸出線;</p><p> ?。?)在數(shù)碼
64、管上顯示每個(gè)按鍵的“0-F”序號。</p><p><b> 按鍵顯示模塊</b></p><p><b> 數(shù)碼管的分類</b></p><p> 本設(shè)計(jì)用的是七段碼??娠@示0-F。還可以用八段碼。</p><p> 按發(fā)光二極管單元連接方式分為共陽極數(shù)碼管和共陰極數(shù)碼管。</p&g
65、t;<p> 共陽數(shù)碼管:是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數(shù)碼管。共陽數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮。當(dāng)某一字段的陰極為高電平時(shí),相應(yīng)字段就不亮。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管。</p><p> 共陰數(shù)碼管:在應(yīng)用時(shí)應(yīng)將公共極COM接到地線GND上,當(dāng)某一字段發(fā)
66、光二極管的陽極為高電平時(shí),相應(yīng)字段就點(diǎn)亮。當(dāng)某一字段的陽極為低電平時(shí),相應(yīng)字段就不亮。</p><p><b> 數(shù)碼管相關(guān)代碼:</b></p><p> unsigned char code CharCode[]=</p><p><b> {</b></p><p> 0xc0,
67、0xf9, 0xa4,0xb0,0x99, 0x92,0x82,0xf8,</p><p> 0x80, 0x90, 0x88, 0x83, 0xc6,0xa1,0x86,0x8e</p><p><b> };</b></p><p><b> 數(shù)碼管的驅(qū)動(dòng)方式</b></p><p>
68、數(shù)碼管的驅(qū)動(dòng)方式分為:靜態(tài)式和動(dòng)態(tài)式兩類。</p><p> ?、凫o態(tài)顯示驅(qū)動(dòng):靜態(tài)驅(qū)動(dòng)也稱直流驅(qū)動(dòng)。靜態(tài)驅(qū)動(dòng)是指每個(gè)數(shù)碼管的每一個(gè)段碼都由一個(gè)單片機(jī)的I/O端口進(jìn)行驅(qū)動(dòng),或者使用如BCD碼二-十進(jìn)制譯碼器譯碼進(jìn)行驅(qū)動(dòng)。</p><p> 優(yōu)點(diǎn)是:編程簡單,顯示亮度高,缺點(diǎn)是占用I/O端口多。</p><p> ?、趧?dòng)態(tài)顯示驅(qū)動(dòng):動(dòng)態(tài)驅(qū)動(dòng)是將所有數(shù)碼管的8個(gè)顯示筆
69、劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,但究竟是那個(gè)數(shù)碼管會(huì)顯示出字形,取決于單片機(jī)對位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會(huì)亮。通過分時(shí)輪流控制各個(gè)數(shù)碼管的COM端,就使各個(gè)數(shù)碼管輪流受控顯示,
70、這就是動(dòng)態(tài)驅(qū)動(dòng)。</p><p> 在輪流顯示過程中,每位數(shù)碼管的點(diǎn)亮?xí)r間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感,動(dòng)態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。</p><p><b> 顯示模塊如圖所示。</b>
71、</p><p><b> 功能顯示燈模塊</b></p><p> 當(dāng)按下彈奏/播放功能鍵時(shí),LED0燈亮(P2^0)表示彈奏模式,再次按下LED0熄滅表示播放模式;當(dāng)獨(dú)立開關(guān)控制LED1亮?xí)r表示彈奏保存錄音或者播放錄音歌曲,不亮?xí)r則表示彈奏不會(huì)保存錄音或者播放內(nèi)置音樂。</p><p><b> 音樂播放裝置</b&g
72、t;</p><p> 本次設(shè)計(jì)很簡陋,沒有MP3那樣優(yōu)美的音樂,但此次設(shè)計(jì)分成“音調(diào)”和“節(jié)拍”兩部分,聽起來還是不錯(cuò)的。</p><p> 音調(diào):表示一個(gè)音符唱多高的頻率</p><p> 節(jié)拍:表示一個(gè)音符唱多長的時(shí)間。</p><p> 音樂相關(guān)知識與頻率的聯(lián)系:</p><p> 在音樂中常把中央C
73、上方的A音定為標(biāo)準(zhǔn)音高,其頻率f=440Hz。當(dāng)兩個(gè)聲音信號的頻率相差一倍時(shí),也即f2=2f1時(shí),則稱f2比f1高一個(gè)倍頻程, 在音樂中1(do)與,2(來)與……正好相差一個(gè)倍頻程,在音樂學(xué)中稱它相差一個(gè)八度音。在一個(gè)八度音內(nèi),有12個(gè)半音。以1—i八音區(qū)為例, 12個(gè)半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5一#5、#5—6、6—#6、#6—7、7—i。這12個(gè)音階的分度基本上是以對數(shù)關(guān)系來劃分的
74、。如果我們只要知道了這十二個(gè)音符的音高,也就是其基本音調(diào)的頻率,我們就可根據(jù)倍頻程的關(guān)系得到其他音符基本音調(diào)的頻率。</p><p> 知道了一個(gè)音符的頻率后,若要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/頻率),再將此周期除以2,即為半周期的時(shí)間。利用定時(shí)器計(jì)時(shí)半周期時(shí)間,每當(dāng)計(jì)時(shí)終止后就將P3.7反相,然后重復(fù)計(jì)時(shí)再反相。就可在P3.7引腳上得到此頻率的脈沖。為了讓單片機(jī)發(fā)出不同頻率的聲音,我們只需將定時(shí)器
75、預(yù)置不同的定時(shí)值就可實(shí)現(xiàn)。</p><p> 利用AT89C51的內(nèi)部定時(shí)器使其工作計(jì)數(shù)器模式(MODE1)下,改變計(jì)數(shù)值TH0及TL0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階。</p><p> 計(jì)數(shù)脈沖值與頻率的關(guān)系式是:</p><p> N=fi÷2÷fr </p><p>
76、 式中,N是計(jì)數(shù)值;fi是機(jī)器頻率(晶體振蕩器為12MHz時(shí),其頻率為1MHz);fr是想要產(chǎn)生的頻率。</p><p> 其計(jì)數(shù)初值T的求法如下:</p><p> T=65536-N=65536-fi÷2÷fr</p><p> 例如:設(shè)K=65536,fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(104
77、6Hz)的計(jì)數(shù)值。</p><p> T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr</p><p> ?。?5536-500000/fr</p><p> 低音DO的T=65536-500000/262=63628</p><p> 中音DO的T=65536
78、-500000/523=64580</p><p> 高音DO的T=65536-500000/1046=65058</p><p> 單片機(jī)12MHZ晶振,高中低音符與計(jì)數(shù)T0相關(guān)的計(jì)數(shù)值如表2所示。</p><p> 將數(shù)值轉(zhuǎn)換為16進(jìn)制的數(shù),分成高八位和低八位,我們要為這個(gè)音符建立一個(gè)表格,單片機(jī)通過查表的方式來獲得相應(yīng)的數(shù)據(jù)。</p>&l
79、t;p> unsigned char code tab[][2]=</p><p><b> { </b></p><p> 0x00,0x00,</p><p> 0xf8,0x8c,</p><p> 0xf9,0x5b,</p><p> 0xfa,0x15,</p&
80、gt;<p> 0xfa,0x67,</p><p> 0xfb,0x04,</p><p> 0xfb,0x90,</p><p> 0xfc,0x0c,</p><p> 0xfc,0x44,</p><p> 0xfc,0xac,</p><p> 0xfd,0
81、x09,</p><p> 0xfd,0x34,</p><p> 0xfd,0x82,</p><p> 0xfd,0xc8,</p><p> 0xfe,0x06,</p><p> 0xfe,0x22,</p><p> 0xfe,0x56,</p><p&
82、gt; 0xfe,0x85,</p><p> 0xfe,0x9a,</p><p> 0xfe,0xc1,</p><p> 0xfe,0xe4,</p><p><b> 0xff,0x03</b></p><p><b> };</b></p>
83、<p> 音符的節(jié)拍我們可以舉例來說明。在一張樂譜中,我們經(jīng)常會(huì)看到這樣的表達(dá)式,如1=C 、1=G…… 等等,這里1=C,1=G表示樂譜的曲調(diào), 、就是用來表示節(jié)拍的。以為例加以說明,它表示樂譜中以四分音符為節(jié)拍,每一小結(jié)有三拍。比如:</p><p> 其中1 、2 為一拍,3、4、5為一拍,6為一拍,共三拍。1 、2的時(shí)長為四分音符的一半,即為八分音符長,3、4的時(shí)長為八分音符的一半,即為十
84、六分音符長,5的時(shí)長為四分音符的一半,即為八分音符長,6的時(shí)長為四分音符長。一般說來,如果樂曲沒有特殊說明,一拍的時(shí)長大約為400—500ms 。我們以一拍的時(shí)長為400ms為例,則當(dāng)以四分音符為節(jié)拍時(shí),四分音符的時(shí)長就為400ms,八分音符的時(shí)長就為200ms,十六分音符的時(shí)長就為100ms。</p><p> 可見,在單片機(jī)上控制一個(gè)音符唱多長可采用循環(huán)延時(shí)的方法來實(shí)現(xiàn)。首先,我們確定一個(gè)基本時(shí)長的延時(shí)程序
85、,比如說以十六分音符的時(shí)長為基本延時(shí)時(shí)間,那么,對于一個(gè)音符,如果它為十六分音符,則只需調(diào)用一次延時(shí)程序,如果它為八分音符,則只需調(diào)用二次延時(shí)程序,如果它為四分音符,則只需調(diào)用四次延時(shí)程序,依次類推。</p><p> 音樂的音拍,以一個(gè)節(jié)拍為單位(C調(diào)),如表3所示。</p><p> 實(shí)現(xiàn)演奏不同音樂的方法為:</p><p> 將樂譜中的每個(gè)音符的音調(diào)及
86、節(jié)拍變換成相應(yīng)的音調(diào)參數(shù)和節(jié)拍參數(shù),將他們做成數(shù)據(jù)表格,存放在存儲器中,通過程序取出一個(gè)音符的相關(guān)參數(shù),播放該音符,該音符唱完后,接著取出下一個(gè)音符的相關(guān)參數(shù)……,如此直到播放完畢最后一個(gè)音符,根據(jù)需要也可循環(huán)不停地播放整個(gè)樂曲。</p><p> 音樂播放裝置的工作原理:</p><p> 當(dāng)打開電子琴電源后,當(dāng)按下彈奏/播放功能鍵時(shí),LED0燈亮(P2^0)表示彈奏模式,再次按下L
87、ED0熄滅表示播放模式;當(dāng)獨(dú)立開關(guān)控制LED1亮?xí)r表示彈奏保存錄音或者播放錄音歌曲,不亮?xí)r則表示彈奏不會(huì)保存錄音或者播放內(nèi)置音樂。</p><p> [1]晶體振蕩器,產(chǎn)生頻率,在通過定時(shí)器進(jìn)行定時(shí)以產(chǎn)生不同頻率,即發(fā)出不同聲音</p><p> [2]控制按鈕,控制是彈奏還是演唱(P3.3)以及復(fù)位功能(P3.2)</p><p><b> [3]
88、擴(kuò)音器</b></p><p><b> 軟件電路設(shè)計(jì)</b></p><p> 系統(tǒng)整體程序處理流程圖</p><p> 系統(tǒng)整體程序處理流程圖4.1所示。</p><p> 圖4.1 整體程序處理流程圖</p><p> 在電子琴開始工作時(shí),系統(tǒng)默認(rèn)電子琴處于彈奏狀態(tài),當(dāng)
89、按下彈奏/播放功能鍵時(shí),LED0燈亮(P2^0)表示彈奏模式,再次按下LED0熄滅表示播放模式;當(dāng)獨(dú)立開關(guān)控制LED1亮?xí)r表示彈奏保存錄音或者播放錄音歌曲,不亮?xí)r則表示彈奏不會(huì)保存錄音或者播放內(nèi)置音樂。</p><p> 本設(shè)計(jì)存儲了二首音樂,可循環(huán)播放.(小星星和歡樂頌)</p><p> I/O并行口直接驅(qū)動(dòng)LED顯示</p><p><b>
90、對應(yīng)鍵值的顯示:</b></p><p> 在本設(shè)計(jì)中,數(shù)碼管的顯示通過 </p><p> P1=DSY_CODE[x]</p><p> 這句語言來查表并輸出,實(shí)現(xiàn)音符的顯示。</p><p><b> 音樂播放設(shè)計(jì)</b></p><p> 在音樂播放程序中用到了兩個(gè)定
91、時(shí)/計(jì)數(shù)器。其中T0用來產(chǎn)生音調(diào),播放彈奏是的按鍵音調(diào)聲音,T1用來播放音樂。</p><p> 音樂播放流程圖如圖所示。</p><p> 彈奏時(shí)根據(jù)不同的鍵值,調(diào)用不同的音符表中的值,并賦值給定時(shí)器以便產(chǎn)生不同的聲音。下圖為演奏發(fā)聲的流程圖:</p><p><b> 放歌子程序</b></p><p> 放
92、歌子程序設(shè)計(jì)類似于音樂播放,將每個(gè)音調(diào)循環(huán)播放出來。</p><p> if(MODE==1)//播放模式 ,燈不亮</p><p><b> {</b></p><p> if(SAVE==1)//保存燈不亮,播放內(nèi)置音樂</p><p><b> {</b></p>&
93、lt;p><b> SPK = 1;</b></p><p> //P1 = CharCode[Song[Tone_Index]];</p><p> dis = Song[Tone_Index]; </p><p> High = tab[Song[Tone_Index]][0];</p><p>
94、Low = tab[Song[Tone_Index]][1];</p><p><b> TR1 = 1;</b></p><p> delay1((6000*Pai[Tone_Index]));//取音節(jié)</p><p><b> TR1 = 0;</b></p><p><b&
95、gt; SPK=1;</b></p><p> //if(((Tone_Index+1)%7)==0)</p><p> delay1(1000);</p><p> //else delay1(400);</p><p> Tone_Index++;</p><p> if(Tone_Inde
96、x==sizeof(Song)) </p><p> Tone_Index =0;</p><p><b> }</b></p><p> if(SAVE==0)//保存燈亮,播放錄制的音樂</p><p><b> {</b></p><p> Tone_In
97、dex =0;</p><p> SPK = 1;</p><p> for(j=0;j<a;j++)</p><p><b> {</b></p><p> //P1 = CharCode[save[j]-1];</p><p> dis = save[j]-1;</
98、p><p> High = tab[save[j]-1][0];</p><p> Low = tab[save[j]-1][1];</p><p><b> TR1 = 1;</b></p><p> delay1(6000);//取音節(jié)</p><p><b> TR1 = 0
99、;</b></p><p><b> SPK=1;</b></p><p> delay1(1000);</p><p> if(MODE!=1&&a==0)break;</p><p><b> }</b></p><p><
100、b> }</b></p><p><b> }</b></p><p><b> 系統(tǒng)調(diào)試</b></p><p><b> 系統(tǒng)運(yùn)行環(huán)境</b></p><p> Windows XP環(huán)境下安裝</p><p> prot
101、eus (Proteus 7 Professional\BIN\ISIS.EXE)</p><p> keil u V3(Keil\UV3\Uv3.exe).</p><p><b> 單片機(jī)硬件</b></p><p> 課程設(shè)計(jì)要保證良好的情況下要先在軟件proteus下仿真,最后再進(jìn)行移植到硬件上進(jìn)行實(shí)踐。</p>
102、<p><b> 系統(tǒng)安裝及配置</b></p><p> ·步驟一:安裝Proteus軟件。</p><p> ·步驟二:安裝Keil軟件。</p><p> ·步驟三:Keil和Proteus的配置</p><p> 為了讓系統(tǒng)運(yùn)行起來,我們需要做一些配置工作,具體工
103、作如下:</p><p> (1)首先啟動(dòng)Proteus,打開要仿真的工程文件,然后配置Proteus軟件,選擇“Debug”→“Use Remote Debug Monitor”。</p><p> ?。?)調(diào)出編輯AT89C51屬性的對話框,將其程序文件設(shè)置為空。</p><p> ?。?)Keil uV4的設(shè)定,首先啟動(dòng)Proteus仿真項(xiàng)目對應(yīng)的Keil中
104、的工程。</p><p> (4)在工程工作區(qū)選中“Target1”,并右擊選中“Options for Target ‘Target1’”。選中“Output”中“Creat HEX Fi”和“Debug”中“Use Remote Debug Monitor”。</p><p> 在硬件上進(jìn)行仿真調(diào)試,達(dá)到自已預(yù)期效果。</p><p><b>
105、設(shè)計(jì)總結(jié)</b></p><p> 調(diào)試成功后,可任意彈奏自己想要的旋律。本研究通過制作電子琴,將幾個(gè)模塊很好的融合起來,對使用單片機(jī)設(shè)計(jì)簡易電子琴進(jìn)行了分析,并介紹了基于單片機(jī)電子琴統(tǒng)硬件組成。利用單片機(jī)產(chǎn)生不同頻率來獲得我們要求的音階,最終可隨意彈奏想要表達(dá)的音樂。說明一首音樂是許多不同的音階組成的,而每個(gè)音階對應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂了,于是
106、我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來產(chǎn)生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應(yīng)頻率關(guān)系弄正確即可,然后我們利用功放電路來將音樂聲音放大,同時(shí)通過顯示模塊來確知自己所彈的音符。</p><p><b> 功能列表:</b></p><p> 1.把不同的頻率也就是節(jié)拍的聲音輸入到放大器,播放彈奏的聲音;</p><p> 2
107、.在彈奏音樂的同時(shí)將音符顯示于數(shù)碼管;</p><p> 3.彈奏音樂的時(shí)候要將音符輸入到數(shù)碼管;</p><p> 4.播放內(nèi)置儲存的音樂時(shí)要顯示此時(shí)播放的音樂音符;</p><p> 5.具備存儲在播放所彈奏的音樂的功能;</p><p> 6.復(fù)位功能,模式復(fù)位、錄音清楚,數(shù)碼管顯示為0。</p><p>
108、; 通過這次畢業(yè)設(shè)計(jì),我弄懂了不少課本上的知識,還擴(kuò)展了一些課本沒有的知識,再通過隊(duì)友的合作與交流,很好的完成了這次課程設(shè)計(jì)。 </p><p> 首先在課程設(shè)計(jì)剛開始的調(diào)研階段,我學(xué)會(huì)了怎么通過各種方式查詢相關(guān)的資料。通過對這些資料的學(xué)習(xí),我大致了解了單片機(jī)的發(fā)展現(xiàn)狀以及未來的發(fā)展趨勢,認(rèn)識到目前單片機(jī)方面的各種各樣的發(fā)展,和它們之間的競爭。了解了單片機(jī)方面的先進(jìn)技術(shù),這些都為我的未來的學(xué)習(xí)指明了
109、方向。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 岳俊生 宗慧 編 《單片機(jī)原理及應(yīng)用 實(shí)驗(yàn)與課程設(shè)計(jì)指導(dǎo)書》.2013.2</p><p> [2] 謝維成 楊加國 .《單片機(jī)原理與應(yīng)用及C51 程序設(shè)計(jì)》.</p><p> [3] 潭浩強(qiáng).C語言程序設(shè)計(jì).清華大學(xué)出版社.2010
110、.07</p><p> [4] 陳明熒.8051單片機(jī)課程設(shè)計(jì)實(shí)訓(xùn)教材[M].北京:清華大學(xué)出版社,2003年9月. </p><p> [5] 徐新艷.單片機(jī)原理、應(yīng)用與實(shí)踐[M].北京:高等教育出版社,2005年3月. </p><p><b> 附錄</b></p><p
111、><b> 程序代碼:</b></p><p> #include<reg52.h> //頭文件</p><p> /*------------------------------------------------</p><p><b> 全局變量</b></p><p
112、> ------------------------------------------------*/</p><p> unsigned char High,Low; //定時(shí)器預(yù)裝值的高8位和低8位</p><p> sbit SPK = P3^7; //定義喇叭接口</p><p> unsigned char num;<
113、;/p><p> unsigned char Tone_Index=0; //放音樂的參數(shù)</p><p> sbit MODE = P2^0;</p><p> sbit SAVE = P2^1;</p><p> unsigned char save[100];</p><p> unsigned ch
114、ar a=0;//保存數(shù)組引索數(shù)</p><p> unsigned char j;</p><p> unsigned char dis;</p><p> unsigned char code CharCode[]=</p><p><b> {</b></p><p> 0xc
115、0, 0xf9, 0xa4,0xb0,0x99, 0x92,0x82,0xf8,</p><p> 0x80, 0x90, 0x88, 0x83, 0xc6,0xa1,0x86,0x8e</p><p><b> };</b></p><p> unsigned char code tab[][2]=</p><p&g
116、t;<b> { </b></p><p> 0x00,0x00,</p><p> 0xf8,0x8c,</p><p> 0xf9,0x5b,</p><p> 0xfa,0x15,</p><p> 0xfa,0x67,</p><p> 0xfb,0x
117、04,</p><p> 0xfb,0x90,</p><p> 0xfc,0x0c,</p><p> 0xfc,0x44,</p><p> 0xfc,0xac,</p><p> 0xfd,0x09,</p><p> 0xfd,0x34,</p><p&g
118、t; 0xfd,0x82,</p><p> 0xfd,0xc8,</p><p> 0xfe,0x06,</p><p> 0xfe,0x22,</p><p> 0xfe,0x56,</p><p> 0xfe,0x85,</p><p> 0xfe,0x9a,</p&g
119、t;<p> 0xfe,0xc1,</p><p> 0xfe,0xe4,</p><p><b> 0xff,0x03</b></p><p><b> };</b></p><p> unsigned char code Song[]=</p><p&
120、gt;<b> {</b></p><p> 8,8,12,12,13,13,12, 11,11,10,10,9,9,8,</p><p> 12,12,11,11,10,10,9, 12,12,11,11,10,10,9,</p><p> 8,8,12,12,13,13,12, 11,11,10,10,9,9,8,//小星星&l
121、t;/p><p> 10,10,11,12,12,11,10,9,8,8,9,10,3,2,2,</p><p> 10,10,11,12,12,11,10,9,8,8,9,10,9,8,8,</p><p> 9,9,10,8,9,10,11,10,8,9,10,11,10,8,8,9,12,</p><p> 10,10,11,12,
122、12,11,10,9,8,8,9,10,9,8,8//歡樂頌</p><p><b> };</b></p><p> unsigned char code Pai[]=</p><p><b> {</b></p><p> 1,1,1,1,1,1,8, 1,1,1,1,1,1,8,
123、</p><p> 1,1,1,1,1,1,8, 1,1,1,1,1,1,8,</p><p> 1,1,1,1,1,1,8, 1,1,1,1,1,1,8,//</p><p> 1,1,1,1,1,1,1,1,1,1,1,1,8,1,1,</p><p> 1,1,1,1,1,1,1,1,1,1,1,1,8,1,1,</p
124、><p> 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,</p><p> 8,1,1,1,1,1,1,1,1,1,1,1,8,1,1//</p><p><b> };</b></p><p> /*------------------------------------------------
125、</p><p><b> 函數(shù)聲明</b></p><p> ------------------------------------------------*/</p><p> void Init_Timer0(void);//定時(shí)器初始化</p><p> void delay(void);/* 鍵
126、消抖延時(shí)函數(shù) */</p><p> void delay1(unsigned char ms); //播放歌曲時(shí)實(shí)現(xiàn)節(jié)拍的延時(shí)函數(shù)</p><p> /*------------------------------------------------</p><p><b> 主函數(shù)</b></p><
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)----簡易單片機(jī)電子琴設(shè)計(jì)
- 單片機(jī)電子琴課程設(shè)計(jì)--基于單片機(jī)的可存儲式電子琴設(shè)計(jì)
- 單片機(jī)電子琴課程設(shè)計(jì)
- 單片機(jī)電子琴課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)簡易電子琴
- 電子琴課程設(shè)計(jì)--基于單片機(jī)的電子琴設(shè)計(jì)
- 簡易電子琴單片機(jī)課程設(shè)計(jì)
- 簡易電子琴單片機(jī)課程設(shè)計(jì)
- 簡易電子琴單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)簡易電子琴
- 單片機(jī)課程設(shè)計(jì)——簡易電子琴
- 單片機(jī)課程設(shè)計(jì)---簡易電子琴
- 電子琴課程設(shè)計(jì)--基于單片機(jī)的電子琴設(shè)計(jì)
- 電子琴課程設(shè)計(jì)-- 基于單片機(jī)的電子琴設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--簡易電子琴設(shè)計(jì)
- 單片機(jī)電子琴課程設(shè)計(jì) (2)
- 單片機(jī)電子琴課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子琴課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子系統(tǒng)課程設(shè)計(jì)—簡易電子琴
- 電子琴單片機(jī)課程設(shè)計(jì)--電子琴模擬實(shí)驗(yàn)
評論
0/150
提交評論