版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 設(shè)計(jì)目的</b></p><p> 提高51單片機(jī)理論知識(shí)</p><p><b> 學(xué)會(huì)如何設(shè)計(jì)電子琴</b></p><p><b> 提高編程能力</b></p><p><b> 設(shè)計(jì)要求</b></p&
2、gt;<p> 1.設(shè)計(jì)一個(gè)(4×4)的鍵盤,并將16個(gè)鍵設(shè)計(jì)成16個(gè)音</p><p> 2.可彈奏想要表達(dá)的音樂(lè)</p><p> 3.該電子琴包含1首示例音樂(lè),接通電源可播放示例音樂(lè)</p><p><b> 設(shè)計(jì)過(guò)程</b></p><p><b> 主要芯片功能描述&
3、lt;/b></p><p> AT89C51是在一塊芯片中集成了CPU、RAM、ROM、定時(shí)器/計(jì)數(shù)器和多種功能的I/O線等一臺(tái)計(jì)算機(jī)所需要的基本部件。其內(nèi)包含下列幾個(gè)部件: 1).一個(gè)8位CPU ; 2).一個(gè)片內(nèi)振蕩器及時(shí)鐘電路; 3).4K字節(jié)ROM程序存儲(chǔ)器; 4).128字節(jié)RAM數(shù)據(jù)存儲(chǔ)器 5).可尋址64K外部數(shù)據(jù)存儲(chǔ)器和64K外部程序存儲(chǔ)器空間的控制電路;
4、 6).32條可編程的I/O線(四個(gè)8為并行I/O端口); 7).具有五個(gè)中斷源、兩個(gè)優(yōu)先級(jí)嵌套結(jié)構(gòu);</p><p><b> 其外型如圖示:</b></p><p><b> 2.音樂(lè)頻率</b></p><p> 一首音樂(lè)是許多不同的音階組成的,而每個(gè)音階對(duì)應(yīng)著不同的頻率,這樣我們就可以利用不同的頻
5、率的組合,即可構(gòu)成我們所想要的音樂(lè)了,當(dāng)然對(duì)于單片機(jī)來(lái)產(chǎn)生不同的頻率非常方便,我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來(lái)產(chǎn)生這樣方波頻率信號(hào),因此,我們只要把一首歌曲的音階對(duì)應(yīng)頻率關(guān)系弄正確即可。單片機(jī)12MHZ晶振,高中低音符與單片機(jī)計(jì)數(shù)T0相關(guān)的計(jì)數(shù)值如下表所示 : </p><p><b> 3.設(shè)計(jì)硬件部分</b></p><p> 如下圖所示,硬件部分采用的
6、是逐列掃描,右邊16個(gè)按鍵對(duì)應(yīng)16個(gè)音。不斷檢測(cè)十六個(gè)按鍵,當(dāng)某個(gè)按鍵被按下,先檢測(cè)出是哪一列被按下,再判斷哪個(gè)鍵被按下。左邊的三個(gè)按鍵是我設(shè)置的三個(gè)功能鍵,P1.0是歌曲《祝你生日快樂(lè)》, P1.1是歌曲《找朋友》,當(dāng)檢測(cè)到按鍵被按下時(shí),P1.0和P1.1接地,所以歌曲就播放。P1.2是一個(gè)暫停/啟動(dòng)按鍵,當(dāng)歌曲播放時(shí),按下它就啟動(dòng);當(dāng)歌曲再次按下,它就停止播放。</p><p><b> 軟件設(shè)計(jì)
7、部分</b></p><p> 程序設(shè)計(jì)的流程圖如下圖,不斷檢測(cè)16個(gè)音階鍵或功能鍵哪個(gè)被按下,當(dāng)音階鍵被按下時(shí),發(fā)出對(duì)應(yīng)的音;當(dāng)功能鍵被按下時(shí),執(zhí)行相應(yīng)的功能。然后再檢測(cè)按鍵釋放成不成功,也就是平時(shí)所說(shuō)的松手檢測(cè),不成功就不斷再檢測(cè),成功就停止工作。</p><p><b> 設(shè)計(jì)心得</b></p><p> 通過(guò)本次課程
8、設(shè)計(jì),遇到了許多問(wèn)題,也提高了自己的實(shí)踐能力。如設(shè)計(jì)硬件部分,我用了另外三個(gè)獨(dú)立功能鍵,雖然這樣做簡(jiǎn)單很多,但是浪費(fèi)了IO口的資源;設(shè)計(jì)軟件部分,發(fā)現(xiàn)自己的編程能力還有很多問(wèn)題,改了又改,特別是實(shí)現(xiàn)功能鍵,花了很多時(shí)間。在這次課程設(shè)計(jì)中,之所以存在著很多的問(wèn)題,最主要是課外知識(shí)不夠廣,電子方面的知識(shí)比較欠缺,認(rèn)識(shí)到了自己的弱點(diǎn),在接下來(lái)的時(shí)間會(huì)針對(duì)這方面努力。回顧起此次單片機(jī)課程設(shè)計(jì),至今我仍感慨頗多,科技日益更新,我們要跟上時(shí)代的步伐
9、就要掌握好知識(shí),努力向上。</p><p><b> 附錄 </b></p><p><b> 設(shè)計(jì)源程序:</b></p><p> #include<reg52.h></p><p> #define uchar unsigned char</p><p
10、> #define uint unsigned int</p><p> sbit beep=P2^3; //定義蜂鳴器</p><p> uchar temp,key;</p><p> sbit s1=P1^0; //定義功能鍵1 </p
11、><p> sbit s2=P1^1; //定義功能鍵2</p><p> sbit s3=P1^2; //定義功能鍵3</p><p> uint code table[]={64021,64103,64260,64400,</p><p&g
12、t; 64524,64580,64684,64777,</p><p> 64820,64898,64968,65030,</p><p> 65058,65110,65157,65178}; //頻率</p><p> void delay(uint z) //延時(shí)程序</p><p>&l
13、t;b> {</b></p><p><b> uint x,y;</b></p><p> for(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p><b> }</b></p><p&g
14、t; void main()</p><p><b> {</b></p><p> TMOD=0x01; </p><p> EA=1; //開(kāi)總中斷</p><p> ET0=1;
15、 //開(kāi)定時(shí)器0中斷</p><p><b> while(1)</b></p><p><b> {</b></p><p> P3=0xfe; </p><p><b> temp=
16、P3;</b></p><p> temp=temp&0xf0;</p><p> if(temp!=0xf0) //檢測(cè)第一行按鍵 </p><p><b> {</b></p><p> delay(10);</p><p>
17、;<b> temp=P3;</b></p><p> temp=temp&0xf0;</p><p> if(temp!=0xf0)</p><p><b> {</b></p><p> temp=P3;</p><p> switch(temp)
18、</p><p> { </p><p> case 0xee:</p><p><b> key=0;</b></p><p><b> break;</b></p><p> case 0xde:</p><p&
19、gt;<b> key=1;</b></p><p><b> break;</b></p><p> case 0xbe:</p><p><b> key=2;</b></p><p><b> break;</b></p>&
20、lt;p> case 0x7e:</p><p><b> key=3;</b></p><p> break;</p><p><b> }</b></p><p> TH0=table[key]/256;</p><p> TL0=ta
21、ble[key]%256;</p><p> TR0=1;</p><p> while(temp!=0xf0) //松手檢測(cè)</p><p><b> {</b></p><p><b> temp=P3;</b></p>
22、<p> temp=temp&0xf0;</p><p><b> }</b></p><p><b> TR0=0;</b></p><p> beep=1;</p><p><b> }</b></p>
23、<p><b> }</b></p><p> P3=0xfd; //檢測(cè)第二行按鍵 </p><p><b> temp=P3;</b></p><p> temp=temp&0xf0;</p&g
24、t;<p> if(temp!=0xf0)</p><p><b> {</b></p><p> delay(10);</p><p><b> temp=P3;</b></p><p> temp=temp&0xf0;</p><p>
25、if(temp!=0xf0)</p><p><b> {</b></p><p> temp=P3;</p><p> switch(temp)</p><p> { </p><p> case 0xed:</p><p>
26、<b> key=4;</b></p><p><b> break;</b></p><p> case 0xdd:</p><p><b> key=5;</b></p><p><b> break;</b></p><
27、p> case 0xbd:</p><p><b> key=6;</b></p><p><b> break;</b></p><p> case 0x7d:</p><p><b> key=7;</b></p><p><b
28、> break;</b></p><p><b> }</b></p><p> TH0=table[key]/256;</p><p> TL0=table[key]%256;</p><p> TR0=1;</p><p> while(
29、temp!=0xf0)</p><p><b> {</b></p><p><b> temp=P3;</b></p><p> temp=temp&0xf0;</p><p><b> }</b></p><p><b&
30、gt; TR0=0;</b></p><p> beep=1;</p><p><b> }</b></p><p> }</p><p> P3=0xfb; //檢測(cè)第三行按鍵
31、 </p><p><b> temp=P3;</b></p><p> temp=temp&0xf0;</p><p> if(temp!=0xf0)</p><p><b> {</b></p><p> d
32、elay(10);</p><p><b> temp=P3;</b></p><p> temp=temp&0xf0;</p><p> if(temp!=0xf0)</p><p><b> {</b></p><p> temp=P3;</p
33、><p> switch(temp)</p><p> { </p><p> case 0xeb:</p><p><b> key=8;</b></p><p><b> break;</b></p><p>
34、 case 0xdb:</p><p><b> key=9;</b></p><p><b> break;</b></p><p> case 0xbb:</p><p><b> key=10;</b></p><p><b>
35、 break;</b></p><p> case 0x7b:</p><p><b> key=11;</b></p><p><b> break;</b></p><p><b> }</b></p><p> TH0=ta
36、ble[key]/256;</p><p> TL0=table[key]%256;</p><p> TR0=1;</p><p> while(temp!=0xf0)</p><p><b> {</b></p><p><b> temp=P3;
37、</b></p><p> temp=temp&0xf0;</p><p><b> }</b></p><p><b> TR0=0;</b></p><p> beep=1;</p><p><b&
38、gt; }</b></p><p> }</p><p> P3=0xf7; //檢測(cè)第四行按鍵 </p><p><b> temp=P3;</b></p><p>
39、temp=temp&0xf0;</p><p> if(temp!=0xf0)</p><p><b> {</b></p><p> delay(10);</p><p><b> temp=P3;</b></p><p> temp=temp&0
40、xf0;</p><p> if(temp!=0xf0)</p><p><b> {</b></p><p> temp=P3;</p><p> switch(temp)</p><p> { </p><p> case
41、 0xe7:</p><p><b> key=12;</b></p><p><b> break;</b></p><p> case 0xd7:</p><p><b> key=13;</b></p><p><b> bre
42、ak;</b></p><p> case 0xb7:</p><p><b> key=14;</b></p><p><b> break;</b></p><p> case 0x77:</p><p><b> key=15;</
43、b></p><p><b> break;</b></p><p><b> }</b></p><p> TH0=table[key]/256;</p><p> TL0=table[key]%256;</p><p> TR0=1;
44、</p><p> while(temp!=0xf0)</p><p><b> {</b></p><p><b> temp=P3;</b></p><p> temp=temp&0xf0;</p><p><b> }</b
45、></p><p><b> TR0=0;</b></p><p> beep=1;</p><p><b> }</b></p><p> }</p><p> if(s1==0)
46、 //功能鍵1</p><p><b> {</b></p><p> delay(10);</p><p><b> if(s1==0)</b></p><p><b> {</b></p><p><b> TR0
47、=1;</b></p><p><b> while(1)</b></p><p><b> { </b></p><p> if(s3==0) //功能鍵3</p><p><b> {</b></p><p&
48、gt;<b> delay(1);</b></p><p><b> if(s3==0)</b></p><p><b> {</b></p><p> TR0=~TR0; //設(shè)置啟動(dòng)\暫停</p><p> while(!s3);</p>
49、<p><b> }</b></p><p><b> }</b></p><p> key=4; //祝你生日快樂(lè)</p><p> TH0=table[key]/256;</p><p> TL0=table[key]
50、%256;</p><p> delay(150); </p><p><b> key=4;</b></p><p> TH0=table[key]/256;</p><p> TL0=table[key]%256; </p><p&g
51、t; delay(150); </p><p><b> key=5;</b></p><p> TH0=table[key]/256;</p><p> TL0=table[key]%256; </p><p> delay(300); </p>&
52、lt;p><b> key=4;</b></p><p> TH0=table[key]/256;</p><p> TL0=table[key]%256;</p><p> delay(300); </p><p><b> key=7;</b>&l
53、t;/p><p> TH0=table[key]/256;</p><p> TL0=table[key]%256;</p><p> delay(300);</p><p><b> key=6;</b></p><p> TH0=table[key]/256;</p&
54、gt;<p> TL0=table[key]%256;</p><p> delay(600);</p><p><b> key=4;</b></p><p> TH0=table[key]/256;</p><p> TL0=table[key]%256;
55、</p><p> delay(150);</p><p><b> key=4;</b></p><p> TH0=table[key]/256;</p><p> TL0=table[key]%256; </p><p> delay(150);<
56、/p><p><b> key=5;</b></p><p> TH0=table[key]/256;</p><p> TL0=table[key]%256; </p><p> delay(300); </p><p><b> key=4;<
57、/b></p><p> TH0=table[key]/256;</p><p> TL0=table[key]%256;</p><p> delay(300); </p><p><b> key=8;</b></p><p> TH0=tab
58、le[key]/256;</p><p> TL0=table[key]%256;</p><p> delay(300);</p><p><b> key=6;</b></p><p> TH0=table[key]/256;</p><p> TL0=table[ke
59、y]%256;</p><p> delay(300);</p><p><b> beep=1;</b></p><p> while(!s1); //松手檢測(cè)</p><p><b> }</b></p>
60、<p><b> }</b></p><p><b> }</b></p><p> if(s2==0) //功能鍵2</p><p><b> {</b></p><p> dela
61、y(10);</p><p><b> if(s2==0)</b></p><p><b> {</b></p><p><b> TR0=1;</b></p><p><b> while(1)</b></p><p>&
62、lt;b> {</b></p><p> if(s3==0) //功能鍵3</p><p><b> {</b></p><p> delay(10);</p><p><b> if(s3==0)</b></p>
63、<p><b> {</b></p><p> TR0=~TR0;</p><p><b> }</b></p><p><b> }</b></p><p> key=4; //找朋
64、友</p><p> TH0=table[key]/256;</p><p> TL0=table[key]%256;</p><p> delay(400);</p><p><b> key=5;</b></p><p> TH0=table[key]/25
65、6;</p><p> TL0=table[key]%256;</p><p> delay(400);</p><p><b> key=4;</b></p><p> TH0=table[key]/256;</p><p> TL0=table[key]%2
66、56;</p><p> delay(400);</p><p><b> key=5;</b></p><p> TH0=table[key]/256;</p><p> TL0=table[key]%256;</p><p> delay(400)
67、;</p><p><b> key=4;</b></p><p> TH0=table[key]/256;</p><p> TL0=table[key]%256;</p><p> delay(800);</p><p><b&g
68、t; key=4;</b></p><p> TH0=table[key]/256;</p><p> TL0=table[key]%256;</p><p> delay(400);</p><p><b> key=7;</b></p><p&g
69、t; TH0=table[key]/256;</p><p> TL0=table[key]%256;</p><p> delay(400);</p><p><b> key=6;</b></p><p> TH0=table[key]/256;</p><
70、p> TL0=table[key]%256;</p><p> delay(400);</p><p><b> key=5;</b></p><p> TH0=table[key]/256;</p><p> TL0=table[key]%256;</p>
71、<p> delay(400);</p><p><b> key=4;</b></p><p> TH0=table[key]/256;</p><p> TL0=table[key]%256;</p><p> delay(800);<
72、/p><p><b> key=2;</b></p><p> TH0=table[key]/256;</p><p> TL0=table[key]%256;</p><p> delay(800);</p><p><b> beep=1;</b&
73、gt;</p><p> while(!s2); //松手檢測(cè)</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b&
74、gt; }</b></p><p><b> }</b></p><p> void time() interrupt 1 //中斷</p><p><b> {</b></p><p> TH0=table[key]/256;</p>
溫馨提示
- 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ù)僅提供信息存儲(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ì) (2)
- 單片機(jī)電子琴課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子琴課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)----簡(jiǎn)易單片機(jī)電子琴設(shè)計(jì)
- 單片機(jī)電子琴課程設(shè)計(jì)--基于單片機(jī)的可存儲(chǔ)式電子琴設(shè)計(jì)
- 單片機(jī)電子琴課程設(shè)計(jì)--帶存儲(chǔ)播放功能的簡(jiǎn)易電子琴設(shè)計(jì)
- 《單片機(jī)原理及應(yīng)用》課程設(shè)計(jì)—單片機(jī)電子琴設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---電子琴
- 單片機(jī)課程設(shè)計(jì)(電子琴)
- 電子琴課程設(shè)計(jì)--基于單片機(jī)的電子琴設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-電子琴
- 單片機(jī)課程設(shè)計(jì)——電子琴
- 電子琴課程設(shè)計(jì)--基于單片機(jī)的電子琴設(shè)計(jì)
- 電子琴課程設(shè)計(jì)-- 基于單片機(jī)的電子琴設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---電子琴設(shè)計(jì)
- 單片機(jī)電子系統(tǒng)課程設(shè)計(jì)—簡(jiǎn)易電子琴
- 單片機(jī)課程設(shè)計(jì)---電子琴設(shè)計(jì)
- 電子琴單片機(jī)課程設(shè)計(jì)--電子琴模擬實(shí)驗(yàn)
- ats單片機(jī)電子琴設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論