版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 單片機課程設計</b></p><p> 項目名稱 紅外遙控音樂播放器設計 </p><p> 專業(yè)班級 通信091班 </p><p> 學生姓名 <
2、;/p><p> 指導教師 </p><p> 2012年 12 月 21 日</p><p><b> 摘 要</b></p><p> 隨著計算機技術的發(fā)展, 單片機的應用范圍也不斷擴大,目前單片機滲透到工作和生活的各個領域。在以
3、單片機為核心的控制系統(tǒng)中,紅外遙控成為目前使用比較廣泛的一種無線通信和遙控手段。本課程設計提出一種基于單片機的紅外遙控音樂播放器的設計方法。主要采用單片機為控制核心,以紅外信號為通信手段,通信蜂鳴器發(fā)聲,來完成音樂播放器的功能。本設計具有無線、非接觸控制,抗干擾能力強,信息傳輸可靠,功耗低,成本低,易實現(xiàn)等顯著優(yōu)點及特色。通過本設計可以完成簡單的音樂播放器的功能,包括播放及更換歌曲等內容。通過本次課程設計,我對單片機中斷系統(tǒng)等知識有了進
4、一步的了解,對單片機的相關知識做到理論聯(lián)系實際。</p><p> 關鍵詞:單片機;紅外遙控;中斷系統(tǒng); </p><p><b> Abstract</b></p><p> With the development of computer technology, the application range of the microco
5、ntroller expanding microcontroller penetrated into various fields of work and life. Microcontroller as the core of the control system, infrared remote control to use a wireless communication and remote control means. Thi
6、s course is designed infrared remote control music player based microcontroller design method. Mainly using SCM as the control center, the infrared signal as a means of communication, communication b</p><p>
7、 Keywords: Microcontroller Unit;Infrared Remote Control;Interrupt System; </p><p><b> 目 錄</b></p><p><b> 摘 要I</b></p><p> AbstractII</p><p
8、><b> 第1章 緒論1</b></p><p><b> 1.1 概述1</b></p><p> 1.2 主要功能1</p><p> 第2章 電路設計2</p><p> 2.1 整體電路設計2</p><p> 2.2 電路模
9、塊設計3</p><p> 2.2.1 單片機最小系統(tǒng)電路3</p><p> 2.2.2 紅外解碼電路4</p><p> 2.2.3 顯示及播放電路5</p><p> 第3章 程序設計8</p><p> 3.1 紅外解碼程序8</p><p> 3.2
10、 播放及顯示程序12</p><p> 第4章 硬件調試17</p><p><b> 結論19</b></p><p><b> 參考文獻20</b></p><p> 附錄1 整體電路圖及實物圖21</p><p> 附錄2 電路元件22<
11、;/p><p> 附錄3 程序源碼23</p><p><b> 致謝32</b></p><p><b> 第1章 緒論</b></p><p><b> 1.1 概述</b></p><p> 利用單片機演奏音樂是單片機愛好者的興趣之
12、一,應用的范圍也比較廣泛。所謂音樂播放器,由單片機進行信息處理,再經過信號放大,由蜂鳴器發(fā)出樂曲聲。我們知道,振動產生聲音,振動頻率不同所發(fā)出的聲音也就不同。有規(guī)律的振動發(fā)出的聲音叫“樂音”。音樂由音頻和節(jié)拍構成,音頻即發(fā)聲的頻率;節(jié)拍即延時的長短。因此利用單片機的定時器,產生一定頻率的方波,即可以產生一定頻率的聲音。再利用單片機軟件延時的方法來產生不同的節(jié)拍。把音頻和節(jié)拍結合起來,進行合理的排列,即可播放出比較悅耳的音樂。本文比較詳細
13、地介紹了音樂播放器的工作原理、設計思路、硬件的選擇及相關作用、軟件的實現(xiàn)方法以及詳細的程序清單。</p><p> 控制單片機播放音樂的方式有很多,多數(shù)使用者利用單片機存儲音樂與控制播放。本設計利用AT89S52單片機及少數(shù)外圍電路控制音樂播放,產生兩首不同的歌曲。 對于單片機產生音樂,關鍵是控制頻率的輸出。本設計采用了定時器T0中斷的方法產生不同頻率的脈沖,從而產生不同頻率的聲音。此外,使用紅外一體化頭SM0
14、038接收紅外信號,通過外部中斷INT1來進行對紅外信號的解碼,由單片機內部程序對不同的鍵值完成不同的操作。并且使用常用的無源蜂鳴器進行發(fā)聲,實現(xiàn)了一個簡單的遙控音樂播放器的功能。</p><p><b> 1.2 主要功能</b></p><p> 本設計以單片機為核心實現(xiàn)紅外遙控音樂播放器功能,主要完成功能為兩首歌曲的選擇播放、暫停、暫停后斷點播放、結束播放
15、歌曲,播放下一曲,播放上一曲等功能。同時,使用數(shù)碼管顯示紅外信號解碼后的鍵值。其中為了方便,將32位的二進制紅外信號編碼解碼為8位16進制編碼。其中,本設計只顯示紅外信號解碼后8位16進制編碼中的兩位數(shù)據碼,其它的用戶編碼與數(shù)據碼的反碼共6位不予顯示。本設計中使用常見的家用紅外遙控器進行控制,使用其中的1、2兩個數(shù)字鍵(對應功能選擇1、2兩首歌曲),音量加、減兩個按鍵(對應功能上一曲、下一曲),頻道加、減兩個按鍵(對應功能暫停、結束播放
16、),以及確定鍵(對應功能播放歌曲)。</p><p><b> 第2章 電路設計</b></p><p> 2.1 整體電路設計</p><p> 根據設計要求,紅外遙控音樂播放器可以分為三個模塊進行設計:</p><p> 1.單片機最小系統(tǒng)電路:單片機最小系統(tǒng),或者稱為最小應用系統(tǒng),是指用最少的元件組成的
17、單片機可以工作的最小的系統(tǒng)單元。</p><p> 對51系列單片機來說,最小系統(tǒng)一般應該包括:單片機、時鐘電路、復位電路。本設計中使用的單片機為AT89S52,晶振電路使用12MHZ的晶振。復位電路:由電容串聯(lián)電阻構成,當系統(tǒng)一上電,RST腳將會出現(xiàn)高電平,當RST腳的高電平持續(xù)兩個機器周期以上就將復位。</p><p> 2.紅外解碼電路:本電路主要用于對紅外遙控器發(fā)出的紅外信號進
18、行解碼,然后程序根據解碼后的不同鍵值相應完成不同的功能。</p><p> 3.顯示及播放電路:本部分電路用于顯示紅外遙控器不同按鍵所對應的不同按鍵值,實物中用兩位16進制數(shù)在數(shù)碼管上進行顯示。播放電路主要用蜂鳴器來播放不同的音樂曲目。</p><p> 分析各模塊電路的功能,畫出原理框圖如圖2-1所示:</p><p> 圖2-1 紅外遙控音樂播放器原理框圖
19、</p><p> 2.2 電路模塊設計</p><p> 2.2.1 單片機最小系統(tǒng)電路</p><p> 單片機最小系統(tǒng)電路如圖2-2所示:</p><p> 圖2-2 單片機最小系統(tǒng)電路圖</p><p> 由圖2-2可以知道,單片機最小系統(tǒng)主要由復位電路、時鐘電路等組成。</p>&
20、lt;p> 1.復位電路:由電容串聯(lián)電阻構成,并結合"電容電壓不能突變"的性質,可以知道,當系統(tǒng)一上電,RST腳將會出現(xiàn)高電平,并且,這個高電平持續(xù)的時間由電路的RC值來決定。</p><p> 典型的51單片機當RST腳的高電平持續(xù)兩個機器周期以上就將復位,所以,適當組合RC的取值就可以保證可靠的復位。一般教科書推薦C 取10uF,R取8.2K左右。當然也有其他取法的,原則就是要讓
21、RC組合可以在RST腳上產生不少于2個機周期的高電平。單片機復位電路就好比電腦的重啟部分,當電腦在使用中出現(xiàn)死機,按下重啟按鈕電腦內部的程序從頭開始執(zhí)行。單片機也一樣,當單片機系統(tǒng)在運行中,受到環(huán)境干擾出現(xiàn)程序跑飛的時候,按下復位按鈕內部的程序自動從頭開始執(zhí)行。</p><p> 2.時鐘電路:單片機內部有一個高增益反相放大器,引腳XTAL1 和XTAL2 分別是該放大器的輸入端和輸出端,如果引腳XTAL1 和
22、XTAL2 兩端跨接上晶體振蕩器(晶振)或陶瓷振蕩器就構成了穩(wěn)定的自激振蕩電路,該振蕩電路的輸出可直接送入內部時序電</p><p><b> 路。</b></p><p> 單片機的時鐘可由兩種方式產生,即內部時鐘方式和外部時鐘方式。</p><p> (1)內部時鐘方式。內部時鐘方式即是由單片機內部的高增益反相放大器和外部跨接的晶振、
23、微調電容構成時鐘電路產生時鐘的方法。外接晶振(陶瓷振蕩器)時,C1、C2 的值通常選擇為30Pf左右;C1、C2 對頻率有微調作用,晶振或陶瓷諧振器的頻率范圍可在1.2MHz ~12MHz之間選擇。為了減小寄生電容,更好地保證振蕩器穩(wěn)定、可靠地工作,振蕩器和電容應盡可能安裝得與單片機引腳XTALl 和XTAL2 靠近。由于內部時鐘方式外部電路接線簡單,單片機應用系統(tǒng)中大多采用這種方式。內部時鐘方式產生的時鐘信號的頻率就是晶振的固有頻率,
24、常用fsoc 來表示。</p><p> (2)外部時鐘方式。外部時鐘方式即完全用單片機外部電路產生時鐘的方法,外部電路產生的時鐘信號被直接接到單片機的XTAL1引入,此時XTAL2 開路。</p><p> 3.內外程序存儲器選擇控制端EA/Vpp,決定了單片機訪問內部或外部的程序存儲器。EA高電平時,訪問內部程序存儲器,但當程序計數(shù)器(PC)值超過0FFFFH時,單片機自動轉向外部
25、程序存儲器。當EA低電平時,不管單片機有無內部存儲器,只訪問外部存儲器[1]。</p><p> 2.2.2 紅外解碼電路</p><p> 紅外解碼電路如圖2-3所示:</p><p> 圖2-3 紅外解碼電路圖</p><p> 由圖2-3知道,紅外解碼電路中主要元件為紅外一體化接收頭SM0038。</p><
26、;p> 一體化紅外接收頭SM0038是集信號放大、濾波、檢波、整形于一體的紅外接收器,電路內置PIN二極管和前置放大器,采用可以紅外濾波的環(huán)氧樹脂材料封裝,可靠性高,不易受環(huán)境影響并可以防止非控制信號的輸出脈沖出現(xiàn)。</p><p> 內部結構如圖2-4所示:</p><p> 圖2-4 SM0038內部結構圖</p><p> SM0038內置帶通濾
27、波器、積分器、和自動增益控制電路以抑制各種干擾和噪音。數(shù)據信號和干擾信號的主要區(qū)別在于載波頻率、脈沖波長和工作周期上。所以數(shù)據信號應該滿足載波信號的頻率盡量接近帶通濾波器的中心頻率(38KHZ);脈沖長度在300us以上;數(shù)據的編碼類型相兼容。而本系統(tǒng)選用的SM0038在這三方面和NEC編碼格式是相配的</p><p> 2.2.3 顯示及播放電路</p><p> 顯示及播放電路如
28、圖2-5所示:</p><p> 圖2-5 顯示及播放電路圖</p><p> 1.74HC573:八進制3態(tài)非反轉透明鎖存器。</p><p> 其真值表如表2-1所示:</p><p> 表2-1 74HC573真值表</p><p> 由真值表可知:當=0、LE=1時,輸出端數(shù)據等于輸入端數(shù)據;當=0、
29、LE=0時,輸出端保持不變;當=1時,無論LE、D為何,輸出端為高阻態(tài)。</p><p> 74HC573與74HC138在電路中主要用于由數(shù)碼管組成的顯示電路。在數(shù)碼管顯示時,如果要維持一個數(shù)據的顯示,往往要持續(xù)的快速的刷新。尤其是在四段八位數(shù)碼管等這些要選通的顯示設備上。在人類能夠接受的刷新頻率之內,大概每三十毫秒就要刷新一次。這就大大占用了處理器的處理時間,消耗了處理器的處理能力,還浪費了處理器的功耗。&
30、lt;/p><p> 鎖存器的使用可以大大的緩解處理器在這方面的壓力。當處理器把數(shù)據傳輸?shù)芥i存器并將其鎖存后,鎖存器的輸出引腳便會一直保持數(shù)據狀態(tài)直到下一次鎖存新的數(shù)據為止。這樣在數(shù)碼管的顯示內容不變之前,處理器的處理時間和I/O引腳便可以釋放。可以看出,處理器處理的時間僅限于顯示內容發(fā)生變化的時候,這在整個顯示時間上只是非常少的一個部分。而處理器在處理完后可以有更多的時間來執(zhí)行其他的任務。這就是鎖存器數(shù)碼管顯示方
31、面的作用:節(jié)省了寶貴的MCU時間。</p><p> 鎖存器就是把當前的狀態(tài)鎖存起來,使CPU送出的數(shù)據在接口電路的輸出端保持一段時間鎖存后狀態(tài)不再發(fā)生變化,直到解除鎖定。還有一些芯片具有鎖存器,比如芯片74LS244 (3態(tài)8位緩沖器)就具有鎖存器的功能,它可以通過把一個引腳置高電平后,輸出就會保持現(xiàn)有的狀態(tài),直到把該引腳清0后才能繼續(xù)變化。 </p><p> 緩沖寄存器
32、又稱緩沖器,它分輸入緩沖器和輸出緩沖器兩種。前者的作用是將外設送來的數(shù)據暫時存放,以便處理器將它取走;后者的作用是用來暫時存放處理器送往外設的數(shù)據。有了數(shù)控緩沖器,就可以使高速工作的CPU與慢速工作的外設起協(xié)調和緩沖作用,實現(xiàn)數(shù)據傳送的同步。由于緩沖器接在數(shù)據總線上,故必須具有三態(tài)輸出功能。</p><p> 2.74HC138:三通道輸入、八通道輸出譯碼器。</p><p> 其真值
33、表如表2-2所示:</p><p> 表2-2 74HC138真值表</p><p> 74HC138譯碼器可接受3位二進制加權地址輸入(A0, A1和A2),并當使能時,提供8個互斥的低有效輸出(Y0至Y7)。74HC138特有3個使能輸入端:兩個低電平有效(E1和E2)和一個高電平有效(E3)。除非E1和E2置低且E3置高,否則74HC138將保持所有輸出為高。利用這種復合使能特性
34、,74HC138充當一個8輸出多路分配器,本設計中用于進行數(shù)碼管的位選。</p><p> 3.ULN2003:高壓大電流達林頓晶體管陣列,由七個硅NPN復合晶體管組成。電路特點: ULN2003的每一對達林頓都串聯(lián)一個2.7K的基極電阻,在5V的工作電壓下它能與TTL和CMOS電路 直接相連,可以直接處理原先需要標準邏輯緩沖器來處理的數(shù)據。具有電流增益高、工作電壓高、溫度范圍寬、帶負載能力強等特點,適應于各類
35、要求高速大功率驅動的系統(tǒng)。本設計中用于無源蜂鳴器的驅動,同時可以為再次擴展時提供驅動電路。</p><p><b> 第3章 程序設計</b></p><p> 分析紅外遙控音樂播放的功能,包括選擇播放兩首歌曲、暫停、暫停后斷點播放、結束播放歌曲,播放下一曲,播放上一曲,并且使用數(shù)碼管顯示紅外信號解碼后的兩位16進制的數(shù)據碼。根據以上功能,可心得出結論:該程序設
36、計的主要工作,即核心問題是紅外信號的解碼。因為,無論是播放音樂的哪一個操作,還是顯示紅外信號的數(shù)據碼,都是建立在對紅外信號的正確解碼下的。首先進行正確的紅外解碼,然后根據解碼后的鍵值進行播放歌曲與顯示按鍵值。按照以上得出的結論,畫出程序流程圖如圖3-1所示:</p><p> 圖3-1 程序流程圖</p><p> 結合程序流程圖,可以知道:將整個程序的設計分為兩個模塊,即:紅外解碼、
37、播放及顯示。</p><p> 3.1 紅外解碼程序</p><p> 在進行程序設計之前,先分析一下紅外信號的波形。每當次按鍵按下,紅外發(fā)射器會發(fā)出一串脈沖,紅外接收器會收到這一串脈沖寬度不等的脈沖波形流,其脈沖流包括:(1)前導碼:第1個脈沖波形;(2)用戶碼1:第2到第9個脈沖波形;(3)用戶碼2:第10到第17個脈沖波形;(4)數(shù)據碼:第18到第25個脈沖波形;(5)數(shù)據反碼
38、:第26到第33個脈沖波形;(6) 連續(xù)按鍵脈沖:第34和第35個脈沖為結束脈沖,在每次按鍵結束后會有兩個結束脈沖,如果一直按鍵不放的話,會一直發(fā)送連續(xù)按鍵脈沖,并可以認為在收到10個連續(xù)按鍵脈沖后是下一個按鍵(本次設計中不考慮連續(xù)按鍵脈沖)。其碼型結構如圖3-2所示:</p><p> 圖3-2 紅外信號碼型圖</p><p> 由圖3-2可知:紅外信號碼型中本次設計中要使用的部分,
39、即是圖3-2中的8位鍵數(shù)據碼。下面分析具體的怎樣進行紅外信號的解碼。</p><p> 紅外信號為采用脈寬調制的串行碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進制的“1”,其波形如圖3-3所示。</p><p> 圖3-3 紅外信號脈沖寬度圖</p>
40、<p> 上述“0”和“1”組成的32位二進制碼經38kHz的載頻進行二次調制以提高發(fā)射效率,達到降低電源功耗的目的。然后再通過紅外發(fā)射二極管產生紅外線向空間發(fā)射,即產生了如圖3-2所示的有效碼組序列。在圖3-3中同樣可以看到引導碼脈寬為9ms,間隔4.5ms。在紅外信號經過解碼電路后,原碼型中的高低電平進行反轉。在得到的新碼型中,去掉第一個下降沿(引導碼),第二個下降沿開始即為有效碼序列,應該進行解碼并記錄。在本設計中,
41、將解碼后的信號引入外部中斷1,由于是下降沿有效,故IT1=1[2]。紅外解碼源碼如下:</p><p> unsigned char irtime; //脈沖寬度時間值</p><p> unsigned char startflag;//接收開始標志</p><p> unsigned char bitnum; //碼組位數(shù)</p>&
42、lt;p> unsigned char irreceok; //接收完成標志</p><p> unsigned char irprocok; //解碼完成標志</p><p> unsigned char irdata[33];//脈沖寬度數(shù)組</p><p> unsigned char ircode[4]; //解碼值數(shù)組</p>
43、<p> void timer0init(void) </p><p><b> {</b></p><p> TMOD=0x02; //定時器0 定時方式2 8位自動重裝</p><p> TH0=0x00; //初值為0 實現(xiàn)定時256us</p><p><b
44、> TL0=0x00;</b></p><p> ET0=1; //開定時器0中斷</p><p> EA=1; //開總中斷</p><p> TR0=1; //啟動定時器0</p><p><b> }</b></p><p>
45、 void int1init(void)</p><p><b> {</b></p><p> IT1=1; //外部中斷1負跳變沿有效</p><p> EX1=1; //開外部中斷1中斷</p><p> EA=1; //開總中斷</p><p>
46、<b> }</b></p><p> void irproc(void)//解碼函數(shù) </p><p><b> {</b></p><p> uchar k,value,m,j;</p><p><b> k=1;</b></p><p
47、> for(j=0;j<4;j++)//4組二進制碼</p><p><b> {</b></p><p> for(m=0;m<8;m++)//每組8位</p><p><b> {</b></p><p> value=value>>1;
48、//由于低位在前,所以右移到正常順序</p><p> if(irdata[k]>6)//irtime大于6*256us 則解碼數(shù)據為1</p><p><b> {</b></p><p> value=value | 0x80;//解碼數(shù)據為1 則高位或1 則高位置1</p><p>
49、<b> }</b></p><p> k++;//所有二進制碼的位</p><p><b> }</b></p><p> ircode[j]=value;//每組解碼后的值存入ircode</p><p><b> }</b></p>
50、<p> irprocok=1;//解碼完成</p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p> timer0init();//定時器初始化</p><p
51、> int1init();//外部中斷初始化</p><p><b> while(1)</b></p><p><b> {</b></p><p> if(irreceok) //接收完成</p><p><b> { </b&
52、gt;</p><p> irproc(); //解碼</p><p> irreceok=0;</p><p><b> }</b></p><p> if(irprocok) //解碼完成</p><p><b> {</b></p>
53、<p> irwork(); //把解碼后的數(shù)據轉成16進制的兩位數(shù)</p><p> irprocok=0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>
54、<p> void timer0() interrupt 1</p><p><b> {</b></p><p><b> irtime++;</b></p><p><b> }</b></p><p> void int1() interrupt 2
55、</p><p><b> {</b></p><p> if(startflag==1)</p><p><b> {</b></p><p> if(irtime>32)//檢測9ms引導碼</p><p><b> {</b&g
56、t;</p><p> bitnum=0;</p><p><b> }</b></p><p> irdata[bitnum]=irtime;</p><p><b> irtime=0;</b></p><p><b> bitnum++;<
57、;/b></p><p> if(bitnum==33)//接收結束</p><p><b> {</b></p><p><b> bitnum=0;</b></p><p> irreceok=1;//接收完成</p><p>
58、<b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> startflag=1;//接收開始標志位</p><p
59、><b> irtime=0;</b></p><p><b> }</b></p><p><b> }</b></p><p> 3.2 播放及顯示程序</p><p> 分析音樂播放的過程,其為不同頻率聲音的組合,當一組恰當頻率聲音組合按照一定的先后順序
60、與節(jié)拍播放時,即可產生音樂。故要產生音頻信號,只要算出某一音頻的周期,將此周期除以2即為半周期的時間,利用定時器計時此半周期時間,計時到后取反輸出,重復此過程即得到此頻率的聲音信號。此信號從P2.3腳輸出,用ULN2003驅動蜂鳴器播放音樂。其中每個音符使用兩個字節(jié)表示:低位字節(jié)(偶地址)代表音級,表示的音級為c、﹟c、d、﹟d、e、f、……a3、﹟a3、b3;高位字節(jié)(奇地址)代表音符的時值(節(jié)拍),表示拍數(shù)為1/8拍(0.10s)~
61、8拍(6.40s)。</p><p> 程序設計中用軟件延時程序來控制音級, 與紅外解碼共用定時器0進行節(jié)拍的控制,并在播放和暫停播放中隨時判斷是否有紅外信號的改變,以便隨時更換或結束音樂。本設計中歌曲的音符存在一個數(shù)組中,以在開始位置和在中間位置播放不同的曲目。紅外信號解碼后,用兩位共陰數(shù)碼管顯示其中的數(shù)據碼[3]。顯示電路的74HC573用于數(shù)碼管的驅動,74HC138用于數(shù)碼管動態(tài)掃描時的位選,蜂鳴器播放
62、音樂源碼如下:</p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> sbit FM=P2^3; //定義蜂鳴器引腳</p><p> uchar count;</p><p> uns
63、igned char code song[] ={ //祝你平安</p><p> 0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,</p><p> 0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x
64、20,0x20,0x20,0x1c,0x20,</p><p> 0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,</p><p> 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0
65、x26,0x20,</p><p> 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,</p><p> 0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,</
66、p><p> 0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,</p><p> 0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,</p><p&g
67、t; 0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,</p><p> 0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,</p><p> 0x18,0x20,
68、0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,</p><p> 0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,</p><p> 0x39,0x20,0x26,0x10,0x2b
69、,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,</p><p> 0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,</p><p><b> //八月桂花遍地開</b></p><p> 0x18,0x30,0x1C,0x10,0x
70、20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,</p><p> 0x1C,0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,</p><p> 0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0
71、x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,</p><p> 0x20,0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,</p><p> 0x30,0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,
72、0x20,0x20,0x26,0x20,0x2B,0x20,</p><p> 0x30,0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,</p><p> 0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20
73、,0x30,0x1C,0x10,</p><p> 0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,</p><p> 0x1F,0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x4
74、0,</p><p> 0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,</p><p> 0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,</p>
75、<p> 0x20,0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00};</p><p> void delay_50us(uint t) //延時50微秒</p><p><b> {</b></p><p><b>
76、uchar j;</b></p><p> for(;t>0;t--)</p><p><b> {</b></p><p> for(j=19;j>0;j--);</p><p><b> }</b></p><p><b> }
77、</b></p><p> void timer0init(void) </p><p><b> {</b></p><p> TMOD = 0x01;//定時器0 定時方式1</p><p> IE = 0x82;//開定時器中斷 開總中斷</p>
78、<p> TH0 = 0xDC;//定時10ms</p><p> TL0 = 0x00;//定時10ms</p><p><b> }</b></p><p> void play(uchar i)//音樂播放函數(shù)</p><p><b> {</b&
79、gt;</p><p> uchar temp1,temp2;</p><p> uint addr;//song[]播放位置</p><p> count = 0;//中斷計數(shù)清0</p><p> addr = i * 217;</p><p><b> while(1)
80、</b></p><p><b> {</b></p><p> temp1 = song[addr++];</p><p> if (temp1 == 0xFF) //休止符</p><p><b> {</b></p><p> TR0
81、 = 0;//關閉定時器0</p><p> delay_50us(100);</p><p><b> }</b></p><p> else if (temp1 == 0x00)//歌曲結束符</p><p><b> {</b></p><p><
82、;b> return;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> temp2 = song[addr++];</p><p&g
83、t; TR0 = 1;//啟動定時器0</p><p><b> while(1)</b></p><p><b> {</b></p><p><b> FM = ~FM;</b></p><p> delay_50us(temp1); </
84、p><p> if(temp2 == count)//節(jié)拍</p><p><b> {</b></p><p> count = 0;</p><p><b> break;</b></p><p><b> }</b></p>
85、;<p><b> }</b></p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p> timer0init();//定時器初始化</p><
86、;p><b> while(1)</b></p><p><b> {</b></p><p> play(0);// play(0)為祝你平安 play(1)為八月桂花遍地開</p><p><b> }</b></p><p><b> }
87、</b></p><p> void timer0() interrupt 1</p><p><b> {</b></p><p> TH0 = 0xDC;</p><p> TL0 = 0x00;</p><p> count++;//長度加1</p&g
88、t;<p><b> }</b></p><p> 數(shù)碼管顯示紅外解碼值源碼如下:</p><p> #define uchar unsigned char</p><p> uchar table[16] = </p><p> {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x
89、7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//數(shù)碼管顯示編碼</p><p> uchar disp[2]; //送往數(shù)碼管的數(shù)</p><p> void irwork(void)//把解碼后的數(shù)據轉成16進制的兩位數(shù)</p><p> {<
90、/p><p> disp[0]=ircode[2]/16;//取出ircode中的兩位“數(shù)據碼”</p><p> disp[1]=ircode[2]%16;//取出ircode中的兩位“數(shù)據碼”</p><p><b> }</b></p><p> void display(void)//數(shù)
91、碼管顯示函數(shù)</p><p><b> {</b></p><p> P0=table[disp[0]];//P0口送數(shù)據</p><p> P2=0x06;//數(shù)據管位選</p><p> delay_50us(2);//顯示數(shù)值保持100us</p><p>
92、 P2=0x00;//關閉位選</p><p> P0=table[disp[1]];//P0口送數(shù)據</p><p> P2=0x07;//數(shù)據管位選</p><p> delay_50us(2);//顯示數(shù)值保持100us</p><p> P2=0x00;//關閉位選</p>
93、;<p><b> }</b></p><p> void main()</p><p><b> {</b></p><p><b> while(1)</b></p><p><b> {</b></p><
94、p> display();</p><p><b> }</b></p><p><b> }</b></p><p><b> 第4章 硬件調試</b></p><p> 根據上述設計電路畫出電路原理圖,根據原理圖焊接電路板,實物圖如圖4-1所示:</
95、p><p><b> 圖4-1 實物圖</b></p><p> 在本設計中使用的紅外遙控器如圖4-2所示,遙控器各按鍵相應碼值如圖4-3所示:</p><p> 圖4-2 紅外遙控器 圖4-3 遙控器按鍵碼值 </p><p> 紅外遙控音樂播放器的設計中,對于紅外遙控器未將全部的按鍵設計
96、功能,本設計使用按鍵對應碼值及功能如表4-1所示:</p><p> 表4-1 遙控器按鍵、碼值及功能表</p><p> 根據設計功能進行硬件調試,調試過程如下:</p><p> (1)單片機上電,此時無按鍵按鍵,數(shù)碼管顯示00,蜂鳴器不工作。</p><p> (2)按下數(shù)字鍵1,對應碼值17,數(shù)碼管顯示17,蜂鳴器工作,實現(xiàn)播
97、放曲目1:祝你平安。</p><p> (3) 按下數(shù)字鍵2,對應碼值16,數(shù)碼管顯示16,蜂鳴器工作,實現(xiàn)播放曲目2:八月桂花遍地開。</p><p> (4) 按下頻道“+”,對應碼值02,數(shù)碼管顯示02,蜂鳴器暫停播放曲目2。按下確認鍵,對應碼值06,數(shù)碼管顯示06,蜂鳴器繼續(xù)工作,實現(xiàn)斷點播放曲目2。</p><p> (5) 按下頻道“+”,對應碼值
98、02,數(shù)碼管顯示02,蜂鳴器暫停播放曲目2。按下音量“-”,對應碼值07,數(shù)碼管顯示07,蜂鳴器播放曲目1,實現(xiàn)暫停時更換曲目。</p><p> (6) 按下音量“+”,對應碼值05,數(shù)碼管顯示05,蜂鳴器播放曲目2,實現(xiàn)播放時更換曲目。</p><p> (7) 按下頻道“-”,對應碼值0a,數(shù)碼管顯示0a,蜂鳴器停止工作,實現(xiàn)停止播放功能。</p><p>
99、;<b> 結論</b></p><p> 通過此次課程設計,我對單片機的相關知識有了進一步的了解和認識,在單片機外圍電路的設計過程中也學到了許多課本上沒有的知識,并且學會了使用Proteus仿真軟件,可以讓我們在虛擬的環(huán)境中進行仿真,可以先通過它來檢驗電路的正確性和程序的可行性,而不需要真實電路環(huán)境的介入,不必顧及儀器設備的短缺與環(huán)境的限制,能夠極大的提高實驗的效率。</p>
100、;<p> 本次設計讓我學到的知識有很多,提高了我的邏輯思維能力,使我在邏輯電路的分析與程序的設計上有了更大的進步。加深了我對組合邏輯電路、時序邏輯電路以及單片機程序設計方面的認識,也進一步增進了對一些常見邏輯器件的了解。另外,我還在焊接單片機電路的過程中,學到了許多焊接方面的知識與技巧。并且,培養(yǎng)了我查閱參考書和獨立思考的能力。這次課程設計使我真正懂得了理論與實際相結合的重要性。</p><p>
101、;<b> 參考文獻</b></p><p> [1] 張毅剛.MCS-51單片機應用設計.哈爾濱:哈爾濱工業(yè)大學出版社,2003</p><p> [2] 求是科技.8051系列單片機C程序設計完全手冊.北京:人民郵電出版社,2006</p><p> [3] 李升.單片機原理與接口技術.北京:北京大學出版社,2011</p&g
102、t;<p> 附錄1 整體電路圖及實物圖</p><p><b> 附錄2 電路元件</b></p><p><b> 附錄3 程序源碼</b></p><p> #include<reg52.h></p><p> #define uchar unsign
103、ed char</p><p> #define uint unsigned int</p><p> sbit FM=P2^3; //定義蜂鳴器引腳</p><p> uchar table[16] = </p><p> {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x
104、77,0x7c,0x39,0x5e,0x79,0x71};//數(shù)碼管顯示編碼</p><p> uchar irtime,startflag,bitnum,irreceok,irprocok,shuaxin,n;</p><p> uchar i,count;</p><p> uchar irdata[33];//所有irtime</p>
105、<p> uchar ircode[4]; //解碼后數(shù)據</p><p> uchar disp[2]; //送往數(shù)碼管的數(shù)</p><p> uchar qumu[2] ={0,1};//曲目數(shù)組</p><p> unsigned char code song[] ={ //祝你平安</p><p&g
106、t; 0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,</p><p> 0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,</p><p> 0x20,0x80,
107、0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,</p><p> 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,</p><p> 0x30,0x20,0x30,0x20,0x39
108、,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,</p><p> 0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,</p><p> 0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x3
109、0,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,</p><p> 0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,</p><p> 0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x
110、30,0x60,0x39,0x10,0x30,0x10,</p><p> 0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,</p><p> 0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0
111、x20,0x30,0x20,</p><p> 0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,</p><p> 0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,
112、</p><p> 0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,</p><p><b> //八月桂花遍地開</b></p><p> 0x18,0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x4
113、0,</p><p> 0x1C,0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,</p><p> 0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,</p>
114、<p> 0x20,0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,</p><p> 0x30,0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,</p><p> 0x3
115、0,0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,</p><p> 0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,</p><p> 0x20,0x10,0x1C,0x
116、10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,</p><p> 0x1F,0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,</p><p> 0x20,0x30,0x1C,0x10,0x18,0x20,0
117、x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,</p><p> 0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,</p><p> 0x20,0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,
118、0x40,0x13,0x40,0x18,0x80,0x00};</p><p> void delay_50us(uint t) //延時50微秒</p><p><b> {</b></p><p><b> uchar j;</b></p><p> for(;t>0;t--
119、)</p><p><b> {</b></p><p> for(j=19;j>0;j--);</p><p><b> }</b></p><p><b> }</b></p><p> void delay_25us(uint t)
120、 //延時25微秒</p><p><b> {</b></p><p><b> uchar j;</b></p><p> for(;t>0;t--)</p><p><b> {</b></p><p> for(j=3;j&
121、gt;0;j--);</p><p><b> }</b></p><p><b> }</b></p><p> void timer0init(void) </p><p><b> {</b></p><p> TMOD=0x02;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機音樂播放器課程設計報告
- 基于單片機音樂播放器課程設計
- 單片機音樂播放器課程設計報告
- 單片機課程設計--基于單片機的音樂播放器
- 基于單片機音樂播放器設計-課程設計論文
- 課程設計--基于單片機的簡易音樂播放器
- 單片機課程設計--電子音樂播放器
- 硬件課程設計報告--基于51單片機音樂播放器設計
- 課程設計-基于單片機的音樂盒播放器設計
- 課程設計---基于atmega16單片機的音樂播放器設計
- (湖南工業(yè)大學單片機課程設計-)基于51單片機的音樂播放器
- 基于單片機音樂播放器設計[文獻綜述]
- 基于51單片機的音樂播放器設計
- 15-單片機音樂播放器設計.doc
- 畢業(yè)設計(論文)-單片機音樂播放器設計
- 基于單片機音樂播放器設計軟件設計
- 單片機課程設計--音樂播放系統(tǒng)設計
- 音樂播放器課程設計
- 畢業(yè)設計---基于單片機的音樂播放器
- 基于單片機的自動音樂播放器的設計
評論
0/150
提交評論