版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、鄭州輕工業(yè)學(xué)院計(jì)算機(jī)與通信工程學(xué)院?jiǎn)纹瑱C(jī)與接口技術(shù)課程設(shè)計(jì)總結(jié)報(bào)告設(shè)計(jì)題目: 簡(jiǎn)易電子琴設(shè)計(jì) 學(xué)生姓名: 毛二松系 別:計(jì)算機(jī)與通信工程學(xué)院專 業(yè):電子信息科學(xué)與技術(shù)班 級(jí):09-01學(xué) 號(hào):540907020127指導(dǎo)教師:韓雪琴 楊永雙2011年12月26日簡(jiǎn)易電子琴設(shè)計(jì)電子琴概述 這次設(shè)計(jì)的電子琴與市場(chǎng)上的電子琴相比雖然音色遜了一點(diǎn),但是其物美價(jià)廉,功能強(qiáng)大,攜帶方便,深受大家喜歡。此次課程設(shè)計(jì)的電子琴是有4*4矩陣鍵盤(pán)來(lái)實(shí)現(xiàn)發(fā)音,其中4個(gè)鍵是功能鍵,剩下的12鍵實(shí)現(xiàn)真正的發(fā)音。此外在電子琴的功能上又加上了音樂(lè)播放功能、選擇歌曲、暫停以及錄音回放功能,使電子琴變得更強(qiáng)大。讓電子琴不再是簡(jiǎn)
2、單的彈出音調(diào)簡(jiǎn)單的電子琴,而是一個(gè)功能齊全的電子琴。本設(shè)計(jì)功能1. 通過(guò)矩陣鍵盤(pán)能夠彈出美妙的音樂(lè)。2. 通過(guò)功能切換,能夠切換到音樂(lè)播放器功能3. 能夠把彈出的音樂(lè)錄制下來(lái),并且還能夠回放出來(lái)。本設(shè)計(jì)的仿真圖引腳描述:矩陣鍵盤(pán)接的是P3口,顯示部分的段控制口接的是P0口,位控制口接的是P2.0、P2.1、P2.2、P2.4、P2.5,蜂鳴器接的P2.3口。各種功能鍵如圖所示。返回是否暫停是否選擇下一曲進(jìn)入音樂(lè)播放返回是否錄音功能選擇是否回放通過(guò)鍵盤(pán)彈音樂(lè)進(jìn)入電子琴功能初始化開(kāi)始設(shè)計(jì)的流程圖我負(fù)責(zé)的模塊主程序:也就是本程序的整體構(gòu)造、功能構(gòu)造。主程序程序:void main()init();/
3、初始化while(1)keyscan();/調(diào)用鍵盤(pán)掃描display();/顯示if(key_function=1)/如果選擇音樂(lè)播放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); 錄音功能。錄音程序和鍵盤(pán)掃描再一個(gè)模塊中。功能描述:它能夠把你所彈的
4、音調(diào)、按下鍵盤(pán)的時(shí)間即音長(zhǎng)以及鍵與鍵之間的時(shí)間給記錄下來(lái),它完全模擬了現(xiàn)實(shí)中電子琴的功能,功能之強(qiáng)大。時(shí)間的記錄是利用定時(shí)器1實(shí)現(xiàn)的。定時(shí)器0是產(chǎn)生一定頻率的方波,使蜂鳴器發(fā)出不同的音調(diào)。本功能程序:void keyscan() /鍵盤(pán)掃描:線反轉(zhuǎn)法uchar h,l; /h:行 l:列if(key_record=1&&flag=0)/記錄鍵與鍵之間的時(shí)間TH1=(65536-5000)/256;TL1=(65536-5000)%256;TR1=1;flag=1;P3=0xf0; /列全置低電平,行全置高電平h=P3&0xf0;while(h!=0xf0) /若有鍵按下
5、則行會(huì)出現(xiàn)低電平delay(10); /按鍵去抖P3=0xf0; /列全置低電平,行全置高電平h=P3&0xf0;while(h!=0xf0) if(key_record=1)/如果有按鍵按下,則把按鍵前的時(shí)間記錄下來(lái) TR1=0;/關(guān)閉計(jì)時(shí)record_Lb=a;/把按鍵前的時(shí)間記錄下來(lái)a=0;/時(shí)間次數(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)/錄音時(shí),如果有按鍵按下且不是功能鍵recordj=8;/先把按鍵前的初始值記下recordj+1=temp;/再把此按鍵的值記下j=j+2;/下標(biāo)值加2TH1=(65536-5000)/256;/裝初始值TL1=(65536-5000)%256;TR1=1;/啟動(dòng)定時(shí) if(temp!=0)/如果不是功能按鍵 則發(fā)出聲音TH0=tabletemp/256;TL0=tabletemp%256; TR0=1;while(h!=0xf0)/檢查按鍵是否彈起P3=0xf0; /列全置低電平,行全置高電平h=P3&0xf0;TR0=0;/彈起后關(guān)閉定時(shí)if(key_r
9、ecord=1&&temp!=0)/錄音時(shí),如果有按鍵按下且不是功能鍵TR1=0;/關(guān)閉計(jì)時(shí)record_Lb=a;/把按鍵的時(shí)間記下a=0;/時(shí)間次數(shù)清零flag=0;b+;BUZZER=1;/把蜂鳴器關(guān)閉回放功能:就是把錄的音給回放出來(lái)源程序:void replay(uint *Song,uint *Song_L)/回放功能uint i;for(i=0;i<j;i+)temp=Songi; /把音譜頻率賦給nm=Song_Li;/把音長(zhǎng)賦給mif(temp=8)/如果此時(shí)播放的是鍵與鍵之間的空隙時(shí)間TR0=0;/定時(shí)關(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)閉定時(shí)BUZZER=1;/把蜂鳴器關(guān)閉實(shí)驗(yàn)總結(jié)經(jīng)過(guò)這次課程設(shè)計(jì),我真正學(xué)會(huì)了如何使用單片機(jī),懂得了仿真和用真實(shí)的單片機(jī)板子實(shí)現(xiàn)本功能的差別,仿真畢竟不是真實(shí)的現(xiàn)象,有時(shí)候仿真能實(shí)現(xiàn),但是把程序下載到板子上后現(xiàn)象可能不是你所想的那樣。做這個(gè)設(shè)計(jì)給我最大的感觸就是當(dāng)一個(gè)模塊實(shí)現(xiàn)了,但是當(dāng)把各個(gè)模塊結(jié)合到一塊后就會(huì)變得有點(diǎn)復(fù)雜。當(dāng)然剛開(kāi)始做這個(gè)程序時(shí),要從實(shí)現(xiàn)簡(jiǎn)單的功能入手,然后一點(diǎn)點(diǎn)把功能做大做強(qiáng)。在做這
11、個(gè)設(shè)計(jì)時(shí)我也遇到了很多問(wèn)題:比如,做錄音、回放功能的時(shí)候,記錄鍵與鍵之間的時(shí)間的設(shè)置時(shí),記錄的時(shí)間很短,原因就是當(dāng)沒(méi)有鍵按下的時(shí)候,程序會(huì)一直進(jìn)行鍵盤(pán)掃描,而且每次都會(huì)重新進(jìn)行定時(shí)初始值設(shè)置,我們希望的現(xiàn)象是定時(shí)初始值設(shè)置一次就夠了,如果每次都重新設(shè)置定時(shí)器初始值,那么記錄的時(shí)間就會(huì)不準(zhǔn)確。所以這時(shí)就要設(shè)置一個(gè)標(biāo)志,開(kāi)始時(shí)標(biāo)志變量為0,如果是第一次設(shè)置,則設(shè)置完后就令這個(gè)標(biāo)志變量置1,下次循環(huán)的時(shí)候,程序就不會(huì)進(jìn)行重新設(shè)置定時(shí)初始值了。所以這個(gè)標(biāo)志位再程序設(shè)計(jì)的時(shí)候顯得很重要。1和0是二進(jìn)制數(shù),有時(shí)它不僅僅是一個(gè)數(shù)值,它也可以是代表一件事,1代表這件事做了,0則相反。標(biāo)志變量就像是一個(gè)站崗放哨
12、的人,只有這個(gè)人同意了,你才能進(jìn)入。所以當(dāng)我做這個(gè)課程設(shè)計(jì)所遇到的問(wèn)題以及我如何解決的過(guò)程,我感覺(jué)這個(gè)過(guò)程是如此的美妙,我絲毫感覺(jué)不到這是一件痛苦的事情,反而覺(jué)得這是一件讓人上癮的趣事。每當(dāng)遇到的問(wèn)題解決了,我都把他們當(dāng)做是一筆財(cái)富。我覺(jué)得我們學(xué)習(xí)的不僅是單片機(jī)本門(mén)課的知識(shí),而且是學(xué)習(xí)獲得知識(shí)的方法。授之魚(yú)不如授之漁,這句話也體現(xiàn)了方法的重要性。7、參考文獻(xiàn)1 張毅剛 彭喜來(lái).單片機(jī)原理與應(yīng)用設(shè)計(jì).電子工業(yè)出版社,20112張毅剛MCS-51單片機(jī)應(yīng)用設(shè)計(jì)(第二版)哈爾濱大學(xué)出版社,20028、附錄本課程設(shè)計(jì)的源程序:一個(gè).c文件,兩個(gè).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;/定時(shí)器0、1都設(shè)為工作方式1EA=1;/總中斷打開(kāi)ET0=1;/允許T0定時(shí)ET1=1;/允許T1定時(shí)void main()init();/初始化while(1)keyscan();/調(diào)用鍵盤(pán)掃描display();/顯示if(key_function=1)/如果選擇音
14、樂(lè)播放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 /用于音樂(lè)播放器定時(shí)產(chǎn)生音調(diào)TH0=tabletemp/256;TL0=tabletemp%256;BUZZER=!BUZZER;void timer1 () interrupt
15、3/用于電子琴錄音計(jì)時(shí) TH1=(65536-10000)/256;TL1=(65536-10000)%256;a+;keyscan.h鍵盤(pán)掃描源程序(錄音、顯示程序也在里面)#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;/存儲(chǔ)回放的音調(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;/每個(gè)音符的簡(jiǎn)譜碼(T值)void delay1(uint j) while(j-)uint x;for(x=125;x>0;x-);display(); void delay(uint a) / 1ms延時(shí)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() /鍵盤(pán)掃描:線反轉(zhuǎn)法uchar h,l; /h:行 l:列if(key_record=1&&flag=0)/記錄鍵與鍵之間的時(shí)間TH1=(65536-5000)/256;TL1=(65536-5000)%256;TR1=1;flag=1;P3=0xf0; /列全置低電平,行全置高電平h=P3&0xf0;while(h!=0xf0) /若有鍵按下則行會(huì)出現(xiàn)低電平delay(10); /按鍵去抖P3=0xf0; /列全置低電平,行全置高電平h=P3&0xf0;while(h!=0xf0) if(key_record=1)/如果有按鍵按下
20、,則把按鍵前的時(shí)間記錄下來(lái) TR1=0;/關(guān)閉計(jì)時(shí)record_Lb=a;/把按鍵前的時(shí)間記錄下來(lái)a=0;/時(shí)間次數(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)/錄音時(shí),如果有按鍵按下且不是功能鍵recordj=8;/先把按鍵前的初始值記下recordj+1=temp;/再把此按鍵的值記下j=j+2;/下標(biāo)值加2TH1=(65536
23、-5000)/256;/裝初始值TL1=(65536-5000)%256;TR1=1;/啟動(dòng)定時(shí) if(temp!=0)/如果不是功能按鍵 則發(fā)出聲音TH0=tabletemp/256;TL0=tabletemp%256; TR0=1;while(h!=0xf0)/檢查按鍵是否彈起P3=0xf0; /列全置低電平,行全置高電平h=P3&0xf0;TR0=0;/彈起后關(guān)閉定時(shí)if(key_record=1&&temp!=0)/錄音時(shí),如果有按鍵按下且不是功能鍵TR1=0;/關(guān)閉計(jì)時(shí)record_Lb=a;/把按鍵的時(shí)間記下a=0;/時(shí)間次數(shù)清零flag=0;b+;BUZZ
24、ER=1;/把蜂鳴器關(guān)閉play_music.h音樂(lè)播放源程序(回放功能也在里面)#define uint unsigned int #define uchar unsigned char void play(uint *Sound,uint *Sound_L);/音樂(lè)播放 /第一首音樂(lè):一分錢(qián)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;/音長(zhǎng)/第二首音樂(lè):小兔子乖乖u(píng)int 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;/第三首音樂(lè):祝你生日快樂(lè)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. 本站所有資源如無(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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 季節(jié)性主題活動(dòng)設(shè)置方案計(jì)劃
- 錨桿轉(zhuǎn)載機(jī)組、掘錨機(jī)、錨桿鉆車(chē)擴(kuò)建技術(shù)改造建設(shè)項(xiàng)目可行性研究報(bào)告寫(xiě)作模板-拿地備案
- 十年回顧:2010年以來(lái)那些重大的網(wǎng)絡(luò)安全事件盤(pán)點(diǎn)
- 2025-2030全球車(chē)用拉力缸行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球生物過(guò)程深層流過(guò)濾行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球模擬拉線延長(zhǎng)位置探頭行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球LPWAN物聯(lián)網(wǎng)模塊行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)電動(dòng)汽車(chē)轉(zhuǎn)子鐵芯行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)翻新電池行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球汽車(chē)MIMO智能天線行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2024年公安機(jī)關(guān)理論考試題庫(kù)附答案【考試直接用】
- 課題申報(bào)參考:共同富裕進(jìn)程中基本生活保障的內(nèi)涵及標(biāo)準(zhǔn)研究
- 2025中國(guó)聯(lián)通北京市分公司春季校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 康復(fù)醫(yī)學(xué)科患者隱私保護(hù)制度
- 環(huán)保工程信息化施工方案
- 紅色中國(guó)風(fēng)2025蛇年介紹
- 2024年安徽省高考地理試卷真題(含答案逐題解析)
- 高中學(xué)校開(kāi)學(xué)典禮方案
- 2024年度中國(guó)郵政集團(tuán)公司縣分公司工作總結(jié)
- DL∕T 1844-2018 濕式靜電除塵器用導(dǎo)電玻璃鋼陽(yáng)極檢驗(yàn)規(guī)范
- JTG D62-2004 公路鋼筋混凝土及預(yù)應(yīng)力混凝土橋涵設(shè)計(jì)規(guī)范
評(píng)論
0/150
提交評(píng)論