九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

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

基于51單片機(jī)的音樂游戲.doc

  • 資源ID:6681979       資源大?。?span id="24d9guoke414" class="font-tahoma">459.93KB        全文頁數(shù):14頁
  • 資源格式: DOC        下載積分:9.9積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺(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)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

基于51單片機(jī)的音樂游戲.doc

一、課程設(shè)計(jì)內(nèi)容利用89c52單片機(jī)設(shè)計(jì)一款音樂游戲。游戲說明:游戲基于單片機(jī)開發(fā)箱實(shí)現(xiàn)。游戲開始時(shí),會(huì)播放一首音樂,同時(shí)每隔一個(gè)音符,LED點(diǎn)陣中會(huì)從最上方下落一個(gè)小點(diǎn)。玩家需要根據(jù)音樂的節(jié)奏,在小點(diǎn)下降到LED點(diǎn)陣的底部時(shí),按下對應(yīng)的按鍵。其中,矩陣鍵盤第一行從左到右的四個(gè)鍵分別對應(yīng)LED點(diǎn)陣的1、3、5、7列。根據(jù)每個(gè)按鍵按下的時(shí)間,會(huì)有不同的得分,通過LED模塊的D1-D5亮起來代表獲得1-5分。如果沒有LED燈亮則代表得0分。當(dāng)整首歌播放完后,會(huì)在LED點(diǎn)陣上顯示整首歌的得分,得分為0-99分。二、設(shè)計(jì)思路和方案選擇在決定制作音樂游戲后,利用開發(fā)箱的哪幾個(gè)模塊來制作也是需要考慮的一個(gè)問題,最終我們決定利用現(xiàn)在的這個(gè)方案。其主要原因是LED點(diǎn)陣和蜂鳴器是游戲中的主體部分,因此無可替代。獨(dú)立鍵盤還是矩陣鍵盤的選擇上,經(jīng)過試驗(yàn)發(fā)現(xiàn)獨(dú)立鍵盤由于離LED點(diǎn)陣較遠(yuǎn),在實(shí)際游戲中經(jīng)常會(huì)有反應(yīng)不過來的情況。而矩陣鍵盤就在點(diǎn)陣的正下方,因此在操作上較為方便,所以選擇了矩陣鍵盤。而游戲得分的顯示,最初是想利用數(shù)碼管來實(shí)現(xiàn),后來發(fā)現(xiàn)數(shù)碼管和LED點(diǎn)陣都用到了單片機(jī)的P0口。在LED點(diǎn)陣無法被取代的情況下,只能退而求其次,選擇用LED模塊顯示得分。程序的具體設(shè)計(jì)思路如下:1. 實(shí)現(xiàn)音樂的播放效果2. 實(shí)現(xiàn)LED點(diǎn)陣的顯示下落效果3. 實(shí)現(xiàn)音樂的節(jié)奏和LED點(diǎn)的下落同步4. 實(shí)現(xiàn)按鍵得分功能5. 實(shí)現(xiàn)顯示得分效果三、硬件設(shè)計(jì)本游戲的實(shí)現(xiàn)基于單片機(jī)開發(fā)試驗(yàn)儀,其主要用到的硬件電路有 89C52CPU模塊,LED點(diǎn)陣模塊,74HC595模塊,LED模塊,矩陣鍵盤模塊和蜂鳴器模塊。四、軟件框圖及設(shè)計(jì)程序流程圖:開始LED與SOUND指針指向第一個(gè)音符在頂部顯示音符對應(yīng)的LED燈按鍵是否按下計(jì)算并顯示上個(gè)音符的得分顯示時(shí)間達(dá)到一個(gè)16分音符LED燈下降一行有LED燈下降到底部發(fā)下一個(gè)音SOUND指針指向下個(gè)音符定時(shí)器1延時(shí)30msLED燈顯示時(shí)間達(dá)到規(guī)定長度LED指針指向下個(gè)音符計(jì)算并顯示整首歌的得分LED指針指向結(jié)束符號(hào)結(jié)束是否否是否是否否是是C語言程序:#include <REG52.H> #include <INTRINS.H>#define COMMONPORTSP0/定義輸出端口 sbit BeepIO=P15;/定義輸出管腳sbit SRCLK=P36;sbit RCLK1=P35;sbit SER=P34;sbit k1=P13;/定義按鍵sbit k2=P12;sbit k3=P11;sbit k4=P10;sbit button=P17;unsigned char code music_tab= 33,16,4,33,8,2,34,8,2,39,16,4,26,8,2,29,8,2,33,8,2,33,8,2,33,8,2,34,8,2,39,16,4,29,8,2,33,8,2,34,16,4,34,8,2,33,8,2,26,16,4,34,8,2,33,8,2,34,16,4,11,8,2,26,8,2,29,16,4,26,8,2,29,8,2,33,16,4,33,8,2,34,8,2,39,16,4,44,8,2,49,8,2,104,8,2,104,8,2,33,8,2,34,8,2,39,16,4,29,8,2,33,8,2,34,8,2,33,8,2,34,8,2,104,8,2,104,16,4,29,8,2,33,8,2,34,8,2,33,8,2,34,8,2,117,8,2,117,16,4,104,8,2,49,8,2,104,26,4,117,8,2,132,8,2,117,8,2,104,8,2,49,8,2,104,26,4,104,8,2,49,8,2,39,8,2,39,8,2,26,8,2,44,26,4,44,8,2,39,8,2,26,8,2,26,8,2,33,8,2,29,26,4,33,4,1,34,4,1,34,8,2,39,8,2,104,8,2,49,8,2,104,26,4,117,8,2,132,8,2,117,8,2,104,8,2,49,8,2,104,26,4,104,8,2,49,8,2,39,8,2,39,8,2,26,8,2,44,26,4,44,8,2,39,8,2,39,8,2,104,8,2,49,8,2,104,76,4,44,8,2,44,8,2,44,8,2,49,8,2,49,8,2,44,8,2,39,8,2,39,16,4,33,8,2,26,5,5,26,8,2,29,8,2,33,8,2,34,8,2,33,4,1,34,5,0,34,8,2,33,4,1,34,5,0,34,26,4,33,8,2,34,8,2,33,8,2,34,8,2,117,8,2,117,16,4,104,8,2,49,8,2,104,26,4,117,8,2,132,8,2,117,8,2,104,8,2,49,8,2,104,26,4,104,4,1,49,5,0,49,8,2,39,8,2,39,8,2,26,8,2,44,26,4,44,8,2,39,8,2,26,8,2,26,8,2,33,8,2,29,26,4,33,4,1,34,4,1,34,8,2,39,8,2,104,8,2,49,8,2,104,26,4,117,8,2,132,8,2,117,8,2,104,8,2,49,8,2,104,26,4,104,8,2,49,8,2,39,8,2,39,8,2,26,8,2,44,26,4,44,8,2,39,8,2,39,8,2,104,8,2,49,8,2,104,76,4,34,16,4,34,8,2,44,8,2,39,10,0,26,8,2,26,16,4,34,26,4,29,16,4,33,16,4,26,76,4,0,0,0;/歌曲格式為音調(diào),發(fā)音長度,不發(fā)音長度,.,0,0,0unsigned char code P0TAB8 = 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;/分別為選中點(diǎn)陣1-8列unsigned char code DIG_CODE104=0xf8,0x88,0xf8,0x00, /00x00,0x00,0xf8,0x00, /10xb8,0xa8,0xe8,0x00, /20xa8,0xa8,0xf8,0x00, /30xe0,0x20,0xf8,0x00, /40xe8,0xa8,0xb8,0x00, /50xf8,0xa8,0xb8,0x00, /60x80,0x80,0xf8,0x00, /70xf8,0xa8,0xf8,0x00, /80xe8,0xa8,0xf8,0x00, /9;unsigned int Sound_Temp_TH0,Sound_Temp_TL0;/音符定時(shí)器初值暫存 unsigned int Sound_Temp_TH1,Sound_Temp_TL1;/音長定時(shí)器初值暫存void InitialSound(void);void Hc595SendByte(unsigned char dat);void Delay(unsigned int n);void Play(unsigned char *Sound);void ShowScore(unsigned int sum);unsigned int sum;void InitialSound(void)button = 0;BeepIO = 0;TMOD |= 0x11;Sound_Temp_TH1 = (65535-30000)/256;/計(jì)算TL1應(yīng)裝入的初值Sound_Temp_TL1 = (65535-30000)%256;/計(jì)算TH1應(yīng)裝入的初值 ET0= 1;ET1= 0;TR0= 0;TR1= 0;EA= 1;void ShowScore(unsigned int sum) /顯示得分unsigned int tab,n;while(1)for(tab=0;tab<8;tab+)Hc595SendByte(0x00);/消隱COMMONPORTS= P0TABtab;/輸出字碼if(tab<4)n=sum/10;Hc595SendByte(DIG_CODEntab);elsen=sum%10;Hc595SendByte(DIG_CODEntab-4);Delay(1);void Delay(unsigned int n) /延時(shí)50usunsigned char a,b;for(;n>0;n-) for(b=1;b>0;b-) for(a=22;a>0;a-); void BeepTimer0(void) interrupt 1/音符發(fā)生中斷BeepIO = !BeepIO;TH0 = Sound_Temp_TH0; TL0 = Sound_Temp_TL0;void Hc595SendByte(unsigned char dat) /向74H595發(fā)送一個(gè)字節(jié)的數(shù)據(jù)unsigned char a;SRCLK=0;RCLK1=0;for(a=0;a<8;a+)SER=dat>>7;dat<<=1;SRCLK=1;_nop_();_nop_();SRCLK=0;RCLK1=1;_nop_();_nop_();RCLK1=0;void Play(unsigned char *Sound)/演奏子程序unsigned int HC595TAB8 = 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;unsigned char i;unsigned int tab,j,k,Point_led,Point_sound,LDiv,LDiv1,LDiv2,LDiv16,LDiv16_temp,CurrentFre,LDiv1_sound,LDiv2_sound,LDiv1_temp,CurrentFre_sound,Fre_Temp,Temp_T,SoundLength,score,count;unsigned int temp4;SoundLength = 0;LDiv16=5;/16分音符的長度while(SoundSoundLength != 0x00)/計(jì)算歌曲總長度SoundLength+=3;LDiv1_temp=0; LDiv16_temp=0;Point_led=0;Point_sound=0;TR0=0;TR1=1;score=0;sum=0;j=1;while(Point_sound < SoundLength)/一個(gè)音符一個(gè)音符的來CurrentFre = SoundPoint_led;LDiv1 = SoundPoint_led+1;LDiv1_sound = SoundPoint_sound+1; /發(fā)音長度 LDiv2 = SoundPoint_led+2;if(SoundPoint_led!=0) LDiv=LDiv1+LDiv2;/兩個(gè)LED燈之間的間隔長度elseLDiv=5;if (Point_led!=0)if (Fre_Temp>CurrentFre)/頻率比上個(gè)音符大,LED顯示的點(diǎn)右移兩行,比上個(gè)音符小則左移兩行,移到最左或最右循環(huán)if(k=0)k=6;elsek=k-2;else if (Fre_Temp<CurrentFre)if(k=6)k=0;elsek=k+2;Fre_Temp= CurrentFre;if(SoundPoint_led!=0)HC595TABk|=0x80;/顯示led燈在最上方for(i=LDiv;i>0;i-) /間隔規(guī)定長度顯示下一個(gè)led燈 LDiv16_temp+;count+;if(j!=1)/判斷得分 if(tempj/2!=0) if(count=1)score=5;P2=239;else if(count=2)score=4;P2=247;else if(count=3)score=3;P2=251;else if(count=4)score=2;P2=253;else if(count=5)score=1;P2=254;elsescore=0;P2=255;sum=sum+score;j=1;if(LDiv16_temp=LDiv16) /每隔1個(gè)16分音符的時(shí)間for(tab=0;tab<8;tab+)HC595TABtab>>=1;/led燈下降1格if(HC595TABtab&1 = 1)/判斷l(xiāng)ed燈是否下降到底部CurrentFre_sound = SoundPoint_sound;LDiv1_sound = SoundPoint_sound+1;LDiv2_sound = SoundPoint_sound+2; LDiv1_temp=0;Temp_T = 65536-(5000/CurrentFre_sound)*10; /計(jì)算計(jì)數(shù)器初值Sound_Temp_TH0 = Temp_T/256; Sound_Temp_TL0 = Temp_T%256;TH0 = Sound_Temp_TH0; TL0 = Sound_Temp_TL0 + 12;TR0=1;temp0=temp1=temp2=temp3=0;count=0; P2=255;j=tab;Point_sound+=3;/發(fā)下一個(gè)音if(SoundPoint_sound=0)i=LDiv1_sound+LDiv2_sound; LDiv16_temp=0;while(TF1=0)for(tab=0;tab<8;tab+)Hc595SendByte(0x00);/消隱COMMONPORTS= P0TABtab;/輸出字碼Hc595SendByte(HC595TABtab);Delay(1); if(k1=0) temp0=1; /判斷按鍵是否按下else if(k2=0) temp1=1;else if(k3=0) temp2=1;else if(k4=0) temp3=1;TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1; TF1=0;LDiv1_temp+;if (LDiv1_temp=LDiv1_sound)TR0=0; if(SoundPoint_led!=0)Point_led+=3; /顯示下個(gè)led燈P2=255;/最后一個(gè)音結(jié)束熄滅led燈main()InitialSound();Play(music_tab);ShowScore(sum/9);五、實(shí)物照片及調(diào)試結(jié)果游戲時(shí)照片:結(jié)束顯示分?jǐn)?shù)照片:六、心得體會(huì)這次單片機(jī)的課程設(shè)計(jì),也是我們第一次自己完成一個(gè)由自己構(gòu)思并實(shí)現(xiàn)的作品。在選擇方案的時(shí)候,我們首先決定的是自己編寫一款游戲。在聽完老師講解蜂鳴器播放音樂和LED點(diǎn)陣的原理后,我想到了以前玩過的一款名為節(jié)奏大師的音樂游戲,我發(fā)現(xiàn)利用LED點(diǎn)陣和蜂鳴器結(jié)合,完全可以在單片機(jī)上實(shí)現(xiàn)它的主要框架。再配合按鍵的功能,就能用單片機(jī)來玩這一簡易的音樂游戲了。于是,我們便初步?jīng)Q定了這個(gè)題目。然而,在制作的過程中,我們遇到了許多事先沒有料想到的困難。比如LED顯示點(diǎn)的出現(xiàn)和對應(yīng)的音符的不同步,按鍵的不同得分判定難以實(shí)現(xiàn),用于顯示分?jǐn)?shù)的數(shù)碼管和LED點(diǎn)陣共用了一個(gè)端口等等。這些困難都給我們編寫程序造成了很大的困擾,甚至令我們一度想要放棄。但在我們的努力下,最終還是一個(gè)個(gè)解決了這些困難,實(shí)現(xiàn)了我們原本的構(gòu)想。這也讓我體會(huì)到實(shí)踐才是檢驗(yàn)問題最好的辦法。通過這次課程設(shè)計(jì),我也對單片機(jī)的軟件、硬件有了進(jìn)一步的認(rèn)識(shí)。完成這一課程設(shè)計(jì),需要能熟練地運(yùn)用51單片機(jī)的C語言編程,以及單片機(jī)內(nèi)部的定時(shí)器、中斷等功能,也需要對LED、按鍵、蜂鳴器、數(shù)碼管等的原理進(jìn)行一定的了解。更重要的是,能夠?qū)⑦@兩者結(jié)合,才能讓各個(gè)模塊都能受我們控制,達(dá)到我們想要的效果。這一次的實(shí)驗(yàn)作品的完成,讓我們充分體會(huì)到了學(xué)習(xí)是一個(gè)循序漸進(jìn)的過程。在課程開始之初,我們對于單片機(jī)一無所知,老師給與我們的開發(fā)箱也只不過是一個(gè)上課依葫蘆畫瓢,展現(xiàn)一下黑板上程序的工具。然而隨著課程的深入,我們可以不斷的運(yùn)用課本上新學(xué)到的知識(shí)已經(jīng)實(shí)驗(yàn)之中運(yùn)用過的程序和結(jié)構(gòu),來實(shí)現(xiàn)更多的功能以及想法。直到最后,我們在開發(fā)箱上,依靠著這門課程給予我們的知識(shí)和技巧,完成了一個(gè)簡易的音樂游戲。雖然游戲非常的簡單,但是能夠設(shè)計(jì)出這樣一個(gè)游戲是我們在開始完全沒有預(yù)想到的。通過這門課程,我們第一次實(shí)際感受到了知識(shí)是如何運(yùn)用于實(shí)際的。在別的課程之中考核基本都是通過書面的考試,而這一次是讓我們自己在開發(fā)箱上創(chuàng)造自己的作品,讓我們受益匪淺。我們不僅僅需要用這一門課程上的知識(shí),許多之前學(xué)過的知識(shí)也再一次被我們從課本中找了回來,運(yùn)用于其中。在這一次的期末作業(yè)考核之中,我們真正認(rèn)識(shí)到了之前學(xué)過的許多知識(shí)的作用,例如微機(jī)原理、C語言等等,這些東西不再是課本上的知識(shí),而變成了我們的一種能力,這是我們在開發(fā)箱創(chuàng)造作品的過程之中最大的收獲。另外,通過這次的作品,讓我感受到了團(tuán)隊(duì)協(xié)作的真諦。團(tuán)隊(duì)成員通過配合來揚(yáng)長避短,兩個(gè)人的知識(shí)和想法融合在一起,來更好地完成這次考核。我們的作品也從最初的一直空白,變成了一個(gè)簡易但是很完整的音樂游戲。我們都從這次的創(chuàng)作中受益匪淺。

注意事項(xiàng)

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

溫馨提示:如果因?yàn)榫W(wǎ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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!