版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、山東建筑大學(xué)信息與電氣工程學(xué)院學(xué)院課程設(shè)計說明書山東建筑大學(xué)課 程 設(shè) 計 說 明 書題 目: 基于單片機的數(shù)字音樂盒課 程: 單片機原理及應(yīng)用B課程設(shè)計院 (部): 信息與電氣工程學(xué)院專 業(yè): 電子信息工程班 級: 學(xué)生姓名: 學(xué) 號: 指導(dǎo)教師: 高煥兵 張君捧完成日期: 2013年6月I目 錄摘 要I1 設(shè)計目的22 設(shè)計要求23 設(shè)計內(nèi)容33.1 設(shè)計原理33.2 方案設(shè)計33.3 電路各模塊說明43.4 器件選擇63.5系統(tǒng)設(shè)計83.6 軟件設(shè)計83.7 仿真調(diào)試及操作說明9總結(jié)與致謝10參考文獻11附錄12附錄一:基于單片機的數(shù)字音樂盒總電路圖12附錄二:音樂程序12摘 要20世紀(jì)
2、末,電子技術(shù)獲得了飛速的發(fā)展,在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領(lǐng)域,基于單片機制作的電子式音樂盒,控制功能強大,可根據(jù)需要選歌,使用方便。所放歌曲的節(jié)奏可以根據(jù)需要進行設(shè)置,根據(jù)存儲容量的大小,可以盡可能多的存儲歌曲。本設(shè)計由由單片機AT80C51芯片和LCD顯示器為核心,輔以必要的電路,構(gòu)成的一個單片機電子數(shù)字音樂盒。本設(shè)計采用4*4鍵盤,用Protel99來畫系統(tǒng)硬件圖,采用C語言進行編程,編程后利用KEIL C51來進行編譯,再生成的HEX文件裝入芯片中,采用proteus軟件來仿真,檢驗功能得以正常實現(xiàn)。關(guān)鍵詞:單片機;音樂盒;電路;播放01 設(shè)計目的單片機原理及應(yīng)用是高校
3、工程專業(yè)的一門專業(yè)基礎(chǔ)課,該門課程具有很強的實踐性。通過課程的學(xué)習(xí),使學(xué)生掌握基本概念、基本理論和基本技能。通過本次設(shè)計使同學(xué)們掌握對單片機的控制,實現(xiàn)自己編程,完成專業(yè)要求。2 設(shè)計要求1、利用I/O口產(chǎn)生一定頻率的方波,驅(qū)動蜂鳴器,發(fā)出不同的音調(diào),從而演奏樂曲(最少儲存三首樂曲,每首不少于30秒)2、采用LCD顯示信息3、開機時有英文歡迎提示字符,播放時顯示歌曲序號(或名稱)4、可通過功能鍵選擇樂曲,暫停,播放 5、顯示樂曲播放時間或剩余時間3 設(shè)計內(nèi)容3.1設(shè)計原理 設(shè)計原理:通過按鍵給單片機的P2口輸入低電平,進而利用程序來判斷是否執(zhí)行某一播放功能。而利用單片機的定時器0中斷來控制播放
4、樂曲。3.2 方案設(shè)計本實驗采用AT80S51單片機的I/O口產(chǎn)生一定頻率的方波,配合鍵盤系統(tǒng),時鐘電路,復(fù)位電路以及液晶顯示電路,驅(qū)動蜂鳴器,發(fā)出不同的音調(diào),從而演奏樂曲。共有4樂曲,每首樂曲都由相應(yīng)的按鍵控制,并且有開關(guān)鍵、暫停鍵、上一曲以及下一曲控制鍵。系統(tǒng)總體結(jié)構(gòu)框圖電源電路晶振電路鍵盤電路復(fù)位電路蜂鳴器LCD液晶 AT80C51單片機3.3 電路各模塊說明3.3.1時鐘電路此系統(tǒng)的時鐘電路設(shè)計是采用內(nèi)部方式,即是利用芯片內(nèi)部的振蕩電路。利用12MHZ的晶振做外部時鐘;AT80C51中有一個用于構(gòu)成內(nèi)部振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。
5、這個放大器與作為反饋元件的片外石英晶體(陶瓷)諧振器一起構(gòu)成自然振蕩器。外接石英晶體及電容C1、C2接在放大器的反饋回路中構(gòu)成并聯(lián)振蕩電路。對外接電容C1,C2雖然沒有什么嚴(yán)格的要求,但電容容量的大小會輕微影響振蕩頻率的高低、振蕩器工作的穩(wěn)定性、起振的難易程序及溫度穩(wěn)定性。如果使用石英晶體,我們推薦電容使用30PF10PF(而如果使用陶瓷振蕩器建議選擇40PF10PF)。其電路圖如圖3-3-1所示圖3-3-13.3.2 復(fù)位電路51單片機的RST引腳是復(fù)位信號的輸入端,復(fù)位信號是高電平有效,其有效時間應(yīng)持續(xù)24個振蕩脈沖周期(即二個機器周期)以上。一般有兩種復(fù)位方式:上電復(fù)位和手動復(fù)位。復(fù)位電
6、路圖如圖3-3-2所示。圖3-3-23.3.2 控制電路鍵盤接口電路如圖,本次設(shè)計中,按鍵有7個.鍵分別接于7根I/O線(P1口),各按鍵在實物連接上相互獨立,彼此的工作狀態(tài)互不影響,STC單片機自帶上拉電阻因此無需外接上拉電阻,用查詢法完成按鍵功能。其電路圖如圖3-3-2所示:圖3-3-23.3.3蜂鳴器電路:利用PNP管放大驅(qū)動?;鶚O接10K歐姆的電阻,發(fā)射極接蜂鳴器,集電極接電源。其電路圖如圖3-3-3所示:圖3-3-33.4 器件選擇3.4.1 80C51單片機簡介該系列單片機是采用高性能的靜態(tài)80C51 設(shè)計 由先進CMOS 工藝制造并帶有非易失性Flash 程序存儲器 全部支持12
7、 時鐘和6 時鐘操作 P89C51X2 和P89C52X2/54X2/58X2 分別包含128 字節(jié)和256 字節(jié)RAM 32 條I/O 口線 3 個16 位定時/計數(shù)器 6 輸入4 優(yōu)先級嵌套中斷結(jié)構(gòu) 1 個串行I/O 口 可用于多機通信 I/O 擴展或全雙工UART以及片內(nèi)振蕩器和時鐘電路。外形及引腳排列如圖3-4-1所示. 圖3-4-13.4.2 鍵盤 鍵盤在單片機應(yīng)用系統(tǒng)中能實現(xiàn)向單片機輸入數(shù)據(jù),傳送命令等功能,是人工干預(yù)單片機的主要手段。(1)鍵盤輸入的特點鍵盤實質(zhì)上是一級按鍵開關(guān)的集合。通常,鍵盤開關(guān)利用了機械觸點的合、斷作用。(2)按鍵的確認(rèn)鍵的閉合與否,反映在行線輸出電壓上就呈
8、現(xiàn)高電平或低電平,如果高電平表示鍵斷開,低電平則表示鍵閉合,通過對行線電平高低狀態(tài)的檢測,便可確認(rèn)按鍵按下與否。為了確保CPU對一次按鍵動作只確認(rèn)一次按鍵有效,必須消除抖動的影響。(3)如何消除按鍵的抖動采用軟件來消除按鍵抖動的基本思想是:在一次檢測到有鍵按下時,該鍵所對應(yīng)的行線為低電平,執(zhí)行一段延時10MS的子程序后,確認(rèn)該行線電平是不否仍為低電平,如果仍為低電平,則確認(rèn)為該行確實有鍵按下。當(dāng)按鍵松開時,行線的低電平變?yōu)楦唠娖?,?zhí)行一段延時10MS的子程序后,檢測該行線為高電平,說明按鍵確實已經(jīng)松開。3.4.3 LCD液晶顯示1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數(shù)字
9、、符號等的點陣型液晶模塊。它由若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因為如此所以它不能很好地顯示圖形。1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個字符液晶模塊(顯示字符和數(shù)字)。3.5系統(tǒng)設(shè)計其系統(tǒng)原理圖如附錄一所示。3.6軟件設(shè)計程序設(shè)計流程圖如圖3-6所示. 先從主程序開始,接著初始化變量及 LCD 接口,然后初始化方波發(fā)生器、晶振管,使 LCD 顯示信息,就進入了開機狀態(tài),等待動作選擇按鍵,包括播放鍵,暫停鍵,停止鍵,當(dāng)然也可以選擇返回;加入選擇的是播放
10、鍵,LCD 上就會 -7-現(xiàn)實歌曲編號,與此同時演奏相應(yīng)的樂曲,此時,你可以按上一曲或下一曲鍵,使其演奏上一個或者先一個樂曲。主程序流程圖 LCD顯示流程圖其程序代碼如附錄二所示。3.7 仿真調(diào)試及操作說明按照上面設(shè)計的電路在protel軟件內(nèi)畫圖, 打開單片機軟件開發(fā)系統(tǒng)Keil,選擇80c51單片機,在其中編寫程序,運行生成一個后綴名為hex的文件,然后將該文件下載到protel中的AT80c51單片機中進行仿真,觀察實驗現(xiàn)象。仿真能實現(xiàn)播放音樂,按鍵選擇曲目,暫停,播放功能。仿真成功后,安裝好實驗板,然后將音樂程序下載到電路板內(nèi) ,觀察結(jié)果。能實現(xiàn)播放音樂,按鍵換曲等功能。總結(jié)與致謝一個
11、星期的摸索與實驗,雖然時間很短,但使我們不僅僅是對于單片機入門軟件與硬件的常用設(shè)計與功能,還使我們對于一項設(shè)計研究的制作過程所需要的詳細(xì)步驟和具體的實現(xiàn)方法的力度的掌握。當(dāng)然在這次寶貴的設(shè)計活動中,經(jīng)驗才是對于我們最大的收獲,而且還增強了自身對未知問題以及對知識的深化認(rèn)識的能力,用受益匪淺這個詞語來概括這次難忘的活動我覺得再合適不過了。但是,光是完成了作品還是不可以自我滿足的,在從一開始的時候就懷著將作品制作得更加人性化,更加令人滿意,更加地使功能完美又方便地被應(yīng)用領(lǐng)域這個最終目的下,隨著對單片機這門學(xué)科的認(rèn)識加深,到達了拓展的程度,我想這個目的將在不遠(yuǎn)的時期內(nèi)被實現(xiàn)??傊@次設(shè)計從軟件編寫
12、、調(diào)試到軟硬件聯(lián)機調(diào)試,我們傾注了大量的時間和心血。真是曾經(jīng)為程序的編寫而冥思苦想過,曾經(jīng)為無法找出錯誤而郁悶苦惱過,也曾經(jīng)為某一功能不能實現(xiàn)而猶豫彷徨過,但最終我們完成設(shè)計了。至此完成課程設(shè)計,首先要感謝不畏辛辭的老師,通過老師的指導(dǎo),使我增漲了單片機的知識。其次,還要感謝我的同學(xué),在這次課程設(shè)計中,遇到了許多的困難,是通過詢問他們才解決的。 參考文獻1 徐崢穎編著.Protel99SE EDA 技術(shù)及應(yīng)用M.北京機械工業(yè)出版社2005.2 三恒星科技.MCS-51單片機原理與應(yīng)用實例M. 北京:電子工業(yè)出版社,2008.013 王為青,程國鋼.單片機Keil Cx51應(yīng)用開發(fā)技術(shù)M. 北京
13、:人民郵電出版社,2007.024 邊春遠(yuǎn)編著.MCS-51單片機應(yīng)用開發(fā)實用子程序M.北京人民郵電出版社2005.5 黃智偉凌陽單片機課程設(shè)計指導(dǎo)M,北京:北京航空航天大學(xué)出版社,2006.11. 6 李廣弟,朱月秀,王秀山.單片機基礎(chǔ)M,北京:北京航空航天大學(xué)出版社,2001.7. 7 康華光模擬電子技術(shù)基礎(chǔ)第四版)M, 武漢:華中理工大學(xué)出版社,1999.附錄附錄一:基于單片機的數(shù)字音樂盒總電路圖附錄二:音樂程序#include #define uchar unsigned char#define uint unsigned intsbit BEEP = P14; /蜂鳴器sbit k0
14、=P20;sbit k1=P21;sbit k2=P22;sbit k3=P23;sbit k4=P24;sbit k5=P25;sbit k6=P26;uint code Tone_Delay_Table = 64021,64103,64260,64400,64524,64580,64684,64777, 64820,64898,64968,65030,65058,65110,65157,65178 ;uchar code Song1_Tone=1, 1, 5, 5, 6, 6, 5,4, 4, 3 ,3, 2, 2, 1,5, 5, 4, 4, 3, 3, 2, 5, 5, 4, 4, 3
15、, 3, 2,1,1, 5, 5, 6, 6 ,5,4 ,4, 3, 3, 2, 2, 1,0xff;uchar code Song1_Time=2,2,2,2,2,3,4,2,2,2,2,2,2,4,2,2,2,2,2,2,4,2,2,2,2,2,2,5,2,2,2,2,2,2,5,2,2,2,2,2,2,5,0xff;uchar code Song2_Tone=1,2,3,1,1,2,3,1,3,4,5,3,4,5, 5,6,5,4,3,1, 5,6,5,4,3,1 ,1,5,1,0xff;uchar code Song2_Time=2,2,3,2,2,2,3,2,2,2,2,2,2,2,
16、2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,0xff; uchar code Song3_Tone = 1,3,3,3,3,5,4,2,5,3,7,6,5,5,7,4,4,3,6,7,2,1,0xFF; uchar code Song3_Time = 2,1,1,2,1,1,1,2,1,1,3,2,1,1,2,4,1,1,2,1,1,1,0xFF; uchar code Song4_Tone = 8,9,2,3,7,6,2,3,10,11,1,2,3,1,2,3,3,4,5,6,5,3,5,6,5,3,5,3,2,1,1,2,3,0xFF; uchar code Son
17、g4_Time = 3,6,7,2,4,5,8,1,2,2,5,5,1,9,1,1,1,1,6,1,1,2,4,1,1,2,1,1,1,1,1,2,2,1,0xFF;uchar Song_Index = 0, Tone_Index = 0; /音樂片段索引,音符索引uchar *Song_Tone_Pointer, *Song_Time_Pointer; /音符指針,延時指針uchar i = 0; uchar j=0,k=0,m=0; /從當(dāng)前數(shù)組中取音符的位置 void DelayMS(uint ms) /延時 uchar t; while(ms-) for (t = 0; t 120;
18、t+); void play0() /按鍵產(chǎn)生的INT0 ET0=1; TR0 = 0;k0=1; Song_Index = ( Song_Index + 1) % 4; /切換到下一音樂 switch (Song_Index) case 0: Song_Tone_Pointer = Song1_Tone; Song_Time_Pointer = Song1_Time; break; case 1: Song_Tone_Pointer = Song2_Tone; Song_Time_Pointer = Song2_Time; break; case 2: Song_Tone_Pointer =
19、 Song3_Tone; Song_Time_Pointer = Song3_Time; break;case 3: Song_Tone_Pointer = Song4_Tone; Song_Time_Pointer = Song4_Time; break; /從下一段音樂的第0個音符開始 i = 0; while (k0=1&k1=1&k2=1&k3=1&k4=1&k5=1&k6=1) Tone_Index = Song_Tone_Pointeri; if ( Tone_Index = 0xFF ) i = 0; DelayMS(2000); /每段音樂播放結(jié)束后停頓一段時間 continu
20、e; /繼續(xù)播放 TR0 = 1; DelayMS( Song_Time_Pointer Tone_Index * 240); TR0 = 0; i+; return; void play1() ET0=1; TR0 = 0;k1=1; Song_Index = ( Song_Index + 3) % 4; /切換到上一段音樂 switch (Song_Index) case 0: Song_Tone_Pointer = Song1_Tone; Song_Time_Pointer = Song1_Time; break; case 1: Song_Tone_Pointer = Song2_To
21、ne; Song_Time_Pointer = Song2_Time; break; case 2: Song_Tone_Pointer = Song3_Tone; Song_Time_Pointer = Song3_Time; break;case 3: Song_Tone_Pointer = Song4_Tone; Song_Time_Pointer = Song4_Time; break; i = 0; /從上一段音樂的第0個音符開始 while (k0=1&k1=1&k2=1&k3=1&k4=1&k5=1&k6=1) Tone_Index = Song_Tone_Pointeri; i
22、f ( Tone_Index = 0xFF ) i = 0; DelayMS(2000); /每段音樂播放結(jié)束后停頓一段時間 continue; /繼續(xù)播放 TR0 = 1; DelayMS( Song_Time_Pointer Tone_Index * 240); TR0 = 0; i+; return; void play2() m=!m; TR0 = 0;k2=1;if(m=0) j=1; TR0=0;ET0=0; if(m=1) ET0=1; k=1;if(j=1) /播放被暫停的音樂 switch (Song_Index) case 0: Song_Tone_Pointer = So
23、ng1_Tone; Song_Time_Pointer = Song1_Time; break; case 1: Song_Tone_Pointer = Song2_Tone; Song_Time_Pointer = Song2_Time; break; case 2: Song_Tone_Pointer = Song3_Tone; Song_Time_Pointer = Song3_Time; break;case 3: Song_Tone_Pointer = Song4_Tone; Song_Time_Pointer = Song4_Time; break; /從本一段音樂的第i個音符開始
24、 while (k0=1&k1=1&k2=1&k3=1&k4=1&k5=1&k6=1) Tone_Index = Song_Tone_Pointeri; if ( Tone_Index = 0xFF ) i = 0; DelayMS(2000); /每段音樂播放結(jié)束后停頓一段時間 Song_Index = ( Song_Index + 1) % 4; /播放下一首音樂 switch (Song_Index) case 0: Song_Tone_Pointer = Song1_Tone; Song_Time_Pointer = Song1_Time; break; case 1: Song_To
25、ne_Pointer = Song2_Tone; Song_Time_Pointer = Song2_Time; break; case 2: Song_Tone_Pointer = Song3_Tone; Song_Time_Pointer = Song3_Time; break;case 3: Song_Tone_Pointer = Song4_Tone; Song_Time_Pointer = Song4_Time; break;continue; TR0 = 1; DelayMS( Song_Time_Pointer Tone_Index * 240); TR0 = 0; i+; if
26、 (j=0)j=1; Song_Tone_Pointer = Song1_Tone; /開始播放音樂 Song_Time_Pointer = Song1_Time; i = 0; while (k0=1&k1=1&k2=1&k3=1&k4=1&k5=1&k6=1) Tone_Index = Song_Tone_Pointeri; if ( Tone_Index = 0xFF ) i = 0; DelayMS(2000); /每段音樂播放結(jié)束后停頓一段時間 Song_Index = ( Song_Index + 1) % 4; /播放下一段音樂 switch (Song_Index) case
27、0: Song_Tone_Pointer = Song1_Tone; Song_Time_Pointer = Song1_Time; break; case 1: Song_Tone_Pointer = Song2_Tone; Song_Time_Pointer = Song2_Time; break; case 2: Song_Tone_Pointer = Song3_Tone; Song_Time_Pointer = Song3_Time; break;case 3: Song_Tone_Pointer = Song4_Tone; Song_Time_Pointer = Song4_Tim
28、e; break; continue; TR0 = 1; DelayMS( Song_Time_Pointer Tone_Index * 240); TR0 = 0; i+; return; void play3() ET0=1; TR0 = 0; k3=1;/切換到第一段音樂 Song_Tone_Pointer = Song1_Tone; Song_Time_Pointer = Song1_Time; Song_Index=0; /從第一段音樂的第0個音符開始 i = 0; while (k0=1&k1=1&k2=1&k3=1&k4=1&k5=1&k6=1) Tone_Index = Son
29、g_Tone_Pointeri; if ( Tone_Index = 0xFF ) i = 0; DelayMS(2000); /每段音樂播放結(jié)束后停頓一段時間 continue; /繼續(xù)播放 TR0 = 1; DelayMS( Song_Time_Pointer Tone_Index * 240); TR0 = 0; i+; return; void play4() ET0=1; TR0 = 0;k4=1;Song_Tone_Pointer = Song2_Tone;/切換到第二段音樂 Song_Time_Pointer = Song2_Time; Song_Index=1 ; i=0; /
30、從第二段音樂的第0個音符開始 while (k0=1&k1=1&k2=1&k3=1&k4=1&k5=1&k6=1) Tone_Index = Song_Tone_Pointeri; if ( Tone_Index = 0xFF ) i = 0; DelayMS(2000); /每段音樂播放結(jié)束后停頓一段時間 continue; /繼續(xù)播放 TR0 = 1; DelayMS( Song_Time_Pointer Tone_Index * 240); TR0 = 0; i+; return; void play5() ET0=1; TR0 = 0;k5=1;Song_Tone_Pointer = Song3_Tone; /切換到第三段音樂 Song_Time_Pointer = Song3_Time; Song_Index=2; /從第三段音樂的第0個音符開始 i = 0; while (k0=1&k1=1&k2=1&k3=1&k4=1&k5=1&k6=1) Tone_Index = Song_Tone_Pointeri; if ( T
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度無人機航空拍攝服務(wù)合同3篇
- 2024版農(nóng)業(yè)蔬菜大棚承包合同
- 2025年度體育健身充值卡銷售與合作推廣合同4篇
- 2025年度水電工程招投標(biāo)代理服務(wù)承包合同集錦4篇
- 2025年度新型建筑材料代售合同協(xié)議范本4篇
- 2025年度商業(yè)地產(chǎn)資產(chǎn)保值增值顧問服務(wù)合同4篇
- 2025年度新能源企業(yè)代理記賬與綠色金融合作合同4篇
- 2025年度智能窗簾系統(tǒng)承包安裝與維護合同范本4篇
- 2025年度個人助學(xué)貸款合同及還款計劃書4篇
- 2025年江蘇領(lǐng)航人才開發(fā)有限公司招聘筆試參考題庫含答案解析
- 金蓉顆粒-臨床用藥解讀
- 社區(qū)健康服務(wù)與管理教案
- 2023-2024年家政服務(wù)員職業(yè)技能培訓(xùn)考試題庫(含答案)
- 2023年(中級)電工職業(yè)技能鑒定考試題庫(必刷500題)
- 藏歷新年文化活動的工作方案
- 果酒釀造完整
- 第4章-理想氣體的熱力過程
- 生涯發(fā)展展示
- 法治副校長專題培訓(xùn)課件
- 手術(shù)室應(yīng)對突發(fā)事件、批量傷員應(yīng)急預(yù)案及處理流程
- 動機-行為背后的原因課件
評論
0/150
提交評論