版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 單片機原理及系統(tǒng)課程設(shè)計</p><p> 專 業(yè): 自動控制 </p><p> 班 級: </p><p> 姓 名: </p><p> 學 號: </p><p> 2014 年 1
2、月 15 日</p><p> 評語:</p><p> 考勤10分守紀10分過程30分設(shè)計報告30分答辯20分總成績(100分)</p><p> 基于單片機的多音階電子琴的設(shè)計</p><p><b> 1 設(shè)計題目</b></p><p> 本次單片機原理與系統(tǒng)課程設(shè)計題目是基于單片機
3、的多音階電子琴。主要將十個音鍵制作成獨立鍵盤,并用數(shù)碼管進行顯示。本設(shè)計還預先存放一段音樂程序在芯片內(nèi),整個設(shè)計既可以作電子琴用又可以作音樂盒用,且?guī)э@示功能。</p><p><b> 2 設(shè)計目的</b></p><p> 1、通過課程設(shè)計,使我們能夠深入理解單片機系統(tǒng)的工作原理,接口電路的設(shè)計及調(diào)試方法,培養(yǎng)綜合運用所學理論知識分析和解決實際問題的能力;&l
4、t;/p><p> 2、使用AT89C52芯片的串口功能,利用獨立式鍵盤和AT89C52單片機以及揚聲器實現(xiàn)樂曲的演奏;</p><p> 3、用keil軟件進行編程與調(diào)試,利用Proteus 7 Professional軟件進行繪制硬件電路圖且進行仿真.</p><p><b> 3 設(shè)計方案及原理</b></p><p
5、> 3.1 總體設(shè)計方案</p><p> 采用AT89C52單片機作為主控芯片,設(shè)置鍵盤、蜂鳴器等外圍器件,另外還用到一些簡單器件如:四位數(shù)碼管和NPN型三極管及電阻等。利用按鍵實現(xiàn)音符和音調(diào)的輸入,兩位的數(shù)碼管進行被操作的按鍵顯示,用NPN型三極管8550實現(xiàn)低音頻功率放大,最后用蜂鳴器發(fā)音。</p><p> 3.2系統(tǒng)原理及結(jié)構(gòu)</p><p>
6、 本系統(tǒng)基本結(jié)構(gòu)框圖如圖1所示。</p><p><b> 圖1 原理框圖</b></p><p><b> 4 硬件設(shè)計</b></p><p><b> 4.1時鐘電路 </b></p><p> 單片機內(nèi)部具有一個高增益反相放大器,用于構(gòu)成振蕩器。通常在引腳XT
7、ALl和XTAL2跨接石英晶體和兩個補償電容構(gòu)成自激振蕩器,如結(jié)構(gòu)圖2 中X1、C1、C2。</p><p><b> 圖 2 時鐘電路</b></p><p><b> 4.2復位電路 </b></p><p> 單片機系統(tǒng)常采用上電自動復位和手動按鍵復位兩種方式實現(xiàn)系統(tǒng)的復位操作。上電復位要求接通電源后,自動實現(xiàn)
8、復位操作。手動復位要求在電源接通的條件下,在單片機運行期間,用按鈕開關(guān)操作使單片機復位。其結(jié)構(gòu)如圖3所示。</p><p><b> 圖 3 復位電路</b></p><p><b> 4.3顯示部分</b></p><p> 本次課程設(shè)計的顯示電路采用兩位數(shù)碼管進行顯示。如圖4所示。</p><
9、p><b> 圖 4 數(shù)碼管電路</b></p><p> 4.4 按鍵與發(fā)音部分</p><p> 鍵盤設(shè)計:獨立式按鍵是直接用I/O口線構(gòu)成的單個按鍵電路,其特點是每個按鍵單獨占用一根I/O口線,每個按鍵的工作不會影響其它I/O口線的狀態(tài)。獨立式鍵盤如圖5所示。</p><p><b> 圖 5 獨立式鍵盤</
10、b></p><p> 發(fā)音部分設(shè)計:有一個按鍵和揚聲器組成。電路如圖6所示。</p><p> 圖 6 發(fā)音部分電路</p><p><b> 5 軟件設(shè)計</b></p><p><b> 5.1 系統(tǒng)分析</b></p><p> 系統(tǒng)的軟件組成:(1)
11、鍵盤掃描程序:檢測是否有按鍵按下,有按鍵按下則記錄按下鍵的鍵值,并跳轉(zhuǎn)至功能轉(zhuǎn)移程序,無按鍵按下,則返回鍵盤掃描程序繼續(xù)檢測。</p><p> ?。?)功能轉(zhuǎn)移程序:對檢測到的按鍵值進行判斷,是琴鍵則跳轉(zhuǎn)至琴鍵處理程序,是功能鍵則跳轉(zhuǎn)至相應(yīng)的功能程序。</p><p> ?。?)琴鍵處理程序:根據(jù)檢測到的按鍵值,查詢音調(diào)表,給計時器賦值,使發(fā)出相應(yīng)頻率的聲音。</p>&l
12、t;p> ?。?)自動播放歌曲程序:檢測到按鍵按下的是自動播放歌曲功能鍵后執(zhí)行該程序,電子琴會自動播放事先已經(jīng)存放的歌曲。</p><p> 系統(tǒng)總體流程圖見附錄1。</p><p><b> 5.2程序設(shè)計</b></p><p> C編程語言程序見附錄2。</p><p> 6 系統(tǒng)仿真及實際調(diào)試<
13、;/p><p><b> 6.1 仿真結(jié)果</b></p><p> 仿真結(jié)果如圖7所示。</p><p><b> 圖7 系統(tǒng)仿真圖</b></p><p><b> 6.2結(jié)果分析</b></p><p> 根據(jù)仿真結(jié)果可知,本次課程設(shè)計能夠
14、準確并徹底的完成設(shè)計要求。右側(cè)數(shù)碼管顯示0、1、2三種結(jié)果時,分別代表低音、中音和高音。右側(cè)數(shù)碼管顯示1、2、3、4、5、6、7七個數(shù)字時,分別代表DO、RE、MI、FA、SO、LA、SI七種音符。當系統(tǒng)上電后,若按下低音鍵,則選定工作方式為低音模式。P0口連接數(shù)碼管段選端,右側(cè)數(shù)碼管顯示的3即代表MI。四位數(shù)碼管即代表低音MI。</p><p><b> 7 總結(jié)</b></p&g
15、t;<p> 本次課程設(shè)計主要涉及硬件和軟件兩方面的內(nèi)容,通過這些使我的硬件和軟件開發(fā)能力都獲得了提高。硬件方面,基本了解了電子產(chǎn)品的開發(fā)流程和所要做的工作。通過硬件搭建的過程,使我對52系列單片機的接口有了更深層次的理解,熟悉了一些單片機常用的外圍電路引腳和連接方法,如LED數(shù)碼管,鍵盤等。在軟件方面,我的能力比較差,為了很好地完成軟硬件結(jié)合,我努力學習52系列單片機內(nèi)部的寄存器和編程規(guī)則以及學習了如何控制外圍電路等內(nèi)
16、容。通過此次設(shè)計我發(fā)現(xiàn)自己對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,因此也利用圖書館、網(wǎng)絡(luò)資源查閱了大量文獻資料,也請教了老師和同學。本次課程設(shè)計是我學到了很多,一方面,將自己的理論知識與實踐相結(jié)合起來,進一步鞏固了專業(yè)基礎(chǔ)知識和相關(guān)專業(yè)課程知識;另一方面,更培養(yǎng)了自己獨立自主、綜合分析的思維與創(chuàng)新能力。</p><p> 最后,衷心的感謝各位老師和同學的精心指導,使我能夠順利地完成本次課程設(shè)計。<
17、;/p><p><b> 參考文獻</b></p><p> [1]蘇家健,曹柏榮,汪志鋒. 單片機原理及應(yīng)用技術(shù). 北京:高等教育出版社,2003</p><p> [2]李朝青. 單片機原理及接口技術(shù). 北京:北京航天航空大學出版色,2001</p><p> [3]胡漢才. 單片機原理及其接口技術(shù). 北京:清華
18、大學出版社,2004.</p><p> [4]潭浩強. C語言程序設(shè)計. 北京:清華大學出版社,2005</p><p> [5]王思明,張金敏,張鑫等,單片機原理及應(yīng)用系統(tǒng)設(shè)計[M].北京:科學出版社,2012.</p><p> 附錄1 系統(tǒng)總體流程圖</p><p> 附錄 2 源程序代碼</p><p
19、> #include<reg52.h> </p><p> #define uchar unsigned char</p><p> void Run(void);</p><p> void KeyScan(void); </p><p> void PlayKey(void); </p><
20、p> void delay_1ms(uchar i); </p><p> void PlayMusic(void); </p><p> void DisPlay(void);</p><p> sbit Beep=P3^7; </p><p> uchar Th0,Tl0; //TH0,TL
21、0 </p><p> uchar flag=0xff; //模式,0表示音樂,ff表示按鍵</p><p> uchar key=0; //按鍵代號 </p><p> uchar a; uchar gaodi=0; //音樂音符 </p><p>
22、uchar code MusicCode[]={0XFc,0X44,0XFc,0Xac,0XFd,0X09,0XFd,0X34, </p><p> 0XFD,0X82,0XFD,0Xc8,0XFD,0X06,0XFb,0X04, </p><p> 0Xfb,0X90,0Xfc,0X0c,0Xfe,0X22,0Xf9,0X5b,0Xfa,0x15 };
23、 //月亮代表我的心 </p><p> uchar code Music[]={</p><p> 0X02,0X82, </p><p> 0X16,0X32,0X54,0X02,0X52, </p><p> 0XA6,0X32,0X54,0X02,0X52,</p><p>
24、 0X64,0X74,0XB6,0X64,</p><p> 0X52,0X5C,0X32,0X22, </p><p> 0X16,0X12,0X14,0X32,0X22, </p><p> 0X16,0X12,0X14,0X22,0X32, </p><p> 0X26,0X12,0X94,0X22,0X32, </p&
25、gt;<p><b> 0X2C, </b></p><p> 0X32,0X52, </p><p> 0X36,0X22,0X14,0X54, </p><p> 0XAC,0X92,0XA2,</p><p> 0X96,0X0A2,0X96,0X82, </p><p&
26、gt; 0X3C,0X54,</p><p> 0X36,0X22,0X14,0X54, </p><p> 0XAC,0X92,0XA2,</p><p> 0X16,0X12,0X14,0X22,0X32, </p><p> 0X2C,0X02,0X82, </p><p> 0X16,0X32,0X
27、56,0X12, </p><p> 0XA6,0X32,0X56,0X52,</p><p> 0X66,0X72,0XB6,0X62,</p><p> 0X62,0X52,0X58,0X32,0X22,</p><p> 0X16,0X12,0X14,0X32,0X22,</p><p> 0X16,0
28、X12,0X14,0X22,0X32, </p><p><b> 0X1C,</b></p><p><b> 0XFF};</b></p><p><b> //按鍵音符</b></p><p> uchar code KeyCode[]={0XFF,0XFF, &
29、lt;/p><p> 0xF8,0x8B,0xF9,0x5B,0xFA,0x14,0xFA,0x66,0xFB,0x03,0xFB,0x8F,0xFC,0x0B,//低音 </p><p> 0xFC,0x43,0xFC,0xAB,0xFD,0x08,0xFD,0x33,0xFD,0x81,0xFD,0xC7,0xFE,0x05,//中音 </p><p> 0x
30、FE,0x21,0xFE,0x55,0xFE,0x84,0xFE,0X99,0XFE,0xC0,0xFE,0xE3,0xFF,0x02,//高音</p><p><b> }; </b></p><p> void main(void) </p><p><b> {</b></p><p>
31、 P1=0XFF; //初始化 </p><p><b> P0=0XFF; </b></p><p><b> P2=0;</b></p><p> TMOD=0X01; </p><p><b> IT0=1;</b>&
32、lt;/p><p><b> TR0=0; </b></p><p><b> EX0=1; </b></p><p><b> ET0=1; </b></p><p><b> EA=1; </b></p><p>
33、 while(1) </p><p><b> { </b></p><p> KeyScan(); //按鍵掃描 </p><p> Run(); //運行 </p><p> DisPlay();
34、 //顯示 </p><p><b> }</b></p><p><b> }</b></p><p> void Run(void) //運行 </p><p><b> {</b></p>&
35、lt;p> if(flag==0) </p><p> PlayMusic(); </p><p> else PlayKey();</p><p><b> } </b></p><p> void KeyScan(void) //按鍵掃描 </p><p
36、> { if(P1==0XFE) //第一按鍵按下 </p><p> { delay_1ms(12); //延時12MS </p><p> if(P1==0XFE) //確定按下 </p><p> {key=1; a=key;</p><p
37、><b> }</b></p><p><b> } </b></p><p> else if(P1==0XFD)</p><p><b> { </b></p><p> delay_1ms(12);</p><p> if(P1
38、==0XFD) </p><p> {key=2; a=key;} </p><p><b> } </b></p><p> else if(P1==0XFB) </p><p><b> { </b></p><p> delay_1ms(12);
39、</p><p> if(P1==0XFB) </p><p><b> {key=3; </b></p><p><b> a=key;}</b></p><p><b> } </b></p><p> else if(P1==0X
40、F7) </p><p><b> {</b></p><p> delay_1ms(12);</p><p> if(P1==0XF7)</p><p><b> {key=4; </b></p><p><b> a=key;}</b>
41、</p><p><b> } </b></p><p> else if(P1==0XEF) </p><p><b> {</b></p><p> delay_1ms(12);</p><p> if(P1==0XEF)</p><p>
42、;<b> {key=5; </b></p><p><b> a=key;}</b></p><p><b> }</b></p><p> else if(P1==0XDF)</p><p><b> {</b></p><
43、;p> delay_1ms(12);</p><p> if(P1==0XDF)</p><p><b> {key=6;</b></p><p><b> a=key;}</b></p><p><b> }</b></p><p>
44、 else if(P1==0XBF)</p><p><b> {</b></p><p> delay_1ms(12);</p><p> if(P1==0XBF)</p><p><b> {key=7;</b></p><p><b> a=key;
45、}</b></p><p><b> }</b></p><p> else if(P0==0XFE) //低音模式鍵按下</p><p> { delay_1ms(12); </p><p> if(P0==0XFE)</p><p><b
46、> {gaodi=0;</b></p><p><b> a=gaodi;}</b></p><p><b> } </b></p><p> else if(P0==0XFD) //中音模式鍵按下 </p><p><b> {
47、 </b></p><p> delay_1ms(12);</p><p> if(P0==0XFD)</p><p> {gaodi=1; </p><p><b> a=gaodi;}</b></p><p><b> } </b></p>
48、;<p> else if(P0==0XFB) //高音模式鍵按下 </p><p><b> { </b></p><p> delay_1ms(12);</p><p> if(P0==0XFB)</p><p> {gaodi=2; </p>
49、<p><b> a=gaodi;}</b></p><p><b> }</b></p><p> else return;</p><p><b> } </b></p><p> void PlayKey(void)
50、 //響應(yīng)按鍵</p><p><b> { </b></p><p> if(key==0)</p><p><b> return;</b></p><p><b> else</b></p><p><b> {<
51、;/b></p><p> Th0=KeyCode[gaodi*14+key*2];</p><p> Tl0=KeyCode[gaodi*14+key*2+1];</p><p> TR0=1; delay_1ms(187);</p><p> TR0=0; key=0;</p><p><
52、;b> }</b></p><p><b> }</b></p><p> time0() interrupt 1 //定時器0中斷</p><p><b> { </b></p><p><b> TH0=Th0;<
53、;/b></p><p><b> TL0=Tl0;</b></p><p> Beep=~Beep;</p><p><b> }</b></p><p> void interrupt0() interrupt 0 //外部中斷0</p>&l
54、t;p><b> {</b></p><p> flag=~flag;</p><p> if(flag==0)</p><p><b> {</b></p><p><b> a=8;</b></p><p><b> P2
55、=0;</b></p><p><b> } </b></p><p><b> }</b></p><p> void delay_1ms(uchar i) //延時 </p><p><b> {</b></p&g
56、t;<p> uchar j,k;</p><p> for(j=0;j<i;j++)</p><p> for(k=0;k<148;k++)</p><p><b> ; </b></p><p><b> }</b></p><p>
57、 void PlayMusic(void) //播放音樂</p><p> { uchar yinfu,jiepai;</p><p> uchar i,j;</p><p> for(i=0;Music[i]!=0XFF;i++)</p><p><b> {</b>&l
58、t;/p><p> yinfu=(Music[i]>>4);</p><p> jiepai=(Music[i]&0X0F);</p><p> if(yinfu==0)</p><p><b> continue;</b></p><p> Th0=MusicCode[
59、(yinfu-1)*2];</p><p> Tl0=MusicCode[(yinfu-1)*2+1];</p><p><b> TR0=1;</b></p><p> for(j=jiepai;j>0;--j)</p><p><b> {</b></p><p
60、> delay_1ms(250);</p><p><b> }</b></p><p><b> TR0=0;</b></p><p> if(flag!=0)</p><p><b> break;</b></p><p><b
61、> }</b></p><p><b> }</b></p><p> void DisPlay(void) //顯示</p><p><b> {</b></p><p><b> switch(a)</b>
62、</p><p><b> { </b></p><p> case 0: P2= 0X3F;break;</p><p> case 1: P2= 0X06;break;</p><p> case 2: P2= 0X5B;break;</p><p> case 3: P2= 0X4
63、F;break; </p><p> case 4: P2= 0X66;break;</p><p> case 5: P2= 0X6D;break;</p><p> case 6: P2= 0X7D;break;</p><p> case 7: P2= 0X07;break;</p><p> defa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子琴課程設(shè)計-- 基于單片機的電子琴設(shè)計
- 電子琴課程設(shè)計--基于單片機的電子琴設(shè)計
- 基于單片機的電子琴課程設(shè)計報告
- 單片機課程設(shè)計報告--電子琴
- 基于單片機的電子琴課程設(shè)計報告
- 單片機課程設(shè)計—基于單片機的電子琴
- 基于單片機的電子琴課程設(shè)計
- 單片機課程設(shè)計---基于單片機的電子琴設(shè)計
- 單片機課程設(shè)計---電子琴
- 單片機課程設(shè)計(電子琴)
- 基于單片機的電子琴課程設(shè)計
- 單片機課程設(shè)計-電子琴
- 單片機課程設(shè)計——電子琴
- 單片機原理課程設(shè)計報告--電子琴
- 基于單片機的電子琴設(shè)計課程設(shè)計
- 單片機電子琴課程設(shè)計--基于單片機的可存儲式電子琴設(shè)計
- 單片機課程設(shè)計---電子琴設(shè)計
- 課程設(shè)計 ---基于單片機的電子琴設(shè)計
- 單片機課程設(shè)計---電子琴設(shè)計
- 單片機簡易電子琴單片機課程設(shè)計
評論
0/150
提交評論