版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 單片機(jī)技術(shù)課程設(shè)計(jì)報(bào)告</p><p> 課題名稱 電子音樂(lè)盒的設(shè)計(jì) </p><p> 專業(yè)班級(jí) xxxxxxxxxx </p><p> 學(xué) 號(hào) xxxxxxxxx </p><p> 學(xué)生姓名
2、 xxxx </p><p> 指導(dǎo)教師 xxxxxx </p><p> 評(píng) 分 </p><p> 20xx年x月xx日至x月xx日</p><p><b> 答辯記錄</b></p>
3、<p> 1、例舉設(shè)計(jì)過(guò)程中遇到的問(wèn)題及其解決方法(至少兩例)。</p><p> 答:(1)問(wèn)題說(shuō)明:</p><p><b> 解決方法:</b></p><p><b> (2)問(wèn)題說(shuō)明:</b></p><p><b> 解決方法:</b><
4、;/p><p> 2、教師現(xiàn)場(chǎng)提的問(wèn)題記錄在此(不少于2個(gè)問(wèn)題)。</p><p><b> 答:</b></p><p><b> 摘 要</b></p><p> 本設(shè)計(jì)是基于單片機(jī)的數(shù)字音樂(lè)盒設(shè)計(jì),該音樂(lè)盒通過(guò)控制單片機(jī)內(nèi)部的定時(shí)器來(lái)產(chǎn)生不同頻率的方波,驅(qū)動(dòng)喇叭發(fā)出不同音調(diào)的音樂(lè),再
5、用Protel99來(lái)畫(huà)系統(tǒng)硬件圖,采用匯編語(yǔ)言進(jìn)行編程,編程后利用KEIL C51來(lái)進(jìn)行編譯,再生成的HEX文件裝入芯片中,采用proteus軟件來(lái)仿真,檢驗(yàn)功能得以正常實(shí)現(xiàn)從而設(shè)計(jì)出數(shù)字音樂(lè)盒。</p><p> 選用單片機(jī)AT89C51來(lái)設(shè)計(jì)制作是由于其功能的實(shí)現(xiàn)主要通過(guò)軟件編程來(lái)完成,降低了硬件電路的復(fù)雜性,而且其成本也有所降低。芯片AT89C51是低功耗、高性能的CMOS型8位單片機(jī)。片內(nèi)帶有4KB的F
6、lash存儲(chǔ)器,且允許在系統(tǒng)內(nèi)改寫或用編程器編程。另外, AT89C51的指令系統(tǒng)和引腳與8051完全兼容,片內(nèi)有128B 的RAM、32條I/O口線、2個(gè)16位定時(shí)計(jì)數(shù)器、5個(gè)中斷源、一個(gè)全雙工串行口等。</p><p> 該音樂(lè)盒的設(shè)計(jì)可以通過(guò)按鍵選擇不同的曲目播放,并通過(guò)LCD顯示歌曲號(hào)及播放時(shí)間。音樂(lè)盒主要由五大模塊構(gòu)成,包括AT89C51芯片、按鈕、蜂鳴器、晶振電路和液晶顯示器。有3個(gè)歌曲選擇鍵供用戶
7、按照自己的喜好選擇音樂(lè),該軟、硬件系統(tǒng)具有很好的通用性,很高的實(shí)際使用價(jià)值。</p><p> 關(guān)鍵詞:數(shù)字音樂(lè)盒; AT89C51; Proteus; KEIL; 匯編語(yǔ)言</p><p><b> 目 錄</b></p><p><b> 1 設(shè)計(jì)任務(wù)1</b></p><p><
8、;b> 2設(shè)計(jì)方案1</b></p><p><b> 2.1任務(wù)分析1</b></p><p><b> 2.2方案設(shè)計(jì)1</b></p><p> 3 系統(tǒng)硬件設(shè)計(jì)3</p><p> 3.1 AT89C51單片機(jī)簡(jiǎn)介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è)計(jì)5</p><p> 4.1外部中斷源系統(tǒng)設(shè)計(jì)5</p><
10、p> 4.2音頻發(fā)生原理6</p><p> 4.3顯示模塊設(shè)計(jì)7</p><p> 5仿真與性能分析8</p><p> 5.1 系統(tǒng)仿真過(guò)程 8</p><p> 5.2 仿真分析
11、 9 </p><p><b> 6設(shè)計(jì)小結(jié)10</b></p><p><b> 參考文獻(xiàn)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è)計(jì)任務(wù)</b></p><p> 利用單片機(jī)設(shè)計(jì)一款簡(jiǎn)單實(shí)用的電子音樂(lè)盒。</p><p><b> 1. 基本要求</b>&
13、lt;/p><p> ?。?)查閱資料,了解單片機(jī)控制單音喇叭發(fā)聲原理; </p><p> ?。?)設(shè)計(jì)基于單片機(jī)的電子音樂(lè)盒; </p><p> ?。?)通過(guò)按鈕可選擇不同的音樂(lè);。</p><p><b> 2. 選做</b></p><p> ?。?)采用LCD顯示信息。</p>
14、;<p> ?。?)開(kāi)機(jī)時(shí)有英文歡迎提示字符,播放時(shí)顯示歌曲序號(hào)(或名稱)。</p><p> ?。?)可通過(guò)功能鍵選擇樂(lè)曲播放。</p><p><b> 2設(shè)計(jì)方案</b></p><p><b> 2.1任務(wù)分析</b></p><p> 本程序主要利用AT89C51芯片,
15、通過(guò)它來(lái)產(chǎn)生一定頻率的音頻脈沖信號(hào)來(lái)實(shí)現(xiàn)課程設(shè)計(jì)的基本要求和附加功能,并可以通過(guò)按鍵播放3首歌曲。</p><p><b> 2.2方案設(shè)計(jì)</b></p><p><b> 1.硬件方案</b></p><p><b> 圖1.硬件原理框圖</b></p><p>
16、AT89C51是一種帶4K字節(jié)閃存可編程可擦除只讀存儲(chǔ)器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS 8位微處理器,俗稱單片機(jī)。AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲(chǔ)器的單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除100次。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由
17、于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡(jiǎn)版本。AT89C51單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。</p><p> ?。?)用P3.0--P3.2控制按鍵。</p><p> (3)用P3.5,P3.6,P3.3作為L(zhǎng)CD的RS,R/W,E的控制信號(hào)。用P1.0--P1.7作為&
18、lt;/p><p> LCD的D0--D7的控制信號(hào)。</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è)計(jì)</b></p><
20、p> 3.1 AT89C51單片機(jī)簡(jiǎn)介</p><p><b> 引腳功能:</b></p><p> P0.0-P0.7:為一個(gè)8位漏級(jí)開(kāi)路雙向I/O口;</p><p> P1.0-P1.7:是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口;</p><p> P2.0-P2.7:為一個(gè)內(nèi)部上拉電阻的8位雙向
21、I/O口;</p><p> P3.0-P3.7:管腳是8個(gè)帶內(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(記時(shí)器0外部輸入);</p><p> P3.6:WR(外部數(shù)據(jù)存儲(chǔ)器寫選通);</p><p> P3.7:RD(外部數(shù)據(jù)存儲(chǔ)器讀選通);</p><p> EA:當(dāng)EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管</p><p> 是否有內(nèi)部程序存儲(chǔ)器
23、。注意加密方式1時(shí),EA將內(nèi)部鎖定為RESET;當(dāng)</p><p> EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器;</p><p> P3.5:T1(記時(shí)器1外部輸入);</p><p> ALE:當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié);</p><p> PSEN:外部程序存儲(chǔ)器的選通信號(hào);</p>
24、<p><b> RST:復(fù)位輸入;</b></p><p> XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入;</p><p> XTAL2:來(lái)自反向振蕩器的輸出。</p><p><b> 3.2 晶振電路</b></p><p> 晶振電路采用12MHZ的晶振
25、頻率工作,取起振電路中C1,C2均為22pf。它們分別接在晶振的兩個(gè)腳上和對(duì)地的電容,會(huì)影響到晶振的諧振頻率和輸出幅度。晶體旁邊的兩個(gè)電容接地, 實(shí)際上就是電容三點(diǎn)式電路的分壓電容, 接地點(diǎn)就是分壓點(diǎn). 以接地點(diǎn)即分壓點(diǎn)為參考點(diǎn), 振蕩引腳的輸入和輸出是反相的, 但從并聯(lián)諧振回路即石英晶體兩端來(lái)看, 形成一個(gè)正反饋以保證電路持續(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> 采用三個(gè)按鈕,分別用于選擇播放三首
27、歌。</p><p> 3.4 LCD顯示電路</p><p> LCD顯示模塊采用14引腳的LM032L芯片,它有八個(gè)數(shù)據(jù)端口,三個(gè)控制口。當(dāng)控制口R/W為低電平時(shí),單片機(jī)向LCD寫入指令,當(dāng)其為高電平時(shí),單片機(jī)讀取LCD的信息。單片機(jī)的P3.5,P3.6,P3.3分別作為L(zhǎng)CD的RS,R/W,E的控制信號(hào)。用P1.0~P1.7作為L(zhǎng)CD的D0~D7的控制信號(hào)。用LCD來(lái)顯示開(kāi)機(jī)歡迎
28、字符及播放歌曲信息。 </p><p><b> 3.5 蜂鳴器</b></p><p> 蜂鳴器發(fā)聲原理是電流通過(guò)電磁線圈,</p><p> 使電磁線圈產(chǎn)生磁場(chǎng)來(lái)驅(qū)動(dòng)振動(dòng)膜發(fā)聲的。</p><p><b> 4 系統(tǒng)軟件設(shè)計(jì)</b></p><p>
29、 4.1 外部中斷源系統(tǒng)設(shè)計(jì)</p><p> 在本設(shè)計(jì)中中斷源是采用外部中斷0方式,其入口地址是0003H。其中斷響應(yīng)級(jí)別最高。</p><p> (1)定時(shí)器/計(jì)數(shù)器</p><p> 工作方式寄存器TMOD用于選擇定時(shí)器/計(jì)數(shù)器的工作方式和工作模式。</p><p><b> 門控位—GATE</b>&l
30、t;/p><p> 工作方式選擇位—M1、M0</p><p> —計(jì)數(shù)器模式和定時(shí)器模式選擇位</p><p> =0,為定時(shí)器模式。</p><p><b> =1,為計(jì)數(shù)模式。</b></p><p> 本設(shè)計(jì)中采用方式1的16位定時(shí)器/計(jì)數(shù)器。</p><p>
31、; 定時(shí)器/計(jì)數(shù)器控制寄存器TCON,其格式如下:</p><p> TF1、TF0—計(jì)數(shù)溢出標(biāo)志位當(dāng)計(jì)數(shù)器溢出時(shí),該位置1。</p><p> TR1、TR0—計(jì)數(shù)運(yùn)行控制位</p><p> 4.2 音頻發(fā)生原理</p><p> 要生產(chǎn)音頻脈沖,只要算出某一音頻的周期(1/頻率),然后將此周期除以2,</p>&
32、lt;p> 即為半周期的時(shí)間。利用定時(shí)器計(jì)時(shí)這個(gè)半周期時(shí)間,每當(dāng)計(jì)時(shí)到后就將輸 </p><p> 出脈沖的I/O反相,然后重復(fù)計(jì)時(shí)此半周期時(shí)間再對(duì)I/O反相,就可在I/O</p><p> 腳上得到此頻率的脈沖。</p><p> 利用8051的內(nèi)部定時(shí)器使用其工作在計(jì)數(shù)器模式MODE1下,改變計(jì)數(shù)值THO </p><p>
33、 及TLO以產(chǎn)生不同頻率的方法。</p><p> 例如頻率為523Hz,其周期T=1/523=1912us,因此只要令計(jì)數(shù)器計(jì)時(shí)</p><p> 956us/1us=956,在每次計(jì)數(shù)956次時(shí)將I/O反相,就可得到中音DO</p><p><b> (523Hz). </b></p><p> 計(jì)數(shù)脈沖值
34、與頻率的關(guān)系公式如下:</p><p> N=Fi÷2÷Fr </p><p><b> N: 計(jì)算值;</b></p><p> Fi: 內(nèi)部計(jì)時(shí)一次為1us, 故其頻率為1MHz;</p><p> 其計(jì)數(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)的計(jì)算值.</p><p> T=65536-N=65536-Fi÷2÷Fr=65536-1000000
36、÷2÷Fr</p><p> =65536-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)各音符頻率與計(jì)數(shù)值T的對(duì)照表如表所示。</p><p> 4.3 顯示模塊設(shè)計(jì)</p><p> 本設(shè)計(jì)選用LM016L芯片顯示。LCD液晶投影機(jī)是液晶顯示技術(shù)和投影技術(shù)相結(jié)合的產(chǎn)物,它利用了液晶的電光效應(yīng),通過(guò)電路控制液晶單元的透射率及反射率,從而產(chǎn)生不同灰度層次及多達(dá)1670萬(wàn)種色彩的靚麗圖像。LCD投影機(jī)的主要成像器件是液晶板。LCD投影機(jī)的
38、體積取決于液晶板的大小,液晶板越小,投影機(jī)的體積也就越小。</p><p> LM016L液晶模塊采用HD44780控制器。HD44780具有簡(jiǎn)單而功能較強(qiáng)的指令集,可以實(shí)現(xiàn)字符移動(dòng)、閃爍等功能。LM016L與單片機(jī)MCU(Microcontroller Unit)通訊可采用8位或者4位并行傳輸兩種方式。HD44780控制器由兩個(gè) 8位寄存器、指令寄存器( IR)和數(shù)據(jù)寄存器(DR)、忙標(biāo)志(BF)、顯示數(shù)據(jù)
39、RAM(DDRAM)、字符發(fā)生器ROM(CGROM)、字符發(fā)生器 RAM(CGRAM)、地址計(jì)數(shù)器( AC)。IR用于寄存指令碼,只能寫入不能讀出;DR用于寄存數(shù)據(jù),數(shù)據(jù)由內(nèi)部操作自動(dòng)寫入 DDRAM和CGRAM,或者暫存從DDRAM和CGRAM讀出的數(shù)據(jù)。BF為 1時(shí),液晶模塊處于內(nèi)部處理模式,不響應(yīng)外部操作指令和接受數(shù)據(jù)。DDRAM用來(lái)存儲(chǔ)顯示的字符,能存儲(chǔ) 80個(gè)字符碼。 </p><p><b>
40、; 5 仿真與性能分析</b></p><p> 5.1 系統(tǒng)仿真過(guò)程</p><p> 按照上面設(shè)計(jì)的電路在proteus軟件內(nèi)畫(huà)圖,選擇需要的芯片及參數(shù),按照原理圖畫(huà)出仿真圖,打開(kāi)單片機(jī)軟件開(kāi)發(fā)系統(tǒng)Keil,選擇89C51單片機(jī),在其中編寫程序(源程序見(jiàn)附錄),運(yùn)行生成一個(gè)后綴名為hex的文件,然后將該文件下載到proteus中的AT89C51單片機(jī)中進(jìn)行仿真,觀察實(shí)
41、驗(yàn)現(xiàn)象。仿真能實(shí)現(xiàn)播放音樂(lè),按鍵選擇曲目的功能。</p><p><b> 仿真原理圖:</b></p><p><b> 運(yùn)行界面:</b></p><p><b> 5.2 仿真分析</b></p><p> 現(xiàn)象結(jié)果:當(dāng)按下按鈕后LCD上會(huì)顯示歡迎字符且其所對(duì)應(yīng)的
42、歌曲能正常播放。</p><p> 程序調(diào)試中出現(xiàn)的問(wèn)題及解決的辦法:</p><p> ?。?)有時(shí)編寫的程序沒(méi)有錯(cuò)誤,卻在電腦輸入時(shí)沒(méi)有按照規(guī)范的格式,以致程序無(wú)法正常運(yùn)行,這浪費(fèi)了很多時(shí)間,所以還是得注重細(xì)節(jié);</p><p> ?。?)在檢查錯(cuò)誤時(shí),大篇的程序感覺(jué)無(wú)從下手,在平時(shí)編程的時(shí)候就得注意在關(guān)鍵的地方留下注釋,以便以后的檢驗(yàn)和修改;</p&g
43、t;<p> ?。?)流程圖對(duì)編程來(lái)說(shuō)很重要,能使思路清晰;</p><p> ?。?)設(shè)計(jì)原理圖時(shí)經(jīng)常會(huì)用到自己平時(shí)都沒(méi)接觸過(guò)的芯片,所以要上網(wǎng)查找資料,了解其原理才方便設(shè)計(jì)。</p><p> ?。?)在播放歌曲時(shí)LCD無(wú)法顯示歌曲信息和播放時(shí)間。這個(gè)問(wèn)題無(wú)論怎么修改編程依舊無(wú)法解決。</p><p><b> 設(shè)計(jì)小結(jié)</b&g
44、t;</p><p> 由于是上學(xué)期學(xué)的單片機(jī)知識(shí),而這學(xué)期來(lái)做課程設(shè)計(jì),中間相隔很長(zhǎng)一段時(shí)間,以至于剛拿到這個(gè)課題無(wú)所適從。于是又把課本和筆記拿出來(lái)溫習(xí)一遍,網(wǎng)上查找了些相關(guān)資料,才有了點(diǎn)設(shè)計(jì)的概念和頭緒。這次的課程設(shè)計(jì)為期一周,感覺(jué)時(shí)間有點(diǎn)緊迫,所以只是在完成基本要求的基礎(chǔ)上稍稍有點(diǎn)拓展。本次課程設(shè)計(jì)使我第一次真正意義上用自己的專業(yè)知識(shí)和技能來(lái)設(shè)計(jì)一個(gè)完整的作品,這使得我得到了很大的鍛煉和提高,雖說(shuō)這過(guò)程非
45、常的難熬,花費(fèi)了很多的時(shí)間,但看到自己的勞動(dòng)得到了成果就覺(jué)得值得了。</p><p> 在這次設(shè)計(jì)中,我完成了一個(gè)基于單片機(jī)的數(shù)字音樂(lè)盒設(shè)計(jì),盡管結(jié)果并算不上完美,但是我努力了,獲得了豐富的知識(shí),完善了大學(xué)三年中理論與實(shí)踐相結(jié)合的學(xué)習(xí)。我從資料的收集中,掌握了很多單片機(jī)的知識(shí),讓我對(duì)我所學(xué)過(guò)的知識(shí)有所鞏固和提高,在遇到困難時(shí)虛心請(qǐng)教同學(xué),和同學(xué)的討論也使我受益匪淺,拓寬了設(shè)計(jì)思路,可以說(shuō)音樂(lè)盒的完成少不了同學(xué)的
46、幫助和支持。在仿真過(guò)程中我大致學(xué)會(huì)了proteus和keil軟件的應(yīng)用,雖說(shuō)算不上精通,但也會(huì)基本的操作和運(yùn)行,這也為日后從事這方面的工作打下了一個(gè)良好的基礎(chǔ)。單片機(jī)是一個(gè)需要細(xì)心的學(xué)科,在本次課程設(shè)計(jì)中,很多次都是因?yàn)樽约旱牟患?xì)心才導(dǎo)致走了許多彎路,浪費(fèi)了很多時(shí)間,這是我明白什么才是細(xì)節(jié)決定成敗。</p><p> 雖說(shuō)設(shè)計(jì)的過(guò)程是很糾結(jié)很痛苦的,但我相信只要度過(guò)了這個(gè)過(guò)程,我的知識(shí)和經(jīng)驗(yàn)終將上升一個(gè)臺(tái)階,我
47、想這也就是我們以后邁入社會(huì)所擁有的最寶貴的東西了吧!</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 秦實(shí)宏,徐春輝.MCS-51單片機(jī)原理及應(yīng)用[M].武漢:華中科技大學(xué)出版社,2010.6</p><p> [2] 杜樹(shù)春.基于Proteus和Keil C51的單片機(jī)設(shè)計(jì)與仿真.北京:電子工業(yè)出版社,2012&l
48、t;/p><p> [3] 譚浩強(qiáng).C程序設(shè)計(jì).第三版,北京:清華大學(xué)出版社,2005:105</p><p> [4] 張毅剛.單片機(jī)原理及應(yīng)用[M].北京:高等教育出版社,2008.</p><p> [5] 周堅(jiān).單片機(jī)C語(yǔ)言輕松入門[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"//頭文件見(jiàn)后</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點(diǎn)陣,8位數(shù)據(jù)接口</p><p> w_cmd(0x0c); // 顯示器開(kāi)、光標(biāo)開(kāi)、光標(biāo)允許閃爍</p><p> w_cmd(0x06); // 文字不動(dòng),光標(biāo)自動(dòng)右移</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();//檢測(cè)按鍵</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()//按鍵檢測(cè)子程序</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);//等待松手,松開(kāi)后跳出程序</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) //延時(shí)子程序</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 //定義普通音符演奏的長(zhǎng)度分率,//每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;//音符定時(shí)器初值暫存 </p><p> unsigned char Sound_Temp_TH1,Sound_Tem
121、p_TL1;//音長(zhǎng)定時(shí)器初值暫存</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;// 計(jì)算TL1應(yīng)裝入的初值 </p><p> Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256;
123、// 計(jì)算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. 本站所有資源如無(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子音樂(lè)盒(單片機(jī)課程設(shè)計(jì))
- 電子音樂(lè)盒單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告--電子音樂(lè)盒的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---電子音樂(lè)盒的設(shè)計(jì)
- 電子音樂(lè)盒課程設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)基于單片機(jī)的電子音樂(lè)盒設(shè)計(jì)
- 單片機(jī)電子音樂(lè)盒課程設(shè)計(jì)說(shuō)明書(shū)
- 單片機(jī)課程設(shè)計(jì)--電子音樂(lè)設(shè)計(jì)
- 電子音樂(lè)盒設(shè)計(jì)【開(kāi)題報(bào)告】
- 畢業(yè)論文---基于單片機(jī)的電子音樂(lè)盒
- 單片機(jī)課程設(shè)計(jì)報(bào)告 音樂(lè)盒設(shè)計(jì)
- 單片機(jī)音樂(lè)盒課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--音樂(lè)盒
- 音樂(lè)盒單片機(jī)課程設(shè)計(jì)
- 單片機(jī)音樂(lè)盒課程設(shè)計(jì)
- 單片機(jī)音樂(lè)盒課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--電子音樂(lè)播放器
- 電子音樂(lè)盒的設(shè)計(jì)【任務(wù)書(shū)】
- 單片機(jī)原理課程設(shè)計(jì)---音樂(lè)盒的設(shè)計(jì)
- 電子音樂(lè)盒的設(shè)計(jì)【畢業(yè)論文】
評(píng)論
0/150
提交評(píng)論