版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目錄</b></p><p><b> 一、引言1</b></p><p><b> 二、設(shè)計(jì)任務(wù)1</b></p><p><b> 三、方案論證1</b></p><p> 四.音頻發(fā)聲知識(shí)2</p&
2、gt;<p><b> 1、基本知識(shí)2</b></p><p><b> 2、節(jié)拍3</b></p><p><b> 3、編碼4</b></p><p> 五、音樂盒單路原理分析5</p><p><b> 1、硬件原理5</
3、b></p><p> 2、軟件程序設(shè)計(jì)8</p><p><b> 3、程序調(diào)試9</b></p><p><b> 六、結(jié)論與心得9</b></p><p><b> 七、參考文獻(xiàn)10</b></p><p><b>
4、 八、附錄10</b></p><p><b> 1、程序10</b></p><p> 2、PCB板圖23</p><p><b> 一、引言</b></p><p> 本文是應(yīng)用MCS-51單片機(jī)原理和控制理論設(shè)計(jì)音樂演奏控制器的硬件電路,并利用匯編語言進(jìn)行程序設(shè)計(jì)。
5、通過控制單片機(jī)內(nèi)部的定時(shí)器來產(chǎn)生不同頻率的方波,驅(qū)動(dòng)喇叭發(fā)出不同音調(diào)的音樂,再利用延遲來控制發(fā)音時(shí)間的長(zhǎng)短。把樂譜轉(zhuǎn)化成相應(yīng)的定時(shí)常數(shù)就可以從發(fā)音設(shè)備中演奏出悅耳動(dòng)聽的音樂。</p><p> 這種控制電路結(jié)構(gòu)簡(jiǎn)單,可靠性高,應(yīng)用性強(qiáng);軟件程序適應(yīng)范圍廣,對(duì)于不同的音樂只需要改變相應(yīng)的定時(shí)常數(shù)即可。對(duì)單片機(jī)和音樂愛好者有一定的借鑒價(jià)值。</p><p><b> 二、設(shè)計(jì)任務(wù)
6、 </b></p><p> 設(shè)計(jì)題目: 單片機(jī)音樂播放器 </p><p><b> 設(shè)計(jì)要求:</b></p><p> 1、完成89S51的外圍復(fù)位、時(shí)鐘和電源等外圍電路的設(shè)計(jì),完成揚(yáng)聲器驅(qū)動(dòng)設(shè)計(jì)。</p><p> 2、根據(jù)各音階頻率算出定時(shí)器定時(shí)常數(shù),根據(jù)節(jié)拍給出該音階
7、持續(xù)的時(shí)間。 </p><p> 3、完成音樂播放軟件并完成樂譜表的翻譯,最好能編寫一個(gè)播放子程序用于播放。 4、播放音樂片段。</p><p><b> 三、方案論證</b></p><p><b> 設(shè)計(jì)方案: </b></p><p> 設(shè)計(jì)中我們考慮了兩種設(shè)計(jì)方案,兩種設(shè)計(jì)方案中主
8、要去區(qū)別在于硬件電路的不同,對(duì)于本設(shè)計(jì)通過模擬電路和單片機(jī)設(shè)計(jì)均可以實(shí)現(xiàn),最后根據(jù)設(shè)計(jì)要求、可行性和設(shè)計(jì)成本的考慮選擇了單片機(jī)設(shè)計(jì)的方案?,F(xiàn)在一一介紹論證如下:</p><p> 采用單片機(jī)來設(shè)計(jì)電路。此電路包括時(shí)鐘電路、復(fù)位電路、音樂驅(qū)動(dòng)電路和MCS-51單片機(jī)。各部分功能如下:</p><p> 時(shí)鐘電路:由石英晶體振蕩器產(chǎn)生單片機(jī)工作時(shí)所必須的時(shí)鐘信號(hào)。振蕩器采用12M的晶振,使
9、之機(jī)器周期 Tcy=1us,方便發(fā)音程序的計(jì)算和編譯。</p><p> 復(fù)位單路:由復(fù)位按鍵使單片機(jī)的CPU和系統(tǒng)中其他部件都處于一個(gè)確定的初始狀態(tài),并從這個(gè)狀態(tài)開始工作。</p><p> 音樂驅(qū)動(dòng)電路:由于單片機(jī)最大灌入電流為3.2mA,所以選用PNP管,并要在PNP的基極和發(fā)射極加限流電阻。</p><p> 顯示電路:使用單片機(jī)P0端口做顯示電路,要
10、在P0口加上拉電阻(5~10kΩ)。</p><p> 還要加限流電阻,保護(hù)單片機(jī)。</p><p> ?。?) 按鍵電路:有外部中斷輸入和定時(shí)/計(jì)數(shù)器的外部輸入都是低電平有效,可以和復(fù)位電路相視,只要將復(fù)位電路中的電容去掉即可。</p><p><b> 四.音頻發(fā)聲知識(shí)</b></p><p><b>
11、 1、基本知識(shí)</b></p><p> 1.要生產(chǎn)音頻脈沖,只要算出某一音頻的周期(1/頻率),然后將此周期除以2,即為半周期的時(shí)間.利用定時(shí)器計(jì)時(shí)這個(gè)半周期時(shí)間,每當(dāng)計(jì)時(shí)到后就將輸出脈沖的I/O反相,然后重復(fù)計(jì)時(shí)此半周期時(shí)間再對(duì)I/O反相,就可在I/O腳上得到此頻率的脈沖.</p><p> 2. 利用8051的內(nèi)部定時(shí)器使用其工作在計(jì)數(shù)器模式MODE1下,改變計(jì)數(shù)值
12、THO及TLO以產(chǎn)生不同頻率的方法.</p><p> 3. 例如頻率為523Hz,其周期T=1/523=1912us,因此只要令計(jì)數(shù)器計(jì)時(shí)956us/1us=956,在每次計(jì)數(shù)956次時(shí)將I/O反相,就可得到中音DO (523Hz). </p><p> 計(jì)數(shù)脈沖值與頻率的關(guān)系公式如下:</p><p> N=Fi÷2÷Fr
13、N: 計(jì)算值;</p><p> Fi: 內(nèi)部計(jì)時(shí)一次為1us, 故其頻率為1MHz;</p><p> 4. 其計(jì)數(shù)值的求法如下:</p><p> T=65536-N=65536-Fi÷2÷Fr</p><p> 例如: 設(shè)K=65536, F=1000000=Fi=1MHz, 求低音DO(261Hz).中音D
14、O (523Hz). 高音的DO (1046Hz)的計(jì)算值.</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=65536
15、-500000/523=64580</p><p> 高音DO的 T=65536-500000/1047=65059</p><p> 5. C調(diào)各音符頻率與計(jì)數(shù)值T的對(duì)照表如表1所示.</p><p><b> 2、節(jié)拍</b></p><p><b> 1相關(guān)知識(shí)</b></p&g
16、t;<p> 每個(gè)音符使用1個(gè)字節(jié),字節(jié)的高4位代表音符的高低,低4位代表音符的節(jié)拍,表2為節(jié)拍與節(jié)拍碼的對(duì)照.如果1拍為0.4秒,1/4拍是0.1秒,只要設(shè)定延遲時(shí)間就可求得節(jié)拍的時(shí)間.假設(shè)1/4拍為1DELAY,則1拍應(yīng)為4DELAY,以此類推.所以只要求得1/4拍的DELAY時(shí)間,其余的節(jié)拍就是它的倍數(shù),如表3為1/4和1/8節(jié)拍的時(shí)間設(shè)定.</p><p><b> 表2
17、節(jié)</b></p><p><b> 拍與節(jié)拍碼對(duì)照</b></p><p> 表3 各調(diào)1/4節(jié)拍的時(shí)間設(shè)定 各調(diào)1/8節(jié)拍的時(shí)間設(shè)定</p><p><b> 3、編碼</b></p><p><b> 建立音樂的步驟:</b></p
18、><p> 1. 先把樂譜的音符找出,然后由表63建立T值表的順序.</p><p> 2. 把T值勤表建立在TABLE1,構(gòu)成發(fā)音符的計(jì)數(shù)值放在"TABLE".</p><p> 3. 簡(jiǎn)譜碼(音符)為高位,節(jié)拍為(節(jié)拍數(shù))為低4位,音符節(jié)拍碼放在程序的"TABLE"處.</p><p> 表4
19、 簡(jiǎn)譜對(duì)應(yīng)的簡(jiǎn)譜碼.T值. 節(jié)拍數(shù)</p><p><b> 原理分析:</b></p><p><b> (1)原理圖說明:</b></p><p> 當(dāng)鍵盤有鍵按下時(shí),判斷鍵值,啟動(dòng)計(jì)數(shù)器T0,產(chǎn)生一定頻率的脈沖,驅(qū)動(dòng)蜂鳴器,放出樂曲。同時(shí)啟動(dòng)定時(shí)器T1,顯示歌曲號(hào)。</p><p>
20、?、?硬件電路中用、(外部中斷0、1輸入端P3.2 P3.3)分別接S1、S2作為上、下一曲的功能鍵。</p><p> 硬件電路中用T1(外部定時(shí)/計(jì)數(shù)器輸入端P3.5)分別接S3作為暫停的功能鍵。</p><p> ?、?用P0.0-P0.7控制七段碼a,b,c,d,e,f,g,Dp。</p><p> ?、?用P2.3口控制喇叭。</p>
21、<p> ④.電路為12MHZ晶振頻率工作,起振電路中C1,C2均為30pf。</p><p><b> ?。?)元件介紹</b></p><p> ①.AT89S51元件介紹</p><p> AT89S51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器(FPEROM—Falsh Programmable and Erasa
22、ble Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機(jī)。</p><p> ?、?AT89S51引腳的排列、名稱、功能和用法</p><p> AT89S51采用標(biāo)準(zhǔn)雙列直插式引腳DIP-40大規(guī)模集成電路封裝。它的引引腳排列如下圖所示:</p><p> AT89S51的引腳排列</p><p>&l
23、t;b> 引腳介紹:</b></p><p><b> VCC:供電電壓。</b></p><p><b> GND:接地。</b></p><p> P0口:P0口為一個(gè)8位漏級(jí)開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)
24、器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(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口作為第八位地
25、址接收。 </p><p> P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)
26、器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。</p><p> P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p><p> P3口也可作為AT89
27、C51的一些特殊功能口,如下表所示:</p><p> P3口管腳 備選功能:</p><p> P3.0 RXD(串行輸入口)</p><p> P3.1 TXD(串行輸出口)</p><p> P3.2 INT0(外部中斷0)</p><p> P3.3 INT1(外部中斷1)</p>&l
28、t;p> P3.4 T0(記時(shí)器0外部輸入)</p><p> P3.5 T1(記時(shí)器1外部輸入)</p><p> P3.6 WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)</p><p> P3.7 RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)</p><p> P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。</p><p>
29、RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。</p><p> ALE/PROG:當(dāng)訪問外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過一個(gè)ALE脈沖。如
30、想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。</p><p> PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。</p><p> EA/V
31、PP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p> XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。</p><p> XTAL2:來自反向振蕩器的
32、輸出。</p><p><b> 振蕩器特性:</b></p><p> XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時(shí)鐘信號(hào)要通過一個(gè)二分頻觸發(fā)器,因此對(duì)外部時(shí)鐘信號(hào)的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。</p&g
33、t;<p><b> 表5 元器件清單:</b></p><p><b> 2、軟件程序設(shè)計(jì)</b></p><p><b> 圖2 程序總框圖</b></p><p><b> 3、程序調(diào)試</b></p><p> 程序調(diào)試中出
34、現(xiàn)的問題及解決的辦法:</p><p> 有時(shí)會(huì)出現(xiàn)程序一點(diǎn)錯(cuò)誤也沒有,但就是不能正常運(yùn)行的現(xiàn)象,最后我們發(fā)現(xiàn)是因?yàn)槌绦蛑杏械闹噶顣鴮懙貌灰?guī)范導(dǎo)致的,例如有的RET返回指令一定要按正確格式書寫或在兩行指令間最好不要留空行。</p><p> 程序中的跳轉(zhuǎn)指令的運(yùn)用很重要,為保險(xiǎn)起見,都用LJMP,我們就遇到過跳轉(zhuǎn)指令用錯(cuò)程序無法正常運(yùn)行的現(xiàn)象。當(dāng)用JNZ指令時(shí),跳轉(zhuǎn)范圍比較少,這時(shí)要用
35、一個(gè)標(biāo)號(hào)中轉(zhuǎn)。</p><p> 編程時(shí)要注意,在程序開始時(shí),要寫入各定時(shí)器中斷的入口地址。</p><p> 編程過程中要注意加注釋或分割線,否則,在程序過長(zhǎng)時(shí)容易變得很亂,不便于查找或更改。</p><p> 編程前要加流程圖,這樣會(huì)使思路清晰,例如數(shù)字音樂盒的設(shè)計(jì)思路完全可以按著MP3的工作方式列寫流程圖。</p><p><
36、;b> 六、結(jié)論與心得</b></p><p> 此次設(shè)計(jì)過程中,我們查了一些相關(guān)資料,使得我們更深層的了解了單片機(jī)芯片的工作原理以及軟件、硬件如何聯(lián)系起來實(shí)現(xiàn)我們的要求。經(jīng)過我們共同努力之下,不僅完成本次設(shè)計(jì)的具體相關(guān)要求,也熟練掌握了AT89C51芯片的具體功能和注意事項(xiàng)。</p><p> 此外,設(shè)計(jì)中所涉及到的元器件還有:三極管、電阻、瓷片電容等,我們通過查
37、了相關(guān)元器件的作用及其工作原理,并對(duì)其進(jìn)行驗(yàn)算,從而進(jìn)一步地減少實(shí)驗(yàn)誤差。在我們的不懈努力下加上老師的些許指導(dǎo),最終還是發(fā)現(xiàn)了問題的原因,我們從而查找相關(guān)資料和不斷地試驗(yàn)最終實(shí)現(xiàn)了樂曲的播放。</p><p> 在整個(gè)設(shè)計(jì)過程中,我們不僅能將書本上學(xué)到的關(guān)于單片機(jī)相關(guān)的知識(shí)于實(shí)踐相結(jié)合,而且還培養(yǎng)了團(tuán)隊(duì)合作精神以及提高了自學(xué)能力。這將對(duì)我們今后的實(shí)踐提供了有很大的基礎(chǔ)。它更加讓我們意識(shí)到:理論和實(shí)踐相結(jié)合的重要
38、性。雖然電路看上比較簡(jiǎn)單,但實(shí)際行動(dòng)起來將會(huì)遇到許多挫折以及其它一些客觀的因素。因此,設(shè)計(jì)過程中要保持一種持之以恒、嚴(yán)謹(jǐn)?shù)脑O(shè)計(jì)作風(fēng)思想,這樣才會(huì)在遇到問題時(shí)能夠發(fā)現(xiàn)和解決問題。</p><p> 設(shè)計(jì)已經(jīng)結(jié)束,但它留給我們的不單是作品,更是一堂生動(dòng)的課程。它教會(huì)我們只有不斷努力、不斷吸取經(jīng)驗(yàn)和教訓(xùn)和團(tuán)結(jié)合作才會(huì)取得最終的成功!我相信經(jīng)過此次設(shè)計(jì),我們今后會(huì)取得更大的成功的!</p><p&g
39、t;<b> 七、參考文獻(xiàn)</b></p><p> [1] 許珉.單片機(jī)原理及應(yīng)用[M].北京:中國(guó)電力出版社,2007.08</p><p> [2] 三恒星科技.MCS-51單片機(jī)原理與應(yīng)用實(shí)例[M]. 北京:電子工業(yè)出版社,2008.01</p><p><b> 八、附錄</b></p>
40、<p><b> 1、程序</b></p><p> OUT BIT P2.3 ;定義音頻輸出端口,p2.3</p><p> N EQU 9;歌曲總數(shù)</p><p> OUT_NUM EQU P0;數(shù)碼管顯視當(dāng)前所放歌曲曲數(shù)</p><
41、;p><b> ORG 0000H</b></p><p><b> AJMP MAIN</b></p><p><b> ORG 0003H</b></p><p> AJMP LAST_SONG ;外部中斷0用于接上一曲歌按鍵</p><p&
42、gt;<b> ORG 000BH</b></p><p> AJMP F_T0 ;定時(shí)器0用于定時(shí),作音符發(fā)生器用</p><p><b> ORG 0013H</b></p><p> q4: AJMP NEXT_SONG ;外部中斷1接下一曲歌按鍵&l
43、t;/p><p><b> ORG 001BH</b></p><p> AJMP START_PAUSE ;定時(shí)器1用計(jì)數(shù),這里用作中斷,接開始/暫停鍵,初值為0ffH,方式2</p><p><b> ORG 0030H</b></p><p> MAIN: MOV SP,
44、#60H</p><p> MOV DPTR,#TABLE ;DPRT指向每首歌曲的入口地址的地址。</p><p> MOV R0,#30H ;R0中存入數(shù)據(jù)30H,這里在以30H開始的單元存放每首歌曲的入口地址,其中30H,31H存放</p><p> ;歌曲的節(jié)拍入口地址,32H,33H存放歌曲
45、音符入口地址,每首歌占用四個(gè)存儲(chǔ)存單元。</p><p> MOV R5,#00H ;R5中存放表TABLE中正在執(zhí)行操作的序號(hào)</p><p> MOV R6,#1 ;R6存放正在設(shè)置入口信息的歌曲數(shù)</p><p> SET_TAB: MOV A,R5 ;設(shè)置每首歌曲的入口信息,
46、存放在以30H開始的存儲(chǔ)單元中。</p><p> MOVC A,@A+DPTR</p><p><b> MOV @R0,A</b></p><p><b> INC R5</b></p><p><b> INC R0</b></p><p>
47、;<b> MOV A,R5</b></p><p> MOVC A,@A+DPTR</p><p><b> MOV @R0,A</b></p><p><b> INC R5</b></p><p><b> INC R0</b></p
48、><p><b> MOV A,R5</b></p><p> MOVC A,@A+DPTR</p><p><b> MOV @R0,A</b></p><p><b> INC R0</b></p><p><b> INC R5&l
49、t;/b></p><p><b> MOV A,R5</b></p><p> MOVC A,@A+DPTR</p><p><b> MOV @R0,A</b></p><p><b> INC R0</b></p><p><b
50、> INC R5</b></p><p> INC R6 ;設(shè)置完一首歌曲后,歌曲數(shù)加一</p><p> CJNE R6,#N+1,SET_TAB ;是否設(shè)置完,沒有便繼續(xù),否則進(jìn)行下面的操作</p><p> ;**********************************
51、* 對(duì)中斷,計(jì)數(shù)器的相關(guān)參數(shù)進(jìn)行設(shè)置</p><p> MOV TMOD, #61H;計(jì)數(shù)器0工作方式1,計(jì)數(shù)器1工作方式2</p><p> MOV TH1,#0FFH;給計(jì)數(shù)器1置初值0FFH,又由于是工作方式2,所以</p><p> MOV TL1,#0FFH;計(jì)數(shù)器計(jì)數(shù)為1,相當(dāng)于一外部中斷。</p><
52、;p> SETB ET1 ;允許計(jì)數(shù)器1中斷</p><p> SETB ET0 ;允許計(jì)數(shù)器具0中斷</p><p> CLR PT0 ;計(jì)數(shù)器0為低優(yōu)先級(jí)</p><p> SETB PT1
53、 ;計(jì)數(shù)器1為高優(yōu)先級(jí)</p><p> SETB IT0 ;外部中斷0為跳沿觸發(fā)</p><p> SETB PX0 ;高優(yōu)先級(jí)</p><p> SETB IT1 ;外部中
54、斷1為跳沿觸發(fā)</p><p> SETB PX1 ;高優(yōu)先級(jí)</p><p> SETB EX1 ;允許外部中斷1中斷</p><p> SETB EX0 ;允許外部中斷定0中斷</p>
55、;<p> SETB EA ;開中斷總開關(guān)</p><p> SETB TR1 ;定時(shí)器1開始工作,作中斷用</p><p> SETB OUT ;音頻輸出端口初始化</p><p>
56、 ;*********************************** ;設(shè)置結(jié)束</p><p> CLR F0 ;設(shè)置F0=0,用來作暫停/播放的標(biāo)置位用</p><p> MOV 22H,#01H ;22H單元中存放正在播放的歌曲編號(hào)</p>
57、<p> MOV DPTR,#OUT_TAB ;將正在播放的歌曲編號(hào)送數(shù)碼管顯視</p><p><b> MOV A,22H</b></p><p> MOVC A,@A+DPTR</p><p> MOV OUT_NUM,A</p><p> MOV R7,
58、#00H ;R7中存放歌曲總信息的入口地址</p><p> START0:MOV R4,#00H ;R4存放當(dāng)前正在播放歌曲的第幾個(gè)節(jié)拍數(shù)</p><p> MOV R0,#30H ;30H開始的單元中存放歌曲的入口信息</p><
59、;p> MOV A,R7 ;將歌曲的節(jié)拍表的入口地址送到DPTR</p><p><b> ADD A,R0</b></p><p><b> MOV R0,A</b></p><p> MOV DPH,@R0</p><p>
60、<b> INC R0</b></p><p> MOV DPL,@R0</p><p><b> INC R0</b></p><p><b> MOV A,R4</b></p><p><b> INC R4</b></p>&
61、lt;p> MOVC A,@A+DPTR ;取出第一節(jié)拍數(shù),其實(shí)第一個(gè)節(jié)拍不是歌曲的第一個(gè)節(jié)拍,而是表示幾分音符</p><p> ;****************************************************</p><p> MOV 26H,A ;將取出的音符數(shù)+節(jié)拍數(shù)保存在職26H單元中</p><p>
62、 NEXT: MOV R0,#30H ;開始取出歌曲的第一個(gè)數(shù)據(jù)</p><p><b> MOV A,R7</b></p><p><b> ADD A,R0</b></p><p><b> MOV R0,A</b></p><p> MOV DPH,@R
63、0</p><p><b> INC R0</b></p><p> MOV DPL,@R0</p><p><b> INC R0</b></p><p><b> MOV A,R4</b></p><p><b> INC R4&
64、lt;/b></p><p> MOVC A,@A+DPTR;放在A中</p><p> ;****************************</p><p> JZ END0 ;若為0,則表示為休止符,不唱,本次音符不唱,</p><p> MOV R1,A ;不為0,取出節(jié)拍數(shù)&l
65、t;/p><p> ANL A,#0FH</p><p><b> MOV R2,A</b></p><p><b> MOV A,R1</b></p><p><b> SWAP A</b></p><p> ANL A,#0FH</p&g
66、t;<p> JNZ SING ;音符不為0,唱</p><p> CLR TR0 ;為0,不唱,關(guān)頻率發(fā)生器</p><p> SJMP SING1</p><p> SING: DEC A ;開始唱,進(jìn)行相應(yīng)的數(shù)據(jù)處理</p><p&g
67、t;<b> MOV R3,A</b></p><p><b> RL A</b></p><p> MOV DPH,@R0</p><p><b> INC R0</b></p><p> MOV DPL,@R0</p><p><b&
68、gt; INC R0</b></p><p> MOVC A,@A+DPTR</p><p><b> MOV 21H,A</b></p><p><b> MOV TH0,A</b></p><p><b> MOV A,R3</b></p>
69、;<p><b> RL A</b></p><p><b> INC A</b></p><p> MOVC A,@A+DPTR</p><p><b> MOV 20H,A</b></p><p><b> MOV TL0,A</b&
70、gt;</p><p> SETB TR0 ;開唱</p><p> SING1:LCALL DELAY ;每個(gè)音符唱多久</p><p> JB F0,FOR ;是否暫停,</p><p> AJMP NEXT ;沒有暫停,繼續(xù)</p><p&g
71、t; FOR: CLR TR0 ;暫停,不唱</p><p> JB F0,$ ;等待播放</p><p> AJMP NEXT ;開始播放</p><p> END0: CLR TR0 ;不唱</p><p> MOV A,22H
72、 ;唱完處理</p><p> CJNE A,#N,WW ;是不是全部歌曲都唱完</p><p> MOV 22H,#01H ;全部唱完,則從第一首開始再唱</p><p> MOV R7,#00H</p><p> MOV OUT_NUM,#11111001B;數(shù)碼管顯視第一首歌曲編號(hào)&
73、lt;/p><p><b> AJMP WWW</b></p><p> WW: MOV A,R7 ;沒有全部唱完,唱下一首,歌曲的入口信息調(diào)整</p><p><b> ADD A,#4</b></p><p><b> MOV R7,A</b><
74、/p><p><b> INC 22H</b></p><p><b> CLR EA</b></p><p><b> PUSH DPH</b></p><p><b> PUSH DPL</b></p><p><b
75、> MOV A,22H</b></p><p> MOV DPTR,#OUT_TAB</p><p> MOVC A,@A+DPTR</p><p> MOV OUT_NUM,A ;數(shù)碼管顯視相應(yīng)的歌曲編號(hào)</p><p><b> POP DPL</b></p>&
76、lt;p><b> POP DPH</b></p><p> WWW: SETB EA</p><p> AJMP START0 ;開始下一首的演唱</p><p> F_T0: MOV TH0,21H ;定時(shí)器0置初值</p><p> MOV TL0,20H&
77、lt;/p><p> CPL OUT ;頻率產(chǎn)生</p><p><b> RETI</b></p><p> NEXT_SONG: PUSH ACC ;下一曲中斷程序處理,保護(hù)現(xiàn)場(chǎng)</p><p><b> PUSH DPH</b></p>&l
78、t;p><b> PUSH DPL</b></p><p> CLR EA ;關(guān)中斷</p><p> MOV A,22H</p><p> CJNE A,#N,Q ;是最后一首嗎?</p><p> MOV R7,#00H ;是最后一首,則R7指向
79、第一首,演唱第一首</p><p> MOV 22H,#01H</p><p><b> AJMP BACK</b></p><p> Q: INC 22H ;不是最后一首,唱下一首,R7內(nèi)容加4,歌曲數(shù)加1</p><p><b> MOV A,R7</b&g
80、t;</p><p><b> ADD A,#4</b></p><p><b> MOV R7,A</b></p><p> BACK: MOV R4,#00H ;數(shù)碼管顯視相應(yīng)的歌曲編號(hào)</p><p><b> MOV A,22H</b><
81、/p><p> MOV DPTR,#OUT_TAB</p><p> MOVC A,@A+DPTR</p><p> MOV OUT_NUM,A</p><p> ;********************************************</p><p> MOV B,R0 ;對(duì)下首要演
82、唱的歌曲的幾分拍進(jìn)行調(diào)整,同時(shí)對(duì)R0中的內(nèi)容進(jìn)行保護(hù)</p><p> MOV R4,#00H</p><p> MOV R0,#30H</p><p><b> MOV A,R7</b></p><p><b> ADD A,R0</b></p><p><b
83、> MOV R0,A</b></p><p> MOV DPH,@R0</p><p><b> INC R0</b></p><p> MOV DPL,@R0</p><p><b> INC R0</b></p><p><b>
84、MOV A,R4</b></p><p><b> INC R4</b></p><p> MOVC A,@A+DPTR</p><p> MOV 26H,A ;結(jié)果存入26H單元中</p><p><b> DEC R4</b></p>&
85、lt;p> MOV R0,B;恢復(fù)R0中的內(nèi)容</p><p> ;********************************************</p><p> POP DPL;恢復(fù)現(xiàn)場(chǎng)</p><p><b> POP DPH</b></p><p><b>
86、 POP ACC</b></p><p><b> SETB EA</b></p><p> RETI ;中斷返回</p><p> LAST_SONG: PUSH ACC ;上一曲中斷程序處理開始,保護(hù)現(xiàn)場(chǎng)</p><p><b> PUSH
87、 DPH</b></p><p><b> PUSH DPL</b></p><p> CLR EA ;關(guān)中斷</p><p> MOV A,22H ;曲目數(shù)送A</p><p> CJNE A,#1,QQ ;是否是第一首</p><
88、;p> MOV 22H,#N ;是第一首歌曲</p><p> MOV B,#4 ;將R7指向最后一首歌曲</p><p> MOV A,#N-1</p><p><b> MUL AB</b></p><p><b> MOV R7,A</b><
89、/p><p> AJMP BACK2 ;處理結(jié)束</p><p> QQ: DEC 22H</p><p> MOV A,R7 ;R7減4</p><p><b> SUBB A,#4</b></p><p><b> MOV R7,A<
90、;/b></p><p> BACK2: MOV R4,#00H</p><p><b> MOV A,22H</b></p><p> MOV DPTR,#OUT_TAB</p><p> MOVC A,@A+DPTR</p><p> MOV OUT_NUM,A
91、 ;數(shù)碼管顯視相應(yīng)歌曲的編號(hào)</p><p> ;********************************************</p><p> MOV B,R0;對(duì)下首要演唱的歌曲的幾分拍進(jìn)行調(diào)整,同時(shí)對(duì)R0中的內(nèi)容進(jìn)行保護(hù)</p><p> MOV R4,#00H</p><p> MOV R0,#30H&
92、lt;/p><p><b> MOV A,R7</b></p><p><b> ADD A,R0</b></p><p><b> MOV R0,A</b></p><p> MOV DPH,@R0</p><p><b> INC R
93、0</b></p><p> MOV DPL,@R0</p><p><b> INC R0</b></p><p><b> MOV A,R4</b></p><p><b> INC R4</b></p><p> MOVC A
94、,@A+DPTR</p><p> MOV 26H,A ;結(jié)果存入26H單元中</p><p><b> DEC R4</b></p><p> MOV R0,B;R0中的內(nèi)容恢復(fù)</p><p> ;**********************************
95、**********</p><p> POP DPL ;恢復(fù)現(xiàn)場(chǎng)</p><p><b> POP DPH</b></p><p><b> POP ACC</b></p><p><b> SETB EA</b></p><p>
96、 RETI ;中斷返回</p><p> START_PAUSE:CPL F0 ;開始/暫停中斷處理程序,將標(biāo)置位取反</p><p> JB F0,RETURN ;為1返回</p><p> SETB TR0 ;為0則播放</p><p> RETU
97、RN: RETI ;中斷返回</p><p> DELAY: MOV 27H,26H ;音符演奏時(shí)間控制</p><p> D2: MOV 28H,#125</p><p> D3: MOV 29H,#248</p><p> DJNZ 29H,$</
98、p><p> DJNZ 28H,D3</p><p> DJNZ 27H,D2</p><p> DJNZ R2,DELAY</p><p><b> RET</b></p><p> ;OUT_TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,
99、77H,7CH,39H,5EH,79H,71H,73H </p><p><b> ;共陰數(shù)碼管顯視用</b></p><p> OUT_TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH </p><p&g
100、t;<b> ?。还碴?lt;/b></p><p><b> TABLE: </b></p><p> DW SONG1,TABLE1,SONG2,TABLE2,SONG3,TABLE3,SONG4,TABLE4 ,SONG5,TABLE5,SONG6,TABLE6,SONG7,TABLE7,SONG8,TABLE8</p><
101、;p> TABLE1:DW 64580,64684,64777,64820</p><p> DW 64898,64968,65030,64260</p><p> DW 64400,64524,65058,63835,64021 </p><p> SONG1: ;
102、精忠報(bào)國(guó)</p><p> DB 66H,52H,36H,22H,12H,12H,22H,32H,98H,84H,82H,92H,14H,12H,22H</p><p> DB 32H,52H,22H,42H,38H,66H,52H,36H,22H,12H,22H,22H,32H,98H</p><p> DB 24H,22H,32H,54H,52H,32H,
103、92H,12H,92H,82H,98H,66H,52H,36H,22H</p><p> DB 12H,12H,22H,32H,98H,84H,82H,92H,14H,12H,22H,32H,52H,22H,42H,38H</p><p> DB 66H,52H,36H,22H,12H,22H,22H,32H,98H,24H,22H,32H,54H,52H,32H</p>
104、<p> DB 22H,12H,92H,82H,98H,14H,24H,34H,44H,64H,0B4H,64H,32H,52H</p><p> DB 62H,0B2H,62H,52H,38H,24H,22H,32H,54H,52H,62H,52H,32H,32H,22H,38H</p><p> DB 64H,0B4H,64H,32H,52H,62H,0B2H,62H
105、,52H,38H,22H,22H,22H,32H,52H,52H</p><p> DB 52H,62H,7FH,74H,04H,58H,6FH</p><p><b> DB 00</b></p><p> TABLE2:DW 64580,64684,64777,64820</p><p> DW 64898,
106、64968,65030,64260</p><p> DW 64400,64524,65058,63835,64021 </p><p> SONG2: DB 02H,82H ;月亮代表我的心</p><p> DB 16H,32H,54H,02H,52H</p><p> DB 0A6H,32H,54H,02H,52H</
107、p><p> DB 64H,74H,0B6H,64H</p><p> DB 52H,5CH,32H,22H</p><p> DB 16H,12H,14H,32H,22H</p><p> DB 16H,12H,14H,22H,32H</p><p> DB 26H,12H,94H,22H,32H</p&
108、gt;<p><b> DB 2CH</b></p><p> DB 32H,52H</p><p> DB 36H,22H,14H,54H</p><p> DB 0ACH,92H,0A2H</p><p> DB 96H,0A2H,96H,82H</p><p> D
109、B 3CH,54H</p><p> DB 36H,22H,14H,54H</p><p> DB 0ACH,92H,0A2H</p><p> DB 16H,12H,14H,22H,32H</p><p> DB 2CH,02H,82H</p><p> DB 16H,32H,56H,12H</p&g
110、t;<p> DB 0A6H,32H,56H,52H</p><p> DB 66H,72H,0B6H,62H</p><p> DB 62H,52H,58H,32H,22H</p><p> DB 16H,12H,14H,32H,22H</p><p> DB 16H,12H,14H,22H,32H</p>
111、;<p> DB 26H,92H,0A4H,12H,22H</p><p><b> DB 1CH</b></p><p><b> DB 00</b></p><p> TABLE3: DW 64580,64684,64777,64820</p><p> DW 64898
112、,64968,65030,64260</p><p> DW 64400,64524,65058,63835,64021 </p><p> SONG3: DB 0d4H,84H,94H,82H,92H ;看我七十二變</p><p> DB 12H,22H,82H,92H,02H,92H,82H,0d2H</p><p> DB
113、 82H,92H,14H,84H,02H,0d1H,0d1H</p><p> DB 0c2H,0d2H,84H,0d2H,0d2H,82H,82H</p><p> DB 84H,82H,82H,94H,82H,0d2H</p><p> DB 82H,82H,82H,92H,02H,82H,82H,0d2H</p><p> DB
114、 0c4H,84H,0d4H,92H,0d2H</p><p> DB 82H,0d2H,82H,92H,98H</p><p> DB 04H,94H,88H</p><p> DB 04H,94H,88H</p><p> DB 04H,94H,88H</p><p> DB 04H,94H,88H,04
115、H</p><p> DB 32H,32H,22H,12H,02H,92H,12H,92H</p><p> DB 32H,32H,22H,12H,02H,92H,12H,92H</p><p> DB 32H,32H,22H,12H,02H,92H,12H,22H</p><p> DB 54H,44H,34H,12H,22H<
116、;/p><p> DB 34H,22H,12H,02H,92H,12H,92H</p><p> DB 32H,32H,22H,12H,02H,92H,12H,92H</p><p> DB 32H,32H,22H,12H,02H,92H,12H,22H</p><p> DB 54H,44H,32H,22H,12H,92H</p&
117、gt;<p><b> DB 00</b></p><p> TABLE4:DW 64580,64684,64777,64820</p><p> DW 64898,64968,65030,64260</p><p> DW 64400,64524,65058,63835,64021 </p><p&
118、gt; SONG4:DB 82H,92H,12H,14H,12H,14H,92H,82H,12H,14H,22H,14H,92H,12H,22H,24H ;大海</p><p> DB 22H,24H,12H,92H,22H,24H,32H,24H,32H,52H,62H,54H,52H,64H,52H,32H</p><p> DB 22H,32H,22H,12H,94H,82H
119、,92H,12H,14H,12H,14H,94H,1cH</p><p> DB 82H,92H,12H,14H,12H,14H,92H,82H,12H,14H,22H,14H,92H,12H,22H,24H</p><p> DB 22H,24H,12H,92H,22H,24H,32H,24H,32H,52H,62H,54H,52H,64H,52H,32H</p>&l
120、t;p> DB 22H,32H,22H,12H,94H,82H,92H,12H,14H,12H,14H,22H,12H,1cH,32H,52H</p><p> DB 62H,64H,62H,64H,0b2H,62H,52H,54H,62H,54H,32H,22H</p><p> DB 12H,14H,12H,14H,24H,3cH,32H,22H,12H,14H,12H,1
121、4H,0b2H,62H,52H,54H,62H,54H,32H,52H</p><p> DB 66H,0b2H,0b4H,62H,52H,5cH,32H,52H,62H,64H,62H,64H,0b2H,62H,52H,54H</p><p> DB 62H,54H,32H,22H,12H,14H,12H,14H,54H,3cH,32H,22H,12H,14H,12H,14H,22H
122、,32H</p><p> DB 52H,54H,32H,54H,32H,52H,6fH,04H,02H,92H,32H,24H,12H,1fH</p><p><b> DB 00</b></p><p> TABLE5:DW 64021,64103,64260,64400 ,64524,64580,64684,64777,64820,
123、64898,64968,65030,64934</p><p> SONG5:DB 86H,92H,12H,22H,32H,52H,68H,63H,52H,34H,62H,0B2H,0B2H,62H,51H,61H,51H,31H,54H ;彩云追月</p><p> DB 62H,0B2H,0B2H,62H,52H,32H,52H,52H,51H,61H,51H,31H,34H,52
124、H,62H,74H,32H,52H,52H,32H,</p><p> DB 21H,31H,21H,11H,24H</p><p> DB 32H,52H,52H,32H,22H,12H,24H,32H,52H,52H,32H,62H,52H,61H,51H,</p><p> DB 31H,21H,21H,31H,21H,11H,1CH</p>
125、<p> DB 21H,31H,22H,23H,31H,21H,18H,02H,0B2H,0BCH,0B4H,72H,61H,51H,72H,61H,</p><p> DB 71H,61H,51H,61H,71H,61H,6FH</p><p> DB 86H,94H,12H,22H,32H,52H,64H,62H,51H,31H,52H,21H,31H,21H,33
126、H,62H,0B2H,0B2H,62H,</p><p> DB 51H,61H,51H,31H,54H</p><p> DB 62H,0B2H,72H,61H,51H,51H,61H,51H,31H,54H,61H,0B2H,72H,61H,51H,51H,61H,51H,31H,32H,</p><p> DB 21H,11H,32H,51H,61H,5
127、4H</p><p> DB 02H,32H,24H,32H,52H,52H,32H,22H,31H,21H,11H,24H,32H,52H,62H,0B2H,72H,61H,51H,61H,</p><p> DB 51H,31H,32H,52H,52H,32H,62H</p><p> DB 51H,31H,31H,21H,11H,91H,23H,31H,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)--音樂盒
- 音樂盒單片機(jī)課程設(shè)計(jì)
- 單片機(jī)音樂盒課程設(shè)計(jì)
- 單片機(jī)音樂盒課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告 音樂盒設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---數(shù)字音樂盒
- 單片機(jī)課程設(shè)計(jì)--- 數(shù)字音樂盒
- 基于51單片機(jī)音樂盒課程設(shè)計(jì)
- 單片機(jī)原理課程設(shè)計(jì)---音樂盒的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-數(shù)字音樂盒設(shè)計(jì)
- 電子音樂盒(單片機(jī)課程設(shè)計(jì))
- 電子音樂盒(單片機(jī)課程設(shè)計(jì))
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)的數(shù)字音樂盒
- 單片機(jī)課程設(shè)計(jì)-基于單片機(jī)的數(shù)字音樂盒設(shè)計(jì)
- 電子音樂盒單片機(jī)課程設(shè)計(jì)
- 單片機(jī)音樂盒設(shè)計(jì)
- 課程設(shè)計(jì)-基于單片機(jī)的音樂盒的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)《數(shù)字音樂盒的設(shè)計(jì)》
- 單片機(jī)課程設(shè)計(jì)--數(shù)字音樂盒的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---電子音樂盒的設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論