歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

單片機(jī)音樂(lè)發(fā)生器.doc

  • 資源ID:6598602       資源大小:683.50KB        全文頁(yè)數(shù):26頁(yè)
  • 資源格式: DOC        下載積分:9.9積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開(kāi)放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要9.9積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

單片機(jī)音樂(lè)發(fā)生器.doc

第 屆電子設(shè)計(jì)大賽論文單片機(jī)音樂(lè)發(fā)生器組長(zhǎng): 組員: 目 錄1、系統(tǒng)方案- 2 -1.1、方案比較與選擇- 2 -1.1.1、單片機(jī)選擇與論證- 2 -1.1.2、功放選擇與論證- 2 -1.1.3、顯示器件選擇與論證- 2 -1.1.4、鍵盤形式選擇與論證- 3 -1.1.5、材料選擇與論證- 3 -2、理論分析與計(jì)算- 3 -2.1、聲音播放的原理- 3 -2.1.1、普通聲音產(chǎn)生原理. - 3 -2.1.2、音樂(lè)產(chǎn)生原理.- 4 -2.2、音符節(jié)拍處理- 5 -3、電路與程序設(shè)計(jì)- 6 -3.1、電路的設(shè)計(jì)- 6 -3.1.1、總體框圖設(shè)計(jì)- 6 -3.1.2、時(shí)鐘電路設(shè)計(jì)- 6 -3.1.3、復(fù)位電路設(shè)計(jì)- 7 -3.1.4、按鍵電路設(shè)計(jì)- 7 -3.1.5、顯示電路設(shè)計(jì)- 8 -3.1.6、揚(yáng)聲器電路設(shè)計(jì)- 9 -3.2、程序設(shè)計(jì).- 10 -3.2.1、系統(tǒng)整體流程圖- 10 -3.2.2、鍵盤子程序流程圖- 10 -3.2.3、液晶顯示子程序流程圖- 11 -4、測(cè)試方案與測(cè)試結(jié)果- 12 -4.1、測(cè)試方案- 12 -4.2、測(cè)試結(jié)果- 12 -4.3、測(cè)試分析- 13 -附錄- 13 -附錄1:電路原理圖- 13 -附錄2:部分源程序- 14 -1、系統(tǒng)方案1.1、方案比較與選擇1.1.1、單片機(jī)選擇與論證方案一:8051單片機(jī)。8051內(nèi)部包含一個(gè)8位CPU,128BRAM,4KBROM,21個(gè)特殊功能寄存器,4個(gè)8位并行I/O口,一個(gè)全雙工串行口,2個(gè)16位定時(shí)器、計(jì)數(shù)器,5個(gè)中斷源。方案二:SST單片機(jī)。SST單片機(jī)省去了開(kāi)發(fā)用的編程器和仿真器。省去了外部EEPROM、電壓監(jiān)控芯片、上電復(fù)位電路和5個(gè)UART的擴(kuò)展芯片。它自帶在線下載和在線仿真功能,帶有5路PCA模塊(主成分分析),PCA功能比普通單片機(jī)有更強(qiáng)的計(jì)時(shí)性。利用PCA的脈沖寬度調(diào)制(PWM)模式可產(chǎn)生一個(gè)8位PWM。方案三:AT89C52單片機(jī)。AT89C52是美國(guó)ATMEL公司生產(chǎn)的低電壓,高性能CMOS位單片機(jī),片內(nèi)含4k字節(jié)的可反復(fù)擦寫1000次的只讀程序存儲(chǔ)器(PEROM)和128字節(jié)的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),片內(nèi)置通用8位中央處理器(CPU)和Flash存儲(chǔ)單元?;趯?duì)功能齊全性的考慮,我們采用方案三。1.1.2、功放選擇與論證方案一:LM386。LM386是一種音頻集成功放,具有自身功耗低、更新內(nèi)鏈增益可調(diào)整、電源電壓范圍大和總諧波失真小等優(yōu)點(diǎn)的功率放大器。方案二:NPN型三極管。集電極電流受基極電流的控制,并且基極電流很小的變化,會(huì)引起集電極電流很大的變化,且變化滿足一定的比例關(guān)系。出于對(duì)市場(chǎng)供應(yīng)情況和價(jià)格方面的考慮,我們采用方案一。1.1.3、顯示器件選擇與論證方案一:數(shù)碼管。數(shù)碼管顯示能在低電壓、小電流條件下驅(qū)動(dòng)發(fā)光,能與CMOS、ITL電路兼容。發(fā)光響應(yīng)時(shí)間極短(<01s),高頻特性好,單色性好,亮度高。體積小,重量輕,抗沖擊性能好。壽命長(zhǎng),使用壽命在10萬(wàn)小時(shí)以上,甚至可達(dá)100萬(wàn)小時(shí)。但顯示功能有限,只能顯示數(shù)字和個(gè)別字母。方案二:液晶顯示器(LCD)。液晶顯示器每一個(gè)點(diǎn)在收到信號(hào)后就一直保持那種色彩和亮度,恒定發(fā)光,顯示質(zhì)量高。其接口都是數(shù)字式的,和單片機(jī)系統(tǒng)的接口更加簡(jiǎn)單可靠,操作更加方便。功耗主要消耗在其內(nèi)部的電極和驅(qū)動(dòng)IC上,因而耗電量比其它顯示器要少得多。方案三:陰極射線管顯示器(CRT)。此種顯示器圖像色彩豐富,還原性好,有豐富的幾何失真調(diào)整能力。但不能長(zhǎng)期暴露在磁場(chǎng)下,會(huì)磁化或損壞,不能讓強(qiáng)光直射,會(huì)降低發(fā)光效率,不能在高溫下使用,工作性能和使用壽命會(huì)大打折扣。出于價(jià)格和電路復(fù)雜程度的考慮,在鍵控音符輸入時(shí)采用方案一,在歌曲信息的顯示時(shí)采用方案三。1.1.4、鍵盤形式選擇與論證方案一:獨(dú)立式按鍵。獨(dú)立按鍵的輸入線較多,結(jié)構(gòu)復(fù)雜,一般適用于按鍵較少,操作速度較高的場(chǎng)合。方案二:行列式鍵盤。行列式鍵盤由行和列線交叉組成,一般適用于按鍵較多的場(chǎng)合。使用44矩形鍵盤,這樣鍵盤模塊僅使用8根線與處理器相連,節(jié)省了系統(tǒng)資源。由于我們功能比較少,矩形鍵盤占用電路板位置較大且電路復(fù)雜,因此選擇方案一。1.1.5、材料選擇與論證方案一:玻璃板。玻璃板光滑、透明,但是質(zhì)量較重,易碎,并且不易加工。方案二:塑料板。塑料板質(zhì)量輕,不易碎,但是也不好加工,且不環(huán)保。方案三:木板。木板質(zhì)量比塑料板重,但比玻璃板輕,易于加工,可塑性強(qiáng)?;诔杀炯凹庸?fù)雜程度的考率,采用方案二。2、理論分析與計(jì)算2.1、聲音播放的原理2.1.1普通聲音產(chǎn)生原理人耳能聽(tīng)到的聲音頻率范圍是幾十到幾千赫茲之間,單片機(jī)的I/O輸出引腳上能輸出高電平或低電平。設(shè)計(jì)一個(gè)程序,令單片機(jī)的某一個(gè)引腳按照一個(gè)的時(shí)間間隔輸出一些符合規(guī)律的高低電平信號(hào),那么就能得到一系列的矩形波。入伏哦這種時(shí)間間隔反映的頻率在人耳所能聽(tīng)到的頻率范圍內(nèi),那么就能輸出一定的聲音信息。 圖1要輸出的穩(wěn)定的矩形波,可以利用延時(shí)程序來(lái)控制輸出高電平或低電平的持續(xù)時(shí)間,當(dāng)持續(xù)時(shí)間到時(shí)就令該信號(hào)反向,從而實(shí)現(xiàn)電平的轉(zhuǎn)換,如圖1所示。圖中,從單片機(jī)引腳上輸出的信號(hào),高電平和低電平保持的時(shí)間分別為t1和t2,信號(hào)的基本輸出周期為T,即頻率f的倒數(shù)。在程序編寫時(shí),可令t1和t2相等。這樣,當(dāng)要產(chǎn)生某一頻率的音頻信號(hào)時(shí),只要先計(jì)算得到這個(gè)周期時(shí)間的一半,然后利用延時(shí)程序來(lái)控制單片機(jī)的輸出引腳在該時(shí)間內(nèi)輸出穩(wěn)定的高電平或低電平。該時(shí)間結(jié)束時(shí),又利用程序使單片機(jī)的輸出引腳的輸出信號(hào)電平發(fā)生反相。如此循環(huán)執(zhí)行后,就能得到設(shè)計(jì)要求的音頻信號(hào)了。2.1.2音樂(lè)產(chǎn)生原理一首樂(lè)曲是由多個(gè)音符構(gòu)成的。每一個(gè)音符都對(duì)應(yīng)著一個(gè)確定的頻率。另外,每一個(gè)音符會(huì)根據(jù)樂(lè)曲的要求設(shè)定一個(gè)確定的節(jié)拍音符頻率的處理方法如下:程序設(shè)計(jì)如果利用定時(shí)器計(jì)數(shù)的方式來(lái)產(chǎn)生延時(shí)的效果,就可以將歌曲中每一個(gè)音符所對(duì)應(yīng)的頻率換算成相對(duì)應(yīng)的技術(shù)初值。然后,將這首音樂(lè)所有音符的計(jì)數(shù)初值編成一個(gè)表,并把每一個(gè)音符的計(jì)數(shù)初值與一個(gè)確定的數(shù)字碼來(lái)聯(lián)系。如表1所示為利用定時(shí)器T0工作于方式1時(shí),一些簡(jiǎn)譜音符所對(duì)應(yīng)的頻率,計(jì)數(shù)初值和簡(jiǎn)譜碼。音符頻率(Hz)簡(jiǎn)譜碼(T)音符頻率(Hz)簡(jiǎn)譜碼(T)低1D026263628#4FA#74064860#1D0#27763731中5SO74864898低2RE29463835#5S0#83164934#2RE#31163928中6LA88064968低3M33064021#6LA#93264994低4FA34964103中7S198865030#4FA#37064185高1DO104665058低5SO39264260#DO#110965085#5S0#41564331高2RE117565110低6LA44064400#2RE#124565134#6LA#46664463高3M131865157低7S149464524高4FA139765178中1DO52364580#4FA#148065198#1D0#55464633高5SO156865217中2RE57864684#5SO#166165235#2RE#62264723高6LA176065252中3M65964777#6LA#186565268中4FA69864820高7SI196765283 表1例如,要計(jì)算中音DO、中音RE、中音MI的計(jì)數(shù)初值中音DO: TC=216 106/(523*2)=65536-956=65480=0FC44H中音RE: TC=216 - 106/(587*2)=65536-888=64684=0FCACH中音MI: TC=216 - 106/(659*2)=65536-759=64777=0FD09H2.2、音符節(jié)拍的處理一首樂(lè)曲的每一個(gè)音符除了頻率之外,還有不同的節(jié)拍,也就是這個(gè)音符發(fā)音的持續(xù)時(shí)間。如表2所示為節(jié)拍碼與實(shí)際碼之間的對(duì)照表。節(jié)拍碼實(shí)際節(jié)拍節(jié)拍碼實(shí)際節(jié)拍11/4拍51又1/4拍22/4拍61又1/2拍33/4拍82拍41拍A2又1/2拍 表2如果1拍為0.4s,1/4拍是0.1s,只要設(shè)定延遲時(shí)間就可求得節(jié)拍的時(shí)間。假設(shè)1/4拍為1DELAY,那么1拍應(yīng)為4DELAY。如表3所示為1/4和1/8拍的時(shí)間設(shè)定。1/4拍的時(shí)間設(shè)定1/8拍的時(shí)間設(shè)定曲調(diào)值DELAY曲調(diào)值DELAY調(diào)4/4125ms調(diào)4/462ms調(diào)3/4187ms調(diào)3/494ms調(diào)2/4250ms調(diào)2/4125ms 表31/4拍的延遲時(shí)間=187ms延時(shí)程序?yàn)椋篋ELAY: MOV R7,#02DELA1:MOV R4, #187DELA1:MOV R3,#248DJNZ R3, $DJNZ R4, DELA2DJNZ R7, DELA13、電路與程序設(shè)計(jì)3.1、電路的設(shè)計(jì)3.1.1、總體框圖設(shè)計(jì)系統(tǒng)總體框圖如圖2所示。 單 片 機(jī)時(shí)鐘與復(fù)位鍵盤輸入拓展RAM拓展ROM音頻發(fā)生音頻放大大揚(yáng)聲器LCD顯示 圖23.1.2、時(shí)鐘電路設(shè)計(jì)AT89C52內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反相放大器,它的輸入端為芯片引腳XTAL1,輸出端引腳為XTAL2。這兩個(gè)引腳跨接石英晶體和微調(diào)電容,構(gòu)成一個(gè)穩(wěn)定的自激振蕩器,如圖3所示為AT89C52的內(nèi)部時(shí)鐘方式的電路。 圖3圖中電容C1和C2的值選擇為30pF。該電容的大小會(huì)影響振蕩器頻率的高低、振蕩器的穩(wěn)定性和起振的快速性。晶體振蕩頻率的范圍通常是在1.212MHz。晶體的頻率越高,系統(tǒng)的時(shí)鐘頻率越高,單片機(jī)的運(yùn)行速度也就越快。但同時(shí),運(yùn)行速度快對(duì)存儲(chǔ)器的速度要求也就越高,對(duì)印制電路板的工藝要求也就越高,即要求線間的寄生電容要小。晶體和電容應(yīng)盡可能安裝得與單片機(jī)芯片靠近,以減小寄生電容,更好地保證振蕩器穩(wěn)定、可靠地工作。3.1.3、復(fù)位電路設(shè)計(jì)AT89C52的復(fù)位是由外部的復(fù)位電路實(shí)現(xiàn)的,在本次設(shè)計(jì)中,我們采用了按鍵電平復(fù)位電路。按鍵手動(dòng)電平復(fù)位是通過(guò)RST端經(jīng)電阻與電源Vcc接通來(lái)實(shí)現(xiàn),具體電路如圖4所示。 圖43.1.4、按鍵電路設(shè)計(jì)此電路實(shí)現(xiàn)的功能是每當(dāng)有按鍵按下時(shí),通過(guò)數(shù)碼管顯示相應(yīng)數(shù)字。每個(gè)按鍵代表不同的音符,通過(guò)程序控制揚(yáng)聲器發(fā)出不同音符。如圖5所示為獨(dú)立式按鍵的具體電路。 圖53.1.5、顯示電路3.1.5.1 LED數(shù)碼管顯示電路在本次設(shè)計(jì)中我們采用的是7管LED數(shù)碼管,它由7個(gè)發(fā)光二極管組成。這七個(gè)發(fā)光二極管a-g呈“日”字形排列,當(dāng)某一發(fā)光二極管導(dǎo)通時(shí),相應(yīng)地點(diǎn)亮某一點(diǎn)或某一段筆畫,通過(guò)發(fā)光二極管不停地亮暗組合形成不同的數(shù)字、字母等符號(hào)。由于采用的是共陰極接法,所以在單片機(jī)輸出口和LED輸入口相連時(shí)沒(méi)有外接電阻。如圖6所示為數(shù)碼管實(shí)際連接電路。 圖63.1.5.2 LCD液晶顯示器電路在本次設(shè)計(jì)中,我們采用的是FG12864E LCD,它是一種圖形點(diǎn)陣液晶顯示器。由于LCD的電源供電情況有別于普通的+5V電源,其驅(qū)動(dòng)電源情況必須通過(guò)一個(gè)供電電路來(lái)提供,如圖7所示。 圖7 圖8如圖8所示為L(zhǎng)CD具體連接電路。顯示數(shù)據(jù)通過(guò)單片機(jī)的P0引腳來(lái)傳送;左半屏與右半屏顯示的選擇,引腳分別連接LCD的CS1和CS2。3.1.6、揚(yáng)聲器電路 圖9如圖9所示為揚(yáng)聲器電路實(shí)際連接圖,將單片機(jī)與喇叭通過(guò)一個(gè)LM386連接,揚(yáng)聲器的工作原理是當(dāng)兩輸入端有電平差時(shí),揚(yáng)聲器發(fā)聲。所以將喇叭的一個(gè)輸出端接地,另一端與集成運(yùn)放的輸出相連。突出采用的連接方式,可以通過(guò)改變滑動(dòng)變阻器的大小來(lái)改變接入運(yùn)放的電壓,并實(shí)現(xiàn)控制音量大小的調(diào)節(jié)。3.2、程序的設(shè)計(jì)3.2.1、系統(tǒng)整體流程圖 圖10如圖10所示為系統(tǒng)整體流程圖。將歌曲的節(jié)拍和頻率儲(chǔ)存到數(shù)據(jù)表中,播放歌曲時(shí)利用查表函數(shù)為計(jì)數(shù)器賦初值,產(chǎn)生周期不等的方波,即可播放音樂(lè)。3.2.3、鍵盤子程序流程圖如圖11所示為鍵盤子程序流程圖。圖11 3.2.2、液晶顯示子程序流程圖如圖12所示為液晶顯示子程序流程圖。圖124、測(cè)試方案與測(cè)試結(jié)果4.1、測(cè)試方案基本要求(1):能播放標(biāo)準(zhǔn)C調(diào)的Do、Re、Mi、Fa、So、La、Si、Do作為起始測(cè)試音。基本要求(2):測(cè)試音結(jié)束后等待2秒,播放一首自選曲目,時(shí)間>30秒。發(fā)揮部分(1):能播放指定曲目。發(fā)揮部分(2):具有鍵盤,可現(xiàn)場(chǎng)編曲并播放。發(fā)揮部分(3):具有液晶顯示功能,可顯示簡(jiǎn)譜。發(fā)揮部分(4):可將簡(jiǎn)譜轉(zhuǎn)換成顯示五線譜。4.2、測(cè)試結(jié)果4.2.1、仿真測(cè)試通過(guò)Keil和Proteus仿真,在播放Do,Re,Mi,Fa,So,La,Xi,Do等待兩秒后,可以聽(tīng)到自選歌曲和指定曲目,LCD顯示歌曲信息。按下控制鍵后,進(jìn)入編曲模式,7個(gè)獨(dú)立鍵盤分別代表七個(gè)音符,可現(xiàn)場(chǎng)編曲。同時(shí),數(shù)碼管顯示每個(gè)按鍵代表的數(shù)字。如圖13所示,為數(shù)碼管仿真結(jié)果。 圖134.2.2、成品測(cè)試 通過(guò)對(duì)成品進(jìn)行調(diào)試實(shí)驗(yàn),所得到的結(jié)果與仿真結(jié)果相同。4.3、測(cè)試分析由測(cè)試結(jié)果可以看出,成品滿足基本要求和發(fā)揮部分的部分要求。附錄附錄1:電路原理圖附錄2:部分源程序#include<reg51.h>#include<absacc.h> #defineuchar unsigned char#define uint unsigned int #define LCDPORT P0#define E P31#define RW P33#define DI P34#define CS1 P36#define CS2 P35#define BUSYSTATUS P07#define LCDSTARTROW 0xc0#define LCDPAGE 0xB8#define LCDLINE 0x40void Run(void);/主程序void KeyScan(void);/ 按鍵void PlayKey(void); /按鍵程序void delay_1ms(uchar i);/延時(shí)1msvoid PlayMusic1(void); / 播放12345671void PlayMusic(void); /播放同一首歌void PlayMusic2(void); /播放規(guī)定曲目1void DisPlay(void);/ 數(shù)碼管/void lcd_init(void); /lcd初始化void init_com(void);void sound_delay(uchar n);void timer0(void);uchar code hz1;/*一系列變量*/sbit Beep=P27;/sbit busy=P01;ucharTh0,Tl0;ucharflag=0;/模式,0表示音樂(lè),1表示按鍵ucharkey=0;/按鍵代號(hào)uchara;uchargaodi=0;/uchar data count=0;/uint counter=0;/12345671的頻率uchar code SONG_TONE=115,102,91,86,77,68,61,0;/12345671的節(jié)拍uchar code SONG_LONG=17,18,20,21,23,25,28,0; /*比賽規(guī)定曲目*/魂斗羅 赤色要塞uchar code SONG_TONE2=34,38,45,51,45,51,57,61, 57,61,68,77,68,102,91,77, 68,68,45,51,45,43,38, 68,68,45,51,45,43,57, 68,68,45,51,45,43,38, 68,68,45,51,45,43,57,0;/魂斗羅的節(jié)拍uchar code SONG_LONG2=13,12,10,9,10,9,8,28, 8,7,6,6,6,5,5,6, 35,13,10,9,19,11,85, 35,13,10,9,19,11,68, 35,13,10,9,19,11,85, 35,13,10,9,19,11,68,0; /*同一首歌的源代碼*/uchar codeMusic=0Xef,0Xef, 0X88,0X14,0X24,0X36,0X42,0X34,0X14,0X28,0X14,0X94,0X1f,0X88,0X14,0X24,0X34,0X32,0X42,0X54,0X14,0X46,0X32,0X54,0X22,0X32,0X32,0X22,0X2C,0X38,0X54,0X74,0X76,0X62,0X68,0X54,0X52,0X62,0X74,0X62,0X52,0X3f,0X46,0X42,0X54,0X64,0X54,0X42,0X32,0X28,0X0a4,0Xa2,0X92,0X84,0X94,0X1f,0Xb8,0X68,0X46,0X52,0X68,0X74,0X72,0X72,0X74,0X62,0X52,0X3f,0Xb8,0X68,0X46,0X52,0X68,0X64,0X62,0X62,0X64,0X42,0X32,0X2f,0X58,0X14,0X24,0X36,0X42,0X34,0X12,0X12,0X26,0X22,0X24,0X22,0X12,0X94,0X9c,0Xa8,0Xa6,0X92,0X84,0X64,0X54,0X22,0X22,0X46,0X42,0X44,0X32,0X22,0X5f,0Xef,0Xef,0xFF,/按鍵音符ucharcodeKeyCode =0XFF,0XFF,0xF8,0x8B,0xF9,0x5B,0xFA,0x14,0xFA,0x66,0xFB,0x03,0xFB,0x8F,0xFC,0x0B,/低音0xFC,0x43,0xFC,0xAB,0xFD,0x08,0xFD,0x33,0xFD,0x81,0xFD,0xC7,0xFE,0x05,/中音0xFE,0x21,0xFE,0x55,0xFE,0x84,0xFE,0X99,0XFE,0xC0,0xFE,0xE3,0xFF,0x02,/高音;/功能程序void Run(void)if(flag=0)PlayMusic1(); /12345671PlayMusic(); /同一首歌PlayMusic2();/魂斗羅elsePlayKey();void KeyScan(void)/按按鍵1-7,數(shù)碼管的顯示if(P1=0X7f)/如果P1.7=0delay_1ms(5);if(P1=0X7f)gaodi+;if(gaodi>2)gaodi=0;a=gaodi;else if(P1=0XFE)delay_1ms(12);if(P1=0XFE)key=1;a=key;else if(P1=0XFD)delay_1ms(12);if(P1=0XFD)key=2;a=key;else if(P1=0XFB)delay_1ms(12);if(P1=0XFB)key=3;a=key;else if(P1=0XF7)delay_1ms(12);if(P1=0XF7)key=4;a=key;else if(P1=0XEF)delay_1ms(12);if(P1=0XEF)key=5;a=key; else if(P1=0XDF)delay_1ms(12);if(P1=0XDF)key=6;a=key;else if(P1=0XBF)delay_1ms(12);if(P1=0XBF)key=7;a=key;elsereturn;void PlayKey(void)if(key=0)return;elseTh0=KeyCodegaodi*14+key*2;Tl0=KeyCodegaodi*14+key*2+1;TR0=1;delay_1ms(187);TR0=0;key=0;time0() interrupt 1 /定時(shí)器0中斷TH0=Th0;TL0=Tl0;Beep=Beep;void interrupt0() interrupt 0 /外部終端0flag=flag;if(flag=0)a=8;P2=0;/延時(shí)1msvoid delay_1ms(uchar i)uchar j,k;for(j=0;j<i;j+)for(k=0;k<148;k+); /*播放音樂(lè)主程序*/12345671void PlayMusic1(void) uint i=0; uint j,k; while(SONG_LONGi!=0|SONG_TONEi!=0) /播放各個(gè)音符,SONG_LONG 為拍子長(zhǎng)度 for(j=0;j<SONG_LONGi*30;j+) Beep=Beep; /SONG_TONE 延時(shí)表決定了每個(gè)音符的頻率 for(k=0;k<SONG_TONEi/3;k+); delay_1ms(10); i+; TR0=0;if(flag!=0)break; /同一首歌的實(shí)現(xiàn)部分void PlayMusic(void)uchar yinfu,jiepai;uchar i,j;for(i=0;Musici!=0XFF;i+)yinfu=(Musici>>4);jiepai=(Musici&0X0F);if(yinfu=0)continue;Th0=MusicCode(yinfu-1)*2;Tl0=MusicCode(yinfu-1)*2+1;TR0=1;for(j=jiepai;j>0;-j)delay_1ms(150);/調(diào)歌曲快慢:187(越大越慢) TR0=0;if(flag!=0)break;void PlayMusic2(void) uint i=0; uint j,k; while(SONG_LONG2i!=0|SONG_TONE2i!=0) /播放各個(gè)音符,SONG_LONG 為拍子長(zhǎng)度 for(j=0;j<SONG_LONG2i*30;j+) Beep=Beep; /SONG_TONE 延時(shí)表決定了每個(gè)音符的頻率 for(k=0;k<SONG_TONE2i/3;k+); delay_1ms(10); i+; TR0=0;if(flag!=0)break; /*數(shù)碼管顯示模塊*/ void Display(void)/顯示switch(a)case 0: P2=0X3F;break;case 1:P2=0X06;break;case 2:P2=0X5B;break;case 3:P2=0X4F;break;case 4:P2=0X66;break;case 5:P2=0X6D;break;case 6:P2=0X7D;break;case 7:P2=0X07;break;default: P2=0X00;break;void delay (unsigned int n)unsigned int i ; for( ; n>0 ;n-)for ( i=500; i>0 ; i-);bit bCheckBusy () LCDPORT=0xff; RW = 1; DI=0; E=1; E=0; return BUSYSTATUS ;void vWriteData (unsigned char ucData) while(bCheckBusy() ; LCDPORT=0xff; RW=0; DI=1; LCDPORT=ucData; E=1; E=0;void vWriteCMD(unsigned char ucCMD) while ( bCheckBusy() ); LCDPORT=0xff; RW=0; DI=0; LCDPORT=ucCMD; E=1; E=0; void vLCDInitialize()CS1=1;CS2=1;vWriteCMD (0x38) ;vWriteCMD (0x0f) ;vWriteCMD (0x01) ;vWriteCMD (0x06) ;vWriteCMD (LCDSTARTROW); Void vShowCustomRow ( unsigned char ucPage ,unsigned char ucLine ,unsigned char ucWidth ,unsigned char *ucaRow) unsigned char ucCount ; if(ucLine<64) CS1=1; CS2=0; vWriteCMD(LCDPAGE+ucPage) ; vWriteCMD(LCDLINE+ucLine) ; if (ucLine + ucWidth)<64) for (ucCount =0 ; ucCount<ucWidth ;ucCount +) vWriteData (*(ucaRow+ucCount) ; for(ucCount=0;ucCount<64-ucline;ucCount+) vWriteData(*(ucaRow+ucCount) ;CS1=0;CS2=1;vWriteCMD(LCDPAGE+ucPage);vWriteCMD(LCDLINE);for (ucCount=64-ucLine;ucCount<ucWidth;ucCount+) vWriteData(*(ucaRow+ucCount) ; else CS1=0;CS2=1; vWriteCMD(LCDPAGE+ucPage);vWriteCMD(LCDLINE);for(uccount=0;uccount<ucwidth;uccount+)vwritedata(*(ucarow+uccount); void vShowOneChin(unsigned char ucPage,unsigned char ucLine,unsigned char *ucaChinMap)vShowCustomRo(ucPage,ucLine,16,ucaChinMap);vShowCustomRow(ucPage+1,ucLine,16,ucaChinMap+16); /*主程序模塊*/void main(void)/主程序P1=0XFF;/P1口全置位為1P2=0;/P2口全置位為0TMOD=0X01;/設(shè)置T0為工作方式1IT0=1;/置外部中斷為邊沿(下降沿)觸發(fā)方式TR0=0;/與門被封鎖,控制開(kāi)關(guān)被關(guān)閉EX0=1;/開(kāi)放外部中斷0允許位ET0=1;/T0中斷允許位EA=1;/開(kāi)放中斷總允許位/lcd_init();while(1)/lcd_str_wr(0,0,8,hz1);Run();/運(yùn)行KeyScan();/按鍵掃描DisPlay();/顯示長(zhǎng)通杯感想這是我們第一次參加長(zhǎng)通杯,在之前聽(tīng)到了很多同學(xué)對(duì)于長(zhǎng)通杯不同的評(píng)價(jià),直到這次自己親身體會(huì),才品嘗到個(gè)中滋味。從選題到初試,再到預(yù)賽,無(wú)論是程序的調(diào)試,電路的焊接還是報(bào)告的撰寫,都是自己親自動(dòng)手。團(tuán)隊(duì)的合作,思想火花的碰撞,遇到難題絞盡腦汁鍥而不舍最終成功,這一切的一切都讓我體會(huì)到了長(zhǎng)通杯魅力的所在。在這次設(shè)計(jì)中,我們由于經(jīng)驗(yàn)不足走了很多彎路,出了很多問(wèn)題,曾一度想要放棄,但我慶幸自己沒(méi)有放棄,而是一直堅(jiān)持,查閱了很多資料,找到錯(cuò)誤,一次又一次的修改。這么多天的忙碌過(guò)后,當(dāng)成品擺在自己面前時(shí),之前所有的辛苦又算得了什么。面對(duì)自己汗水與智慧的結(jié)晶,我真正學(xué)會(huì)了在遇到困難時(shí)要堅(jiān)持,做事情要細(xì)心,思考問(wèn)題要全面。

注意事項(xiàng)

本文(單片機(jī)音樂(lè)發(fā)生器.doc)為本站會(huì)員(w****2)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!