![單片機課程設(shè)計簡易電子琴設(shè)計_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/15/b2934c13-8737-44e2-804a-b03d12a13775/b2934c13-8737-44e2-804a-b03d12a137751.gif)
![單片機課程設(shè)計簡易電子琴設(shè)計_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/15/b2934c13-8737-44e2-804a-b03d12a13775/b2934c13-8737-44e2-804a-b03d12a137752.gif)
![單片機課程設(shè)計簡易電子琴設(shè)計_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/15/b2934c13-8737-44e2-804a-b03d12a13775/b2934c13-8737-44e2-804a-b03d12a137753.gif)
![單片機課程設(shè)計簡易電子琴設(shè)計_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/15/b2934c13-8737-44e2-804a-b03d12a13775/b2934c13-8737-44e2-804a-b03d12a137754.gif)
![單片機課程設(shè)計簡易電子琴設(shè)計_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/15/b2934c13-8737-44e2-804a-b03d12a13775/b2934c13-8737-44e2-804a-b03d12a137755.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、鄭州輕工業(yè)學(xué)院計算機與通信工程學(xué)院單片機與接口技術(shù)課程設(shè)計總結(jié)報告設(shè)計題目: 簡易電子琴設(shè)計 學(xué)生姓名: 毛二松系 別:計算機與通信工程學(xué)院專 業(yè):電子信息科學(xué)與技術(shù)班 級:09-01學(xué) 號:540907020127指導(dǎo)教師:韓雪琴 楊永雙2011年12月26日簡易電子琴設(shè)計電子琴概述 這次設(shè)計的電子琴與市場上的電子琴相比雖然音色遜了一點,但是其物美價廉,功能強大,攜帶方便,深受大家喜歡。此次課程設(shè)計的電子琴是有4*4矩陣鍵盤來實現(xiàn)發(fā)音,其中4個鍵是功能鍵,剩下的12鍵實現(xiàn)真正的發(fā)音。此外在電子琴的功能上又加上了音樂播放功能、選擇歌曲、暫停以及錄音回放功能,使電子琴變得更強大。讓電子琴不再是簡
2、單的彈出音調(diào)簡單的電子琴,而是一個功能齊全的電子琴。本設(shè)計功能1. 通過矩陣鍵盤能夠彈出美妙的音樂。2. 通過功能切換,能夠切換到音樂播放器功能3. 能夠把彈出的音樂錄制下來,并且還能夠回放出來。本設(shè)計的仿真圖引腳描述:矩陣鍵盤接的是P3口,顯示部分的段控制口接的是P0口,位控制口接的是P2.0、P2.1、P2.2、P2.4、P2.5,蜂鳴器接的P2.3口。各種功能鍵如圖所示。返回是否暫停是否選擇下一曲進入音樂播放返回是否錄音功能選擇是否回放通過鍵盤彈音樂進入電子琴功能初始化開始設(shè)計的流程圖我負(fù)責(zé)的模塊主程序:也就是本程序的整體構(gòu)造、功能構(gòu)造。主程序程序:void main()init();/
3、初始化while(1)keyscan();/調(diào)用鍵盤掃描display();/顯示if(key_function=1)/如果選擇音樂播放switch(count)case 1:play(music1,music1_L);break;/播放第一首case 2:play(music2,music2_L);break;/播放第二首case 3:play(music3,music3_L);break;/播放第三首else /否則選擇為電子琴if(key_record=2)/判斷是否回放replay(record,record_L); 錄音功能。錄音程序和鍵盤掃描再一個模塊中。功能描述:它能夠把你所彈的
4、音調(diào)、按下鍵盤的時間即音長以及鍵與鍵之間的時間給記錄下來,它完全模擬了現(xiàn)實中電子琴的功能,功能之強大。時間的記錄是利用定時器1實現(xiàn)的。定時器0是產(chǎn)生一定頻率的方波,使蜂鳴器發(fā)出不同的音調(diào)。本功能程序:void keyscan() /鍵盤掃描:線反轉(zhuǎn)法uchar h,l; /h:行 l:列if(key_record=1&&flag=0)/記錄鍵與鍵之間的時間TH1=(65536-5000)/256;TL1=(65536-5000)%256;TR1=1;flag=1;P3=0xf0; /列全置低電平,行全置高電平h=P3&0xf0;while(h!=0xf0) /若有鍵按下
5、則行會出現(xiàn)低電平delay(10); /按鍵去抖P3=0xf0; /列全置低電平,行全置高電平h=P3&0xf0;while(h!=0xf0) if(key_record=1)/如果有按鍵按下,則把按鍵前的時間記錄下來 TR1=0;/關(guān)閉計時record_Lb=a;/把按鍵前的時間記錄下來a=0;/時間次數(shù)清零b+;/下標(biāo)加一 h=P3&0xf0; /讀入行值 P3=0x0f; /電平反轉(zhuǎn) l=P3&0x0f; /讀入列值 k=h+l;switch(k) case 0xee:temp=0;key_function+; if(key_function=2)key_func
6、tion=0; break;/功能選擇按鈕 case 0xed:temp=0;count+;next_flag=1; if(count=4) count=1; break;/ 選曲按鈕 case 0xeb:temp=0;key_record+; if(key_record=3)key_record=0; break;/錄音、回放、返回 case 0xe7:temp=0;pause+; if(pause=2)pause=0; break; / case 0xde:temp=6;break; /6 case 0xdd:temp=7;break; /7 case 0xdb:temp=11;break
7、; /11 case 0xd7:temp=12;break; /12 case 0xbe:temp=13;break; /13 case 0xbd:temp=14;break; /14 case 0xbb:temp=15;break; /15 case 0xb7:temp=16;break; /16 case 0x7e:temp=17;break; /17 case 0x7d:temp=21;break; /21 case 0x7b:temp=22;break; /22 case 0x77:temp=23;break; /23display(); /顯示if(key_record=1&
8、&temp!=0)/錄音時,如果有按鍵按下且不是功能鍵recordj=8;/先把按鍵前的初始值記下recordj+1=temp;/再把此按鍵的值記下j=j+2;/下標(biāo)值加2TH1=(65536-5000)/256;/裝初始值TL1=(65536-5000)%256;TR1=1;/啟動定時 if(temp!=0)/如果不是功能按鍵 則發(fā)出聲音TH0=tabletemp/256;TL0=tabletemp%256; TR0=1;while(h!=0xf0)/檢查按鍵是否彈起P3=0xf0; /列全置低電平,行全置高電平h=P3&0xf0;TR0=0;/彈起后關(guān)閉定時if(key_r
9、ecord=1&&temp!=0)/錄音時,如果有按鍵按下且不是功能鍵TR1=0;/關(guān)閉計時record_Lb=a;/把按鍵的時間記下a=0;/時間次數(shù)清零flag=0;b+;BUZZER=1;/把蜂鳴器關(guān)閉回放功能:就是把錄的音給回放出來源程序:void replay(uint *Song,uint *Song_L)/回放功能uint i;for(i=0;i<j;i+)temp=Songi; /把音譜頻率賦給nm=Song_Li;/把音長賦給mif(temp=8)/如果此時播放的是鍵與鍵之間的空隙時間TR0=0;/定時關(guān)閉即不發(fā)出聲音BUZZER=1;/關(guān)閉蜂鳴器tem
10、p=Songi-1;else/否則TH0=tabletemp/256; TL0=tabletemp%256;TR0=1;delay1(m/2);j=0;a=0;b=0;/把錄音清除TR0=0;/關(guān)閉定時BUZZER=1;/把蜂鳴器關(guān)閉實驗總結(jié)經(jīng)過這次課程設(shè)計,我真正學(xué)會了如何使用單片機,懂得了仿真和用真實的單片機板子實現(xiàn)本功能的差別,仿真畢竟不是真實的現(xiàn)象,有時候仿真能實現(xiàn),但是把程序下載到板子上后現(xiàn)象可能不是你所想的那樣。做這個設(shè)計給我最大的感觸就是當(dāng)一個模塊實現(xiàn)了,但是當(dāng)把各個模塊結(jié)合到一塊后就會變得有點復(fù)雜。當(dāng)然剛開始做這個程序時,要從實現(xiàn)簡單的功能入手,然后一點點把功能做大做強。在做這
11、個設(shè)計時我也遇到了很多問題:比如,做錄音、回放功能的時候,記錄鍵與鍵之間的時間的設(shè)置時,記錄的時間很短,原因就是當(dāng)沒有鍵按下的時候,程序會一直進行鍵盤掃描,而且每次都會重新進行定時初始值設(shè)置,我們希望的現(xiàn)象是定時初始值設(shè)置一次就夠了,如果每次都重新設(shè)置定時器初始值,那么記錄的時間就會不準(zhǔn)確。所以這時就要設(shè)置一個標(biāo)志,開始時標(biāo)志變量為0,如果是第一次設(shè)置,則設(shè)置完后就令這個標(biāo)志變量置1,下次循環(huán)的時候,程序就不會進行重新設(shè)置定時初始值了。所以這個標(biāo)志位再程序設(shè)計的時候顯得很重要。1和0是二進制數(shù),有時它不僅僅是一個數(shù)值,它也可以是代表一件事,1代表這件事做了,0則相反。標(biāo)志變量就像是一個站崗放哨
12、的人,只有這個人同意了,你才能進入。所以當(dāng)我做這個課程設(shè)計所遇到的問題以及我如何解決的過程,我感覺這個過程是如此的美妙,我絲毫感覺不到這是一件痛苦的事情,反而覺得這是一件讓人上癮的趣事。每當(dāng)遇到的問題解決了,我都把他們當(dāng)做是一筆財富。我覺得我們學(xué)習(xí)的不僅是單片機本門課的知識,而且是學(xué)習(xí)獲得知識的方法。授之魚不如授之漁,這句話也體現(xiàn)了方法的重要性。7、參考文獻(xiàn)1 張毅剛 彭喜來.單片機原理與應(yīng)用設(shè)計.電子工業(yè)出版社,20112張毅剛MCS-51單片機應(yīng)用設(shè)計(第二版)哈爾濱大學(xué)出版社,20028、附錄本課程設(shè)計的源程序:一個.c文件,兩個.h文件主程序源程序:#include<reg51.
13、h>#include<intrins.h>#include<keyscan.h>#include<play_music.h>#define uchar unsigned char #define uint unsigned int void init()/初始化程序TMOD=0X11;/定時器0、1都設(shè)為工作方式1EA=1;/總中斷打開ET0=1;/允許T0定時ET1=1;/允許T1定時void main()init();/初始化while(1)keyscan();/調(diào)用鍵盤掃描display();/顯示if(key_function=1)/如果選擇音
14、樂播放switch(count)case 1:play(music1,music1_L);break;case 2:play(music2,music2_L);break;case 3:play(music3,music3_L);break;else /否則選擇為電子琴if(key_record=2)/判斷是否回放replay(record,record_L); void T0_time() interrupt 1 /用于音樂播放器定時產(chǎn)生音調(diào)TH0=tabletemp/256;TL0=tabletemp%256;BUZZER=!BUZZER;void timer1 () interrupt
15、3/用于電子琴錄音計時 TH1=(65536-10000)/256;TL1=(65536-10000)%256;a+;keyscan.h鍵盤掃描源程序(錄音、顯示程序也在里面)#define uchar unsigned char #define uint unsigned int uint record_replay(); /錄音/回放void display();sbit BUZZER = P23;/sbit key3 = P24;sbit w1 = P20;sbit w2 = P21;sbit w3 = P22;sbit w5 = P24;sbit w6 = P25;sbit dula
16、= P26;sbit wela = P27;uchar j,a,b,flag,count=1;uchar key_function,key_record,next_flag;uint record20,record_L20;/存儲回放的音調(diào)uchar n,m,k,temp,pause;uchar code led=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0-fuint code table=0,63628,63835,64021,64103,64260,64400,6452
17、4,0,0, 0,64580,64684,64777,64820,64898,64968,65030,0,0, 0,65058,65110,65157,65178,65217,65252,65283,0,0;/每個音符的簡譜碼(T值)void delay1(uint j) while(j-)uint x;for(x=125;x>0;x-);display(); void delay(uint a) / 1ms延時uint x;while(a-)for(x=0;x<125;x+);void display()dula=1;P0=ledkey_function;dula=0;wela=
18、1;P0=0xfe;/數(shù)碼管第一位亮wela=0;delay(2);dula=1;P0=ledcount;dula=0;wela=1;P0=0xfd; /數(shù)碼管第二位亮delay(2);dula=1;P0=ledkey_record;dula=0;wela=1;P0=0xfb; /數(shù)碼管第三位亮wela=0;delay(2);dula=1;P0=ledtemp/10;dula=0;wela=0;P0=0xef; /數(shù)碼管第四位亮wela=1;delay(2);dula=1;P0=ledtemp%10;dula=0;wela=0;P0=0xdf; /數(shù)碼管第五位亮wela=1;delay(2);
19、void keyscan() /鍵盤掃描:線反轉(zhuǎn)法uchar h,l; /h:行 l:列if(key_record=1&&flag=0)/記錄鍵與鍵之間的時間TH1=(65536-5000)/256;TL1=(65536-5000)%256;TR1=1;flag=1;P3=0xf0; /列全置低電平,行全置高電平h=P3&0xf0;while(h!=0xf0) /若有鍵按下則行會出現(xiàn)低電平delay(10); /按鍵去抖P3=0xf0; /列全置低電平,行全置高電平h=P3&0xf0;while(h!=0xf0) if(key_record=1)/如果有按鍵按下
20、,則把按鍵前的時間記錄下來 TR1=0;/關(guān)閉計時record_Lb=a;/把按鍵前的時間記錄下來a=0;/時間次數(shù)清零b+;/下標(biāo)加一 h=P3&0xf0; /讀入行值 P3=0x0f; /電平反轉(zhuǎn) l=P3&0x0f; /讀入列值 k=h+l;switch(k) case 0xee:temp=0;key_function+; if(key_function=2)key_function=0; break;/功能選擇按鈕 case 0xed:temp=0;count+;next_flag=1; if(count=4) count=1; break;/ 選曲按鈕 case 0x
21、eb:temp=0;key_record+; if(key_record=3)key_record=0; break;/錄音、回放、返回 case 0xe7:temp=0;pause+; if(pause=2)pause=0; break; / case 0xde:temp=6;break; /6 case 0xdd:temp=7;break; /7 case 0xdb:temp=11;break; /11 case 0xd7:temp=12;break; /12 case 0xbe:temp=13;break; /13 case 0xbd:temp=14;break; /14 case 0x
22、bb:temp=15;break; /15 case 0xb7:temp=16;break; /16 case 0x7e:temp=17;break; /17 case 0x7d:temp=21;break; /21 case 0x7b:temp=22;break; /22 case 0x77:temp=23;break; /23display(); /顯示if(key_record=1&&temp!=0)/錄音時,如果有按鍵按下且不是功能鍵recordj=8;/先把按鍵前的初始值記下recordj+1=temp;/再把此按鍵的值記下j=j+2;/下標(biāo)值加2TH1=(65536
23、-5000)/256;/裝初始值TL1=(65536-5000)%256;TR1=1;/啟動定時 if(temp!=0)/如果不是功能按鍵 則發(fā)出聲音TH0=tabletemp/256;TL0=tabletemp%256; TR0=1;while(h!=0xf0)/檢查按鍵是否彈起P3=0xf0; /列全置低電平,行全置高電平h=P3&0xf0;TR0=0;/彈起后關(guān)閉定時if(key_record=1&&temp!=0)/錄音時,如果有按鍵按下且不是功能鍵TR1=0;/關(guān)閉計時record_Lb=a;/把按鍵的時間記下a=0;/時間次數(shù)清零flag=0;b+;BUZZ
24、ER=1;/把蜂鳴器關(guān)閉play_music.h音樂播放源程序(回放功能也在里面)#define uint unsigned int #define uchar unsigned char void play(uint *Sound,uint *Sound_L);/音樂播放 /第一首音樂:一分錢uint code music1=15,21,16,21,15,13,15,12,13,15,8,13,15,16,21,15,16,15,13,15,11,13,12,8,13,12,11,12,13,16,15,13,15,16,8,15,21,16,15,13,15,12,15,12,13,12,
25、11, 0x0;/音調(diào)uint code music1_L=4,4,2,2,4,2,2,2,2,4,4, 2,2,2,2,2,2,2,2,2,4,2,4,4, 2,2,2,2,4,4,2,2,2,2,4, 4,2,2,2,2,2,2,4,2,2,2,2,4,4, 4;/音長/第二首音樂:小兔子乖乖uint code music2=15,21,16,15,15,13,15,16,21,15,15,16,15,13,12,12,13,15,13,12,11,16,15,16,15,13,16,15,12,15,13,12,11,6,11,12,13,11,0x0;uint code music2_L=4,2,2,4,4,2,2,2,2,4,4,4,2,2,4,4,4,2,2,4,4, 2,2,2,2,2,2,4,2,2,2,2,4,4,2,2,2,2,4,4, 4;/第三首音樂:祝你生日快樂uint code music3=15,15,16,15,21,17, 15,15,16,15,22,21, 15,15,25,23,21,17,16, 24,24,23,21,22,21, 0x0; uint code music3_L=2,2,4,4,4,8, 2,2,4,4,4,8, 2,2,4,4,4,4,8, 2,2,4,4,4,4,2; void repla
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 星球版地理八年級上冊《第一節(jié) 地形地勢特征》聽課評課記錄1
- 新版華東師大版八年級數(shù)學(xué)下冊《17.5實踐與探索第2課時》聽評課記錄
- 現(xiàn)場清潔方案協(xié)議書(2篇)
- 2022版新課標(biāo)七年級上冊道德與法治第三單元師長情誼6、7課共5課時聽課評課記錄
- 七年級道德與法治上冊第四單元 生命的思考第八課探問生命第2框敬畏生命聽課評課記錄 新人教版
- 【2022年新課標(biāo)】部編版七年級上冊道德與法治第三課 發(fā)現(xiàn)自己 2課時聽課評課記錄
- 《動蕩的春秋時期》參考聽課評課記錄4(新部編人教版七年級上冊歷史)
- 一年級下冊數(shù)學(xué)聽評課記錄 第三單元 第一節(jié)【第二課時】《數(shù)一數(shù)(100以內(nèi)數(shù)的數(shù)法)》北師大
- 八年級地理下冊8.2臺灣省的地理環(huán)境與經(jīng)濟發(fā)展聽課評課記錄2
- 北師大版七年級數(shù)學(xué)上冊《第五章一元一次方程5.1認(rèn)識一元一次方程(第1課時)》聽評課記錄
- 高原鐵路建設(shè)衛(wèi)生保障
- 家具廠各崗位責(zé)任制匯編
- 顳下頜關(guān)節(jié)盤復(fù)位固定術(shù)后護理查房
- 硝苯地平控釋片
- 四川省瀘州市2019年中考物理考試真題與答案解析
- 部編版語文六年級下冊全套單元基礎(chǔ)??紲y試卷含答案
- 提高檢驗標(biāo)本合格率品管圈PDCA成果匯報
- 2023年保險養(yǎng)老地產(chǎn)行業(yè)分析報告
- 世界古代史-對接選擇性必修(真題再現(xiàn)) 高考?xì)v史一輪復(fù)習(xí)
- 保險公司防火應(yīng)急預(yù)案
- 動物檢疫技術(shù)-動物檢疫的分類(動物防疫與檢疫技術(shù))
評論
0/150
提交評論