版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 單片機技術(shù)課程設(shè)計報告</p><p> 課題名稱 電子音樂盒的設(shè)計 </p><p> 專業(yè)班級 xxxxxxxxxx </p><p> 學(xué) 號 xxxxxxxxx </p><p> 學(xué)生姓名
2、 xxxx </p><p> 指導(dǎo)教師 xxxxxx </p><p> 評 分 </p><p> 20xx年x月xx日至x月xx日</p><p><b> 答辯記錄</b></p>
3、<p> 1、例舉設(shè)計過程中遇到的問題及其解決方法(至少兩例)。</p><p> 答:(1)問題說明:</p><p><b> 解決方法:</b></p><p><b> ?。?)問題說明:</b></p><p><b> 解決方法:</b><
4、;/p><p> 2、教師現(xiàn)場提的問題記錄在此(不少于2個問題)。</p><p><b> 答:</b></p><p><b> 摘 要</b></p><p> 本設(shè)計是基于單片機的數(shù)字音樂盒設(shè)計,該音樂盒通過控制單片機內(nèi)部的定時器來產(chǎn)生不同頻率的方波,驅(qū)動喇叭發(fā)出不同音調(diào)的音樂,再
5、用Protel99來畫系統(tǒng)硬件圖,采用匯編語言進行編程,編程后利用KEIL C51來進行編譯,再生成的HEX文件裝入芯片中,采用proteus軟件來仿真,檢驗功能得以正常實現(xiàn)從而設(shè)計出數(shù)字音樂盒。</p><p> 選用單片機AT89C51來設(shè)計制作是由于其功能的實現(xiàn)主要通過軟件編程來完成,降低了硬件電路的復(fù)雜性,而且其成本也有所降低。芯片AT89C51是低功耗、高性能的CMOS型8位單片機。片內(nèi)帶有4KB的F
6、lash存儲器,且允許在系統(tǒng)內(nèi)改寫或用編程器編程。另外, AT89C51的指令系統(tǒng)和引腳與8051完全兼容,片內(nèi)有128B 的RAM、32條I/O口線、2個16位定時計數(shù)器、5個中斷源、一個全雙工串行口等。</p><p> 該音樂盒的設(shè)計可以通過按鍵選擇不同的曲目播放,并通過LCD顯示歌曲號及播放時間。音樂盒主要由五大模塊構(gòu)成,包括AT89C51芯片、按鈕、蜂鳴器、晶振電路和液晶顯示器。有3個歌曲選擇鍵供用戶
7、按照自己的喜好選擇音樂,該軟、硬件系統(tǒng)具有很好的通用性,很高的實際使用價值。</p><p> 關(guān)鍵詞:數(shù)字音樂盒; AT89C51; Proteus; KEIL; 匯編語言</p><p><b> 目 錄</b></p><p><b> 1 設(shè)計任務(wù)1</b></p><p><
8、;b> 2設(shè)計方案1</b></p><p><b> 2.1任務(wù)分析1</b></p><p><b> 2.2方案設(shè)計1</b></p><p> 3 系統(tǒng)硬件設(shè)計3</p><p> 3.1 AT89C51單片機簡介3</p><p&g
9、t; 3.2 晶振電路4</p><p> 3.3 按鍵電路4</p><p> 3.4 LCD顯示電路4</p><p><b> 3.5 蜂鳴器5</b></p><p> 4 系統(tǒng)軟件設(shè)計5</p><p> 4.1外部中斷源系統(tǒng)設(shè)計5</p><
10、p> 4.2音頻發(fā)生原理6</p><p> 4.3顯示模塊設(shè)計7</p><p> 5仿真與性能分析8</p><p> 5.1 系統(tǒng)仿真過程 8</p><p> 5.2 仿真分析
11、 9 </p><p><b> 6設(shè)計小結(jié)10</b></p><p><b> 參考文獻11</b></p><p> 附錄1
12、 系統(tǒng)原理圖12</p><p> 附錄2 系統(tǒng)PCB圖13</p><p> 附錄3 程序清單14</p><p><b> 1 設(shè)計任務(wù)</b></p><p> 利用單片機設(shè)計一款簡單實用的電子音樂盒。</p><p><b> 1. 基本要求</b>&
13、lt;/p><p> ?。?)查閱資料,了解單片機控制單音喇叭發(fā)聲原理; </p><p> (2)設(shè)計基于單片機的電子音樂盒; </p><p> (3)通過按鈕可選擇不同的音樂;。</p><p><b> 2. 選做</b></p><p> ?。?)采用LCD顯示信息。</p>
14、;<p> (2)開機時有英文歡迎提示字符,播放時顯示歌曲序號(或名稱)。</p><p> ?。?)可通過功能鍵選擇樂曲播放。</p><p><b> 2設(shè)計方案</b></p><p><b> 2.1任務(wù)分析</b></p><p> 本程序主要利用AT89C51芯片,
15、通過它來產(chǎn)生一定頻率的音頻脈沖信號來實現(xiàn)課程設(shè)計的基本要求和附加功能,并可以通過按鍵播放3首歌曲。</p><p><b> 2.2方案設(shè)計</b></p><p><b> 1.硬件方案</b></p><p><b> 圖1.硬件原理框圖</b></p><p>
16、AT89C51是一種帶4K字節(jié)閃存可編程可擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS 8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復(fù)擦除100次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由
17、于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C51單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。</p><p> ?。?)用P3.0--P3.2控制按鍵。</p><p> (3)用P3.5,P3.6,P3.3作為LCD的RS,R/W,E的控制信號。用P1.0--P1.7作為&
18、lt;/p><p> LCD的D0--D7的控制信號。</p><p> ?。?)用P3.7口控制蜂鳴器。</p><p> ?。?)電路為12MHZ晶振頻率工作,起振電路中C1,C2均為22pf,接在XTAL1和</p><p><b> XTAL2間。</b></p><p><b>
19、; 軟件方案</b></p><p><b> N</b></p><p><b> Y</b></p><p><b> 圖2.主程序流程圖</b></p><p><b> 3 系統(tǒng)硬件設(shè)計</b></p><
20、p> 3.1 AT89C51單片機簡介</p><p><b> 引腳功能:</b></p><p> P0.0-P0.7:為一個8位漏級開路雙向I/O口;</p><p> P1.0-P1.7:是一個內(nèi)部提供上拉電阻的8位雙向I/O口;</p><p> P2.0-P2.7:為一個內(nèi)部上拉電阻的8位雙向
21、I/O口;</p><p> P3.0-P3.7:管腳是8個帶內(nèi)部上拉電阻的雙向I/O口;</p><p> P3.0:RXD(串行輸入口);</p><p> P3.1:TXD(串行輸出口);</p><p> P3.2:INT0(外部中斷0);</p><p> P3.3:INT1(外部中斷1);<
22、/p><p> P3.4:T0(記時器0外部輸入);</p><p> P3.6:WR(外部數(shù)據(jù)存儲器寫選通);</p><p> P3.7:RD(外部數(shù)據(jù)存儲器讀選通);</p><p> EA:當(dāng)EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管</p><p> 是否有內(nèi)部程序存儲器
23、。注意加密方式1時,EA將內(nèi)部鎖定為RESET;當(dāng)</p><p> EA端保持高電平時,此間內(nèi)部程序存儲器;</p><p> P3.5:T1(記時器1外部輸入);</p><p> ALE:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié);</p><p> PSEN:外部程序存儲器的選通信號;</p>
24、<p><b> RST:復(fù)位輸入;</b></p><p> XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入;</p><p> XTAL2:來自反向振蕩器的輸出。</p><p><b> 3.2 晶振電路</b></p><p> 晶振電路采用12MHZ的晶振
25、頻率工作,取起振電路中C1,C2均為22pf。它們分別接在晶振的兩個腳上和對地的電容,會影響到晶振的諧振頻率和輸出幅度。晶體旁邊的兩個電容接地, 實際上就是電容三點式電路的分壓電容, 接地點就是分壓點. 以接地點即分壓點為參考點, 振蕩引腳的輸入和輸出是反相的, 但從并聯(lián)諧振回路即石英晶體兩端來看, 形成一個正反饋以保證電路持續(xù)振蕩。</p><p><b> C1</b></p&g
26、t;<p><b> XTAL1</b></p><p><b> C2</b></p><p><b> XTAL2</b></p><p><b> 3.3 按鍵電路</b></p><p> 采用三個按鈕,分別用于選擇播放三首
27、歌。</p><p> 3.4 LCD顯示電路</p><p> LCD顯示模塊采用14引腳的LM032L芯片,它有八個數(shù)據(jù)端口,三個控制口。當(dāng)控制口R/W為低電平時,單片機向LCD寫入指令,當(dāng)其為高電平時,單片機讀取LCD的信息。單片機的P3.5,P3.6,P3.3分別作為LCD的RS,R/W,E的控制信號。用P1.0~P1.7作為LCD的D0~D7的控制信號。用LCD來顯示開機歡迎
28、字符及播放歌曲信息。 </p><p><b> 3.5 蜂鳴器</b></p><p> 蜂鳴器發(fā)聲原理是電流通過電磁線圈,</p><p> 使電磁線圈產(chǎn)生磁場來驅(qū)動振動膜發(fā)聲的。</p><p><b> 4 系統(tǒng)軟件設(shè)計</b></p><p>
29、 4.1 外部中斷源系統(tǒng)設(shè)計</p><p> 在本設(shè)計中中斷源是采用外部中斷0方式,其入口地址是0003H。其中斷響應(yīng)級別最高。</p><p> ?。?)定時器/計數(shù)器</p><p> 工作方式寄存器TMOD用于選擇定時器/計數(shù)器的工作方式和工作模式。</p><p><b> 門控位—GATE</b>&l
30、t;/p><p> 工作方式選擇位—M1、M0</p><p> —計數(shù)器模式和定時器模式選擇位</p><p> =0,為定時器模式。</p><p><b> =1,為計數(shù)模式。</b></p><p> 本設(shè)計中采用方式1的16位定時器/計數(shù)器。</p><p>
31、; 定時器/計數(shù)器控制寄存器TCON,其格式如下:</p><p> TF1、TF0—計數(shù)溢出標(biāo)志位當(dāng)計數(shù)器溢出時,該位置1。</p><p> TR1、TR0—計數(shù)運行控制位</p><p> 4.2 音頻發(fā)生原理</p><p> 要生產(chǎn)音頻脈沖,只要算出某一音頻的周期(1/頻率),然后將此周期除以2,</p>&
32、lt;p> 即為半周期的時間。利用定時器計時這個半周期時間,每當(dāng)計時到后就將輸 </p><p> 出脈沖的I/O反相,然后重復(fù)計時此半周期時間再對I/O反相,就可在I/O</p><p> 腳上得到此頻率的脈沖。</p><p> 利用8051的內(nèi)部定時器使用其工作在計數(shù)器模式MODE1下,改變計數(shù)值THO </p><p>
33、 及TLO以產(chǎn)生不同頻率的方法。</p><p> 例如頻率為523Hz,其周期T=1/523=1912us,因此只要令計數(shù)器計時</p><p> 956us/1us=956,在每次計數(shù)956次時將I/O反相,就可得到中音DO</p><p><b> (523Hz). </b></p><p> 計數(shù)脈沖值
34、與頻率的關(guān)系公式如下:</p><p> N=Fi÷2÷Fr </p><p><b> N: 計算值;</b></p><p> Fi: 內(nèi)部計時一次為1us, 故其頻率為1MHz;</p><p> 其計數(shù)值的求法如下:</p><p> T=6553
35、6-N=65536-Fi÷2÷Fr</p><p> 例如: 設(shè)K=65536, F=1000000=Fi=1MHz, 求低音DO(261Hz).中音DO </p><p> (523Hz)。高音的DO(1046Hz)的計算值.</p><p> T=65536-N=65536-Fi÷2÷Fr=65536-1000000
36、÷2÷Fr</p><p> ?。?5536-500000/Fr</p><p> 低音DO的 T=65536-500000/262=63627</p><p> 中音DO的 T=65536-500000/523=64580</p><p> 高音DO的 T=65536-500000/1047=65059</p
37、><p> C調(diào)各音符頻率與計數(shù)值T的對照表如表所示。</p><p> 4.3 顯示模塊設(shè)計</p><p> 本設(shè)計選用LM016L芯片顯示。LCD液晶投影機是液晶顯示技術(shù)和投影技術(shù)相結(jié)合的產(chǎn)物,它利用了液晶的電光效應(yīng),通過電路控制液晶單元的透射率及反射率,從而產(chǎn)生不同灰度層次及多達1670萬種色彩的靚麗圖像。LCD投影機的主要成像器件是液晶板。LCD投影機的
38、體積取決于液晶板的大小,液晶板越小,投影機的體積也就越小。</p><p> LM016L液晶模塊采用HD44780控制器。HD44780具有簡單而功能較強的指令集,可以實現(xiàn)字符移動、閃爍等功能。LM016L與單片機MCU(Microcontroller Unit)通訊可采用8位或者4位并行傳輸兩種方式。HD44780控制器由兩個 8位寄存器、指令寄存器( IR)和數(shù)據(jù)寄存器(DR)、忙標(biāo)志(BF)、顯示數(shù)據(jù)
39、RAM(DDRAM)、字符發(fā)生器ROM(CGROM)、字符發(fā)生器 RAM(CGRAM)、地址計數(shù)器( AC)。IR用于寄存指令碼,只能寫入不能讀出;DR用于寄存數(shù)據(jù),數(shù)據(jù)由內(nèi)部操作自動寫入 DDRAM和CGRAM,或者暫存從DDRAM和CGRAM讀出的數(shù)據(jù)。BF為 1時,液晶模塊處于內(nèi)部處理模式,不響應(yīng)外部操作指令和接受數(shù)據(jù)。DDRAM用來存儲顯示的字符,能存儲 80個字符碼。 </p><p><b>
40、; 5 仿真與性能分析</b></p><p> 5.1 系統(tǒng)仿真過程</p><p> 按照上面設(shè)計的電路在proteus軟件內(nèi)畫圖,選擇需要的芯片及參數(shù),按照原理圖畫出仿真圖,打開單片機軟件開發(fā)系統(tǒng)Keil,選擇89C51單片機,在其中編寫程序(源程序見附錄),運行生成一個后綴名為hex的文件,然后將該文件下載到proteus中的AT89C51單片機中進行仿真,觀察實
41、驗現(xiàn)象。仿真能實現(xiàn)播放音樂,按鍵選擇曲目的功能。</p><p><b> 仿真原理圖:</b></p><p><b> 運行界面:</b></p><p><b> 5.2 仿真分析</b></p><p> 現(xiàn)象結(jié)果:當(dāng)按下按鈕后LCD上會顯示歡迎字符且其所對應(yīng)的
42、歌曲能正常播放。</p><p> 程序調(diào)試中出現(xiàn)的問題及解決的辦法:</p><p> ?。?)有時編寫的程序沒有錯誤,卻在電腦輸入時沒有按照規(guī)范的格式,以致程序無法正常運行,這浪費了很多時間,所以還是得注重細節(jié);</p><p> ?。?)在檢查錯誤時,大篇的程序感覺無從下手,在平時編程的時候就得注意在關(guān)鍵的地方留下注釋,以便以后的檢驗和修改;</p&g
43、t;<p> ?。?)流程圖對編程來說很重要,能使思路清晰;</p><p> (4)設(shè)計原理圖時經(jīng)常會用到自己平時都沒接觸過的芯片,所以要上網(wǎng)查找資料,了解其原理才方便設(shè)計。</p><p> (5)在播放歌曲時LCD無法顯示歌曲信息和播放時間。這個問題無論怎么修改編程依舊無法解決。</p><p><b> 設(shè)計小結(jié)</b&g
44、t;</p><p> 由于是上學(xué)期學(xué)的單片機知識,而這學(xué)期來做課程設(shè)計,中間相隔很長一段時間,以至于剛拿到這個課題無所適從。于是又把課本和筆記拿出來溫習(xí)一遍,網(wǎng)上查找了些相關(guān)資料,才有了點設(shè)計的概念和頭緒。這次的課程設(shè)計為期一周,感覺時間有點緊迫,所以只是在完成基本要求的基礎(chǔ)上稍稍有點拓展。本次課程設(shè)計使我第一次真正意義上用自己的專業(yè)知識和技能來設(shè)計一個完整的作品,這使得我得到了很大的鍛煉和提高,雖說這過程非
45、常的難熬,花費了很多的時間,但看到自己的勞動得到了成果就覺得值得了。</p><p> 在這次設(shè)計中,我完成了一個基于單片機的數(shù)字音樂盒設(shè)計,盡管結(jié)果并算不上完美,但是我努力了,獲得了豐富的知識,完善了大學(xué)三年中理論與實踐相結(jié)合的學(xué)習(xí)。我從資料的收集中,掌握了很多單片機的知識,讓我對我所學(xué)過的知識有所鞏固和提高,在遇到困難時虛心請教同學(xué),和同學(xué)的討論也使我受益匪淺,拓寬了設(shè)計思路,可以說音樂盒的完成少不了同學(xué)的
46、幫助和支持。在仿真過程中我大致學(xué)會了proteus和keil軟件的應(yīng)用,雖說算不上精通,但也會基本的操作和運行,這也為日后從事這方面的工作打下了一個良好的基礎(chǔ)。單片機是一個需要細心的學(xué)科,在本次課程設(shè)計中,很多次都是因為自己的不細心才導(dǎo)致走了許多彎路,浪費了很多時間,這是我明白什么才是細節(jié)決定成敗。</p><p> 雖說設(shè)計的過程是很糾結(jié)很痛苦的,但我相信只要度過了這個過程,我的知識和經(jīng)驗終將上升一個臺階,我
47、想這也就是我們以后邁入社會所擁有的最寶貴的東西了吧!</p><p><b> 參考文獻</b></p><p> [1] 秦實宏,徐春輝.MCS-51單片機原理及應(yīng)用[M].武漢:華中科技大學(xué)出版社,2010.6</p><p> [2] 杜樹春.基于Proteus和Keil C51的單片機設(shè)計與仿真.北京:電子工業(yè)出版社,2012&l
48、t;/p><p> [3] 譚浩強.C程序設(shè)計.第三版,北京:清華大學(xué)出版社,2005:105</p><p> [4] 張毅剛.單片機原理及應(yīng)用[M].北京:高等教育出版社,2008.</p><p> [5] 周堅.單片機C語言輕松入門[M].北京:北京航空航天大學(xué)出版社,2006.</p><p><b> 附錄1 系統(tǒng)原
49、理圖</b></p><p> 附錄2 系統(tǒng)PCB圖</p><p><b> 附錄3 程序清單</b></p><p> #include <REG52.H></p><p> #include "Soundplay.h"//頭文件見后</p>&l
50、t;p> int z,flag;</p><p> unsigned char code word1[]={"Welcome to"};</p><p> unsigned char code word2[]={"listen the music"};</p><p> typedef unsigned cha
51、r uint8;</p><p> sbit KeyIn1=P3^0;</p><p> sbit KeyIn2=P3^1;</p><p> sbit KeyIn3=P3^2;</p><p> sbit RS = P3^5 ;</p><p> sbit RW = P3^6 ;</p>&l
52、t;p> sbit E = P3^3 ;</p><p> sbit BUSY = P1^7;</p><p> void delay(int z);</p><p> void Key_check();</p><p> void wait();</p><p> void w_dat(int da
53、t);</p><p> void w_cmd(uint8 cmd);</p><p> void w_string(uint8 addr_start, uint8 *p);</p><p> void Init_LCD1602(void);</p><p> void display();</p><p>
54、 void Delay1ms(unsigned int count)</p><p><b> {</b></p><p> unsigned int i,j;</p><p> for(i=0;i<count;i++)</p><p> for(j=0;j<120;j++);</p>
55、<p><b> }</b></p><p> //*****************************Music******************************************************</p><p><b> //揮著翅膀的女孩</b></p><p> un
56、signed char code Music_Girl[]={ </p><p> 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x03,</p><p> 0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03,</p><p> 0x19,0x02,
57、0x16,0x03, 0x17,0x03, 0x18,0x02, 0x18,0x03,</p><p> 0x17,0x03, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0x18,0x02,</p><p> 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x15,0x03, 0x16,0x03,</p><p>
58、0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x1A,0x03,</p><p> 0x1B,0x03, 0x1F,0x03, 0x1F,0x03, 0x17,0x03, 0x18,0x03,</p><p> 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03,</p>
59、<p> 0x18,0x03, 0x1F,0x03, 0x1F,0x02, 0x16,0x03, 0x17,0x03,</p><p> 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02,</p><p> 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,&
60、lt;/p><p> 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03,</p><p> 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,</p><p> 0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03,
61、0x17,0x03,</p><p> 0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03,</p><p> 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,</p><p> 0x20,0x03, 0x1F,0x03, 0x1B,0x03,
62、0x1F,0x66, 0x1F,0x03,</p><p> 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,</p><p> 0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,</p><p> 0x1F,0x00, 0x1A,0x03,
63、0x1A,0x03, 0x1A,0x03, 0x1B,0x03,</p><p> 0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x19,0x02, 0x17,0x03,</p><p> 0x15,0x17, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x18,0x03,</p><p> 0x17,0x04,
64、0x18,0x0E, 0x18,0x03, 0x17,0x04, 0x18,0x0E,</p><p> 0x18,0x66, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03,</p><p> 0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66,</p><p>
65、0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03,</p><p> 0x1F,0x66, 0x1F,0x04, 0x1B,0x0E, 0x1B,0x03, 0x19,0x03,</p><p> 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,</p>
66、<p> 0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04,</p><p> 0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,</p><p> 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03,&
67、lt;/p><p> 0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03,</p><p> 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,</p><p> 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00,
68、0x18,0x02,</p><p> 0x18,0x03, 0x1A,0x03, 0x19,0x0D, 0x15,0x03, 0x15,0x02,</p><p> 0x18,0x66, 0x16,0x02, 0x17,0x02, 0x15,0x00, 0x00,0x00};</p><p><b> //葫蘆娃</b></p&g
69、t;<p> unsigned char code Music_Small[]={ </p><p> 0x83,0x63,0x51,0x61,0x03,0x81,0x61,0x51,0x81,</p><p> 0x63,0x01,0x81,0x61,0x63,0x51,</p><p> 0x63,0x01,0x61,0x81,0x61,0
70、x51,0x81,0x63,0x03,</p><p> 0x12,0x12,0x35,0x11,0x12,0x31,0x02,</p><p> 0x62,0x62,0x61,0x51,0x62,0x51,0x12,0x31,0x02,</p><p> 0x81,0x61,0x61,0x51,0x65,0x51,0x12,0x21,0x02,</p&
71、gt;<p> 0x75,0x51,0x32,0x58,</p><p> 0x81,0x01,0x61,0x61,0x51,0x51,0x62,0x61,0x01,</p><p> 0x52,0x11,0x32,0x02,0x81,0x01,0x61,0x61,0x51,0x51,0x61,0x61,0x01,0x51,0x11,</p><p&
72、gt; 0x22,0x02,</p><p> 0x35,0x11,0x62,0x18,</p><p> 0x31,0x52,0x61,0x31,0x52,0x61,</p><p> 0x85,0x01,0x71,0x52,0x65,0x02,0xff</p><p><b> };</b></p&g
73、t;<p> //兩只蝴蝶 </p><p> unsigned char code Music_Two[] ={ </p><p> 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03,
74、 </p><p> 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, </p><p> 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,
75、 </p><p> 0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x16,0x03, </p><p> 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01,
76、 </p><p> 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, </p><p> 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x15,0x03, 0x16,0x01,
77、 </p><p> 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03, </p><p> 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,
78、 </p><p> 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, </p><p> 0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x19,0x03,
79、</p><p> 0x19,0x01, 0x19,0x03, 0x1A,0x03, 0x19,0x03, 0x17,0x01, </p><p> 0x16,0x03, 0x16,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03,
80、</p><p> 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0D, 0x15,0x00, </p><p> 0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03,
81、</p><p> 0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, </p><p> 0x16,0x0D, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, &l
82、t;/p><p> 0x1A,0x02, 0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, </p><p> 0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, <
83、;/p><p> 0x19,0x02, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, </p><p> 0x1B,0x04, 0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, <
84、;/p><p> 0x1B,0x04, 0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, </p><p> 0x17,0x0D, 0x16,0x03, 0x17,0x03, 0x19,0x01, 0x19,0x03, &l
85、t;/p><p> 0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03, 0x1B,0x03, </p><p> 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x03, &l
86、t;/p><p> 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02, </p><p> 0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x01, &l
87、t;/p><p> 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, 0x19,0x03, </p><p> 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, <
88、;/p><p> 0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, </p><p> 0x17,0x16, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, <
89、;/p><p> 0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, 0x0F,0x02, </p><p> 0x10,0x03, 0x15,0x00, 0x00,0x00 };</p><p> //******************************
90、*****************************************************</p><p><b> /**</b></p><p><b> * 等待繁忙標(biāo)志</b></p><p><b> */</b></p><p> void
91、wait(void)</p><p><b> {</b></p><p> P1 = 0xFF;</p><p><b> do</b></p><p><b> {</b></p><p> RS = 0;</p>&
92、lt;p><b> RW = 1;</b></p><p><b> E = 0;</b></p><p><b> E = 1;</b></p><p> }while (BUSY == 1);</p><p><b> E = 0;</b&g
93、t;</p><p><b> }</b></p><p><b> /**</b></p><p><b> * 寫數(shù)據(jù)</b></p><p><b> */</b></p><p> void w_dat(int d
94、at)</p><p><b> {</b></p><p><b> wait();</b></p><p><b> E = 0;</b></p><p><b> P1 = dat;</b></p><p><b
95、> RS = 1;</b></p><p><b> RW = 0;</b></p><p><b> E = 1;</b></p><p><b> E = 0;</b></p><p><b> }</b></p>
96、;<p><b> /**</b></p><p><b> * 寫命令</b></p><p><b> */</b></p><p> void w_cmd(uint8 cmd)</p><p><b> {</b></p
97、><p><b> wait();</b></p><p><b> E = 0;</b></p><p><b> P1 = cmd;</b></p><p><b> RS = 0;</b></p><p><b>
98、; RW = 0;</b></p><p><b> E = 1;</b></p><p><b> E = 0;</b></p><p><b> }</b></p><p><b> /**</b></p><
99、p> * 發(fā)送字符串到LCD</p><p><b> */</b></p><p> void w_string(uint8 addr_start, uint8 *p)</p><p><b> {</b></p><p> w_cmd(addr_start);</p>
100、<p> while (*p != '\0')</p><p><b> {</b></p><p> w_dat(*p++);</p><p><b> }</b></p><p><b> }</b></p><p
101、><b> /**</b></p><p><b> * 初始化1602</b></p><p><b> */</b></p><p> void Init_LCD1602(void)</p><p><b> {</b></p&g
102、t;<p> w_cmd(0x38); // 16*2顯示,5*7點陣,8位數(shù)據(jù)接口</p><p> w_cmd(0x0c); // 顯示器開、光標(biāo)開、光標(biāo)允許閃爍</p><p> w_cmd(0x06); // 文字不動,光標(biāo)自動右移</p><p> w_cmd(0x01); // 清屏</p><p>
103、<b> }</b></p><p><b> main()</b></p><p><b> {</b></p><p><b> while(1)</b></p><p><b> {</b></p>&l
104、t;p> InitialSound();</p><p> Key_check();//檢測按鍵</p><p> if(flag==1)</p><p><b> {</b></p><p> Play(Music_Girl,0,3,360);</p><p> delay(1
105、00);</p><p> Key_check();</p><p><b> }</b></p><p> if(flag==2)</p><p><b> {</b></p><p> Play(Music_Small,0,3,360);</p>
106、<p> delay(100);</p><p> Key_check();</p><p><b> }</b></p><p> if(flag==3)</p><p><b> {</b></p><p> Play(Music_Two,0,3,3
107、60);</p><p> //Delay1ms(500);</p><p> delay(100);</p><p> Key_check();</p><p><b> }</b></p><p><b> }</b></p><p>&
108、lt;b> }</b></p><p> void display()</p><p><b> {</b></p><p><b> RW=0;</b></p><p> delay(500);</p><p> Init_LCD1602();
109、</p><p> w_string(0x80,word1);</p><p> w_string(0xc0,word2);</p><p> delay(1000);</p><p> w_cmd(0x01);</p><p><b> }</b></p><p&g
110、t; void Key_check()//按鍵檢測子程序</p><p><b> {</b></p><p> if(!KeyIn1)//判斷是否有按鍵按下,按下后P3^3=0</p><p><b> {</b></p><p> delay(10);</p><p
111、> if(!KeyIn1)//再判斷一次(按鍵去抖)</p><p><b> {</b></p><p> while(!KeyIn1);//等待松手,松開后跳出程序</p><p> flag=1;//標(biāo)志位</p><p><b> }</b></p><p
112、><b> }</b></p><p> if(!KeyIn2)</p><p><b> {</b></p><p> delay(10);</p><p> if(!KeyIn2)</p><p><b> {</b></p&
113、gt;<p> while(!KeyIn2);</p><p><b> flag=2;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(!KeyIn3)</p><p>
114、;<b> {</b></p><p> delay(10);</p><p> if(!KeyIn3)</p><p><b> {</b></p><p> while(!KeyIn3);</p><p><b> flag=3;</b>
115、</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void delay(int z) //延時子程序</p><p><b> {</b>
116、;</p><p><b> int x,y;</b></p><p> for(x=z;x>0;x--)</p><p> for(y=200;y>0;y--);</p><p><b> }</b></p><p><b> //頭文件:&
117、lt;/b></p><p> #ifndef __SOUNDPLAY_H_REVISION_FIRST__</p><p> #define __SOUNDPLAY_H_REVISION_FIRST__</p><p> //****************************************************************
118、**********</p><p> #define SYSTEM_OSC 12000000//定義晶振頻率12000000HZ</p><p> #define SOUND_SPACE 4/5 //定義普通音符演奏的長度分率,//每4分音符間隔</p><p> sbit BeepIO = P3^7;//定義輸出管腳P3^
119、7</p><p> unsigned int code FreTab[12] = { 262,277,294,311,330,349,369,392,415,440,466,494 }; //原始頻率表</p><p> unsigned char code SignTab[7] = { 0,2,4,5,7,9,11 }; //1~7在頻率表中的位置<
120、/p><p> unsigned char code LengthTab[7]= { 1,2,4,8,16,32,64 };</p><p> unsigned char Sound_Temp_TH0,Sound_Temp_TL0;//音符定時器初值暫存 </p><p> unsigned char Sound_Temp_TH1,Sound_Tem
121、p_TL1;//音長定時器初值暫存</p><p> //**************************************************************************</p><p> void Key_check();</p><p> void InitialSound(void)</p><p
122、><b> {</b></p><p> BeepIO = 0;</p><p> Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256;// 計算TL1應(yīng)裝入的初值 </p><p> Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256;
123、// 計算TH1應(yīng)裝入的初值 </p><p> TH1 = Sound_Temp_TH1;</p><p> TL1 = Sound_Temp_TL1;</p><p> TMOD |= 0x11;</p><p> ET0 = 1;</p><p> ET1 = 0;</p>
124、<p> TR0 = 0;</p><p> TR1 = 0;</p><p> EA = 1;</p><p><b> }</b></p><p> void BeepTimer0(void) interrupt 1</p><p><b>
125、; {</b></p><p> BeepIO = !BeepIO;</p><p> TH0 = Sound_Temp_TH0;</p><p> TL0 = Sound_Temp_TL0;</p><p><b> }</b></p><p> //****
126、**********************************************************************</p><p> void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed)</p><p><b> {&
127、lt;/b></p><p> unsigned int NewFreTab[12];//新的頻率表</p><p> unsigned char i,j;</p><p> unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength;</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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子音樂盒(單片機課程設(shè)計)
- 電子音樂盒單片機課程設(shè)計
- 單片機課程設(shè)計報告--電子音樂盒的設(shè)計
- 單片機課程設(shè)計---電子音樂盒的設(shè)計
- 電子音樂盒課程設(shè)計
- 畢業(yè)設(shè)計基于單片機的電子音樂盒設(shè)計
- 單片機電子音樂盒課程設(shè)計說明書
- 單片機課程設(shè)計--電子音樂設(shè)計
- 電子音樂盒設(shè)計【開題報告】
- 畢業(yè)論文---基于單片機的電子音樂盒
- 單片機課程設(shè)計報告 音樂盒設(shè)計
- 單片機音樂盒課程設(shè)計
- 單片機課程設(shè)計--音樂盒
- 音樂盒單片機課程設(shè)計
- 單片機音樂盒課程設(shè)計
- 單片機音樂盒課程設(shè)計
- 單片機課程設(shè)計--電子音樂播放器
- 電子音樂盒的設(shè)計【任務(wù)書】
- 單片機原理課程設(shè)計---音樂盒的設(shè)計
- 電子音樂盒的設(shè)計【畢業(yè)論文】
評論
0/150
提交評論