版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
目錄TOC\o"1-3"\f\h\z引言 2一、設(shè)計要求 31.1設(shè)計題目 31.2課題意義 3二、系統(tǒng)硬件原理及設(shè)計 32.1系統(tǒng)組成框圖 32.2電子賀卡的功能結(jié)構(gòu)框圖 4三、音樂基礎(chǔ)知識 43.1音樂基礎(chǔ) 43.2音調(diào)脈沖和音樂節(jié)拍的實現(xiàn) 53.2.1音調(diào)脈沖的產(chǎn)生 53.2.2音樂節(jié)拍的產(chǎn)生 63.2.3音符碼表的編制 73.3主程序流程圖 93.4發(fā)聲模塊程序設(shè)計 103.5按鍵模塊程序設(shè)計 11四、硬件電路設(shè)計 124.1主要器件 124.1.1微處理器 124.1.2開關(guān)元件 144.2發(fā)聲驅(qū)動電路 154.3電路工作原理 16五、軟件設(shè)計 165.1軟件開發(fā)平臺 175.2詳細(xì)的程序設(shè)計 17總結(jié) 27參考文獻 28引言如今,電子技術(shù)獲得了飛速的發(fā)展,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領(lǐng)域。目前,單片機正朝著高性能個多品種方向發(fā)展趨勢將是進一步想著CMOS化、低功耗、小體積、大容量、高性能、低價格和外圍電路裝化等幾個方面發(fā)展。單片機又稱單片微控制器,它不是完成某一個邏輯功能的芯片,而是把一個計算機系統(tǒng)集成到一個芯片上。相當(dāng)于一個微型的計算機,和計算機相比,單片機只缺少了I/O設(shè)備。概括的講:一塊芯片就成了一臺計算機。它的體積小、質(zhì)量輕、價格便宜、為學(xué)習(xí)、應(yīng)用和開發(fā)提供了便利條件。同時,學(xué)習(xí)使用單片機是了解計算機原理與結(jié)構(gòu)的最佳選擇。單片機內(nèi)部也用和電腦功能類似的模塊,比如CPU,內(nèi)存,并行總線,還有和硬盤作用相同的存儲器件,不同的是它的這些部件性能都相對我們的家用電腦弱很多,不過價錢也是低的,一般不超過10元即可。單片機具有體積小、功耗低、控制功能強、擴展靈活、微型化和使用方便等優(yōu)點,廣泛應(yīng)用于儀器儀表中,結(jié)合不同類型的傳感器,可實現(xiàn)諸如電壓、功率、頻率、濕度、溫度、流量、速度、厚度、角度、長度、硬度、元素、壓力等物理量的測量。采用單片機控制使得儀器儀表數(shù)字化、智能化、微型化,且功能比起采用電子或數(shù)字電路更加強大。例如精密的測量設(shè)備(功率計,示波器,各種分析儀)。目前單片機滲透到我們生活的各個領(lǐng)域,幾乎很難找到哪個領(lǐng)域沒有單片機的蹤跡。因此,單片機的學(xué)習(xí)、開發(fā)與應(yīng)用將造就一批計算機應(yīng)用與智能化控制的科學(xué)家、工程師。利用單片機實現(xiàn)音樂播放有很多要點,例如外部電路簡單,控制方便等,因而備受廣大單片機愛好者的喜愛。通過音樂發(fā)聲器的設(shè)計方案,掌握C語言的編程方法。并熟練的運用AT89C52單片機定時器產(chǎn)生固定頻率的方波信號,推動喇叭發(fā)出旋律,按下單鍵可以演奏預(yù)先設(shè)置的歌曲旋律,最重要的是自己還可以通過程序設(shè)計輸入自己喜歡的歌曲來演奏,本設(shè)計采用簡易音階編碼直覺式輸入法方便設(shè)計音樂旋律。
一、設(shè)計要求 基于單片機的音樂播放器,播放簡單歌曲,本次課題音樂播放為《奇異恩典》、《歡樂頌》和《生日快樂》。1.1設(shè)計題目基于單片機的電子賀卡設(shè)計1.2課題意義基于單片機的音樂播放器可應(yīng)用于mp3,MP4,擴音器等很多方面,并可作為很多系統(tǒng)的輔助功能,作為單片機的重要硬件資源之一,利用定時器可以產(chǎn)生各種固定頻率的方波信號,也可以產(chǎn)生包括“Do”、“Re”、“Me”--等音階在內(nèi)的各種頻率聲音。將各個音階連接在一起,便可組成一支曲子或是演奏一段旋律。我們可以運用在生活實際中比如賀卡或者電子門鈴?;谶@個思想,我們設(shè)計了一款特殊的“音樂播放器”,本播放器可實現(xiàn)播放、暫停、等功能。由于時間及條件限制,本設(shè)計實現(xiàn)了一種簡單的音樂播放器,其核心器件采用AT89C52單片機,本播放器具有電路簡單,功能強大,易于拓展等特點。在此基礎(chǔ)上,可以添加按鍵,LED顯示屏等模塊,實現(xiàn)切換歌曲,歌名顯示,動感音樂屏等功能。二、系統(tǒng)硬件原理及設(shè)計2.1系統(tǒng)組成框圖硬件系統(tǒng)包括主控模塊、時鐘電路、復(fù)位電路、電源電路、顯示模塊、發(fā)聲模塊和按鍵模塊。如圖2-1所示。發(fā)聲模塊時鐘電路主控模塊發(fā)聲模塊時鐘電路主控模塊(AT89C52)復(fù)位電路復(fù)位電路按鍵模塊電源電路按鍵模塊電源電路圖2-1硬件系統(tǒng)結(jié)構(gòu)圖2.2電子賀卡的功能結(jié)構(gòu)框圖電子賀卡的功能框圖如圖2-2所示,程序調(diào)用,按不同鍵負(fù)責(zé)控制歌曲的播放、下一曲、上一曲和暫停,同時蜂鳴器發(fā)出響聲和停止聲音。 開始開始播放、下一曲、上一曲、暫停發(fā)聲和暫停聲音程序調(diào)用圖2-2電子賀卡的功能框圖三、音樂基礎(chǔ)知識3.1音樂基礎(chǔ)音作為一種物理現(xiàn)象,是由于物體振動而產(chǎn)生的,振動產(chǎn)生的聲波作用于人耳,聽覺系統(tǒng)將神經(jīng)沖動傳達給大腦,進而產(chǎn)生聽覺。人耳能聽到的聲音頻率大約在11—20000Hz,而音樂使用的音一般在27—4100Hz。樂音體系中各音級的名稱叫做音名,被廣泛采用的是CDEFGAB(doremifasolasi則多用于歌唱,稱為唱名)。樂音體系中音高關(guān)系的最小計量單位叫做半音,兩個半音構(gòu)成一個全音。樂音中有幾十個高低不同的音,但是最基本只有這七個音,其他高、低音名都是在這個基礎(chǔ)上變化出來的。樂譜表上用來表示正在進行的音的長短的符號,叫做音符。不同的音符代表不同的長度。音符有以下幾種:全音符、二分音符、四分音符、八分音符、十六分音符、三十二分音符、六十四分音符。此外,還有附點音符,它就是指帶附點的音符,所謂附點就是記在音符右邊的小圓點,表示增加前面音符時值的一半。音持續(xù)的長短即時值,一般用拍數(shù)表示,休止符表示暫停發(fā)音。一首音樂就是由許多不同的音符組成的,而每一個音符對應(yīng)著不同的頻率,這樣就可以利用不同的頻率的組合,加以拍數(shù)對應(yīng)的延時來構(gòu)成不同的音樂。3.2音調(diào)脈沖和音樂節(jié)拍的實現(xiàn)3.2.1音調(diào)脈沖的產(chǎn)生音調(diào)表示一個音符唱多高的頻率,和平時所說的“音高”十分類似。這是音樂學(xué)中的名詞,在音樂中常把中央C上方的A音定為標(biāo)準(zhǔn)音高,其頻率f=440Hz。其余音均通過和其比較獲得。如果f1和f2兩個音符的頻率相差一倍時,也即f2=2×f1時,則稱f2比f1高一個倍頻程。音符1(低音do)與音符i(中音do),……,等之間正好相差一個倍頻程,在音樂學(xué)中一般稱其相差一個八度音。音樂中規(guī)定,在一個八度音內(nèi),共有12個半音。以1—八音區(qū)為例,這12個半音分別是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5—#5、#5—6、6—#6、#6—7、7—i。由于人耳的聽覺效果是非線性的,因此這12個音階的分度基本上是以對數(shù)關(guān)系來劃分的。要讓單片機產(chǎn)生音頻脈沖,只要計算出某一音頻的周期,將此周期除以2得到半周期,利用定時器對此半周期進行定時,每當(dāng)定時時間到,將P1.7口線上的電平取反,從而得到所需要的音頻脈沖。產(chǎn)生音頻的定時器初值計算公式如下:式中,k根據(jù)單片機工作方式確定,可為13(方式0)、16(方式1)、8(方式2),fosc為單片機工作頻率,為希望產(chǎn)生的音頻。例如中音DO的頻率為523Hz,若單片機的工作頻率為12MHz,定時器T0設(shè)置為工作方式1,按以上公式計算得定時器初值為64580;高音DO的頻率為1047Hz,計算定時器初值為65058。3.2.2音樂節(jié)拍的產(chǎn)生節(jié)拍表示一個音符唱多長的時間,同樣是音樂學(xué)中的名詞。在一張完整樂譜的開頭,都有如1=C、1=G……等的標(biāo)識。例如圖3-2所示為1=C的節(jié)拍示意圖。這里的、用來表示節(jié)拍,而1=C、1=G表示一個樂譜的曲調(diào),簡單地說就是跟音調(diào)有關(guān)系。圖3-2節(jié)拍示意圖可以通過延時程序來產(chǎn)生不同的節(jié)拍。如果1拍為0.4秒,則1/4為0.1秒,只要設(shè)定延時時間就可以求得節(jié)拍時間。例如一段延時程序Delay為1/4拍,則一拍只要調(diào)用4次Delay程序,依此類推。
3.2.3音符碼表的編制編寫一段音樂的音符碼表時,先把樂譜的音符找出,按表3-1建立對應(yīng)的音調(diào)碼碼及定時器初值表,按表3-2建立節(jié)拍碼表。每個音符使用1個字節(jié),字節(jié)的高4位存放音符的音調(diào)碼,低4位存放音符的節(jié)拍碼。表3-1與音符對應(yīng)的音調(diào)碼表和定時器初值表(fosc=12MHz)簡譜發(fā)聲音調(diào)碼定時器初值5低音SO1FB046低音LA2FB907低音SI3FC091中音DO4FC442中音RE5FCAC3中音ME6FD094中音FA7FD345中音SO8FD826中音LA9FDC87中音SIAFE061高音DOBFE222高音RECFE563高音MEDFE854高音FAEFE9A5高音SOFFEC1不發(fā)音0用C語言將音調(diào)碼表和定時器初值表表示出來即為:ucharcodeTABLE[]={//音符對應(yīng)的定時器初值表 0xfb,0x04,0xfb,0x90,0xfc,0x09,0xfc,0x44, 0xfc,0xac,0xfd,0x09,0xfd,0x34,0xfd,0x82, 0xfd,0xc8,0xfe,0x06,0xfe,0x22,0xfe,0x56, 0xfe,0x85,0xfe,0x9a,0xfe,0xc1};表3-2節(jié)拍碼表節(jié)拍碼節(jié)拍數(shù)11/4拍22/4拍33/4拍41拍51又1/4拍61又2/4拍82拍A2又2/4拍C3拍F3又3/4拍按照上述原理可以編寫出“AmazingGrace”樂曲的音符碼表?!癆mazingGrace”的簡譜如下:5.|1-31|3-2|1-6.|5.-5.|1-31|3-2|5--|5-|3|5·353|1-5.|6·116.|5.-5.|1-31|3-2|1--|1-|對應(yīng)的音符碼表為:ucharcodeGRACE[]={ //《奇異恩典》音符碼表 0x14,0x48,0x62,0x42,0x68,0x54,0x48,0x24,0x18, 0x14,0x48,0x62,0x42,0x68,0x54,0x8c,0x880x64,0x86,0x62,0x82,0x62,0x48,0x14,0x26,0x42,0x42,0x22,0x18, 0x14,0x48,0x62,0x42,0x68,0x54,0x4c,0x48,0x00};
3.3主程序流程圖如圖3-3所示為主程序流程圖。開始開始初始化初始化開始鍵是否按下 N開始鍵是否按下播放音樂 Y播放音樂按鍵掃描按鍵掃描圖3-3主程序流程圖
3.4發(fā)聲模塊程序設(shè)計如圖3-4所示為發(fā)聲模塊程序流程圖。開始開始是否為結(jié)束碼是否為結(jié)束碼 Y取音調(diào)碼和取音調(diào)碼和節(jié)拍碼音調(diào)音調(diào)碼是否為0 N Y停止T0計算T0初值,裝載,啟動停止T0計算T0初值,裝載,啟動T0延時延時音符碼變量音符碼變量+1結(jié)束結(jié)束圖3-4發(fā)聲模塊程序流程圖3.5按鍵模塊程序設(shè)計本設(shè)計中采用4個按鍵來控制音樂的播放:Key0控制上一曲播放;Key1開始播放;Key2控制下一曲播放;Key3暫停播放。主程序中放置了3首歌曲,分別是"AmazingGrace";"OdeToJoy";"HappyBirthday"。進入主程序后,判斷開始鍵是否按下,若按下,則按順序循環(huán)播放這3首歌曲。開始播放后,通過控制4個按鍵來控制歌曲的播放。圖3-5為按鍵模塊程序流程圖上一曲 上一曲 N下一曲 N下一曲暫停 暫停 Y停止T0 Y 停止T0 N開始 N開始歌曲號-1歌曲號+1歌曲號-1歌曲號+1啟動T0音樂播放音樂播放圖3-5按鍵模塊程序流程圖四、硬件電路設(shè)計硬件電路主要由AT89C52單片機、三極管音頻功放電路(圖中為理想原件,有三極管的音頻放大可以增加聲音效果)和蜂鳴器部分組成,電路結(jié)構(gòu)比較簡單。仿真圖如下圖所示:4.1主要器件4.1.1微處理器AT89C52的功能全部兼容MCS-51,并且還有程序加密等功能,相對而言更加實用。AT89C52單片機是美國ATMEL公司生產(chǎn)的低電壓,高性能CMOS8位微控制器,片內(nèi)含8KB的可反復(fù)擦寫的只讀程序存儲器和256字節(jié)的隨機存取存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),與標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及805日1產(chǎn)品引腳兼容,片內(nèi)置通用8位中央處理器(CPU)和Flash存儲單元,其強大的功能更適合較為復(fù)雜的控制應(yīng)用場合。其主要工作特性是:片內(nèi)程序存儲器內(nèi)含8KB的Flash程序存儲器,可擦寫壽命為1000次;片內(nèi)數(shù)據(jù)存儲器內(nèi)含256字節(jié)的RAM;具有32根可編程I/O口線;具有3個可編程定時器;中斷系統(tǒng)是具有8個中斷源、6個中斷矢量、2級優(yōu)先權(quán)的結(jié)構(gòu);串行口是具有一個全雙工的可編程串行通信口;具有一個數(shù)據(jù)指針DPTR;低功耗工作模式有空閑模式和掉電模式;具有可編程的3級程序鎖定位;AT89C52工作電源電壓為5(1±0.2)V,且典型值為5V;AT89C52最高工作頻率為24MHZ。下圖為AT89C51單片機的實物圖與引腳圖:圖4-2AT89C52單片機的實物圖與引腳圖引腳功能描述如下:P0口:—8位、漏極開路的雙向I/O口。當(dāng)使用片外存儲器及外擴I/O口時,P0口作為低字節(jié)地址/數(shù)據(jù)復(fù)用線。在編程時,P0口可用于接收指令代碼字節(jié);在校驗時,P0口可輸出指令字節(jié)(須外加上拉電阻)。P0口也可做通用I/O口使用,但需加上拉電阻,變?yōu)闇?zhǔn)雙向口。當(dāng)作為普通輸入時,應(yīng)將輸出鎖存器置1。P0口可驅(qū)動8個TTL負(fù)載。P1口:—8位、準(zhǔn)雙向I/O口,具有內(nèi)部上拉電阻。P1口是為用戶準(zhǔn)備的I/O口雙向口。在編程和校驗時,可用做輸入低8位地址。用做輸入時,應(yīng)先將輸出鎖存器置1。P1口可驅(qū)動4個TTL負(fù)載。P2口:—8位、準(zhǔn)雙向I/O口,具有內(nèi)部上拉電阻。當(dāng)使用片外存儲器或外擴I/O口時,P2口輸出高8位地址。在編程/校驗時,P2口可接收高字節(jié)地址和某些控制信號。P2口也可做普通I/O口使用。用做輸入時,應(yīng)先將輸出鎖存器置1。P1口可驅(qū)動4個TTL負(fù)載。P3口:—8位、準(zhǔn)雙向I/O口,具有內(nèi)部上拉電阻。P3口可做普通I/O口使用。用作輸入時,應(yīng)先將輸出鎖存器置1。在編程/校驗時,P3口接收某些控制信號。它可驅(qū)動4個TTL負(fù)載。RST:復(fù)位輸入。晶振工作時,RST腳持續(xù)2個機器周期高電平將使單片機復(fù)位??撮T狗計時完成后,RST腳輸出96個晶振周期的高電平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能無效。DISRTO默認(rèn)狀態(tài)下,復(fù)位高電平有效。ALE/PROG:地址鎖存控制信號(ALE)是訪問外部程序存儲器時,鎖存低8位地址的輸出脈沖。在flash編程時,此引腳(PROG)也用作編程輸入脈沖。在一般情況下,ALE以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時器或時鐘使用。然而,特別強調(diào),在每次訪問外部數(shù)據(jù)存儲器時,ALE脈沖將會跳過。如果需要,通過將地址為8EH的SFR的第0位置“1”,ALE操作將無效。這一位置“1”,ALE僅在執(zhí)行MOVX或MOVC指令時有效。否則,ALE將被微弱拉高。這個ALE使能標(biāo)志位(地址為8EH的SFR的第0位)的設(shè)置對微控制器處于外部執(zhí)行模式下無效。PSEN:外部程序存儲器選通信號(PSEN)是外部程序存儲器選通信號。當(dāng)AT89S52從外部程序存儲器執(zhí)行外部代碼時,PSEN在每個機器周期被激活兩次,而在訪問外部數(shù)據(jù)存儲器時,PSEN將不被激活。EA/VPP:訪問外部程序存儲器控制信號。為使能從0000H到FFFFH的外部程序存儲器讀取指令,EA必須接GND。為了執(zhí)行內(nèi)部程序指令,EA應(yīng)該接VCC。在flash編程期間,EA也接收12伏VPP電壓。XTAL1:振蕩器反相放大器和內(nèi)部時鐘發(fā)生電路的輸入端。XTAL2:振蕩器反相放大器的輸出端。4.1.2開關(guān)元件獨立按鍵是51單片機應(yīng)用系統(tǒng)中最常用的人機交互通道之一,它通常用于給用戶提供向51單片機輸入信息的通道。獨立按鍵的基本工作原理是:按鍵按下時接通兩個點,放開時則斷開這兩個點。按照結(jié)構(gòu)可以把按鍵分為兩類:觸點式開關(guān)按鍵,如機械式開關(guān)、導(dǎo)電橡膠式開關(guān)等;無觸點式開關(guān)按鍵,如電氣式按鍵,磁感應(yīng)按鍵等。本設(shè)計的控制電路采用4個獨立按鍵,如圖4.1.2所示。從左至右:Key0與P1.0口相連,播放上一曲;Key1與P1.1口相連,開始播放;Key2與P1.2口相連,播放下一曲;Key3與P1.3口相連,暫停播放。當(dāng)按鍵按下時,接口接收到低電平,從而實現(xiàn)對音樂器的控制。圖4.1.2控制電路4.2發(fā)聲驅(qū)動電路蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計算機、打印機、報警器、電子玩具、汽車電子設(shè)備、電話機、定時器等電子產(chǎn)品中作發(fā)聲器件。圖2-4所示為蜂鳴器實物圖。圖2-4蜂鳴器實物圖蜂鳴器按其結(jié)構(gòu)主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。多諧振蕩器由晶體管或集成電路構(gòu)成。當(dāng)接通電源后(1.5~15V直流工作電壓),多諧振蕩器起振,輸出1.5~2.5kHZ的音頻信號,阻抗匹配器推動壓電蜂鳴片發(fā)聲。壓電蜂鳴片由鋯鈦酸鉛或鈮鎂酸鉛壓電陶瓷材料制成。在陶瓷片的兩面鍍上銀電極,經(jīng)極化和老化處理后,再與黃銅片或不銹鋼片粘在一起。電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號電流通過電磁線圈,使電磁線圈產(chǎn)生磁場。振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發(fā)聲。蜂鳴器按其是否帶有信號源又分為有源和無源兩種類型。有源蜂鳴器只需要在其供電端加上額定直流電壓,其內(nèi)部的震蕩器就可以產(chǎn)生固定頻率的信號,驅(qū)動蜂鳴器發(fā)出聲音。無源蜂鳴器可以理解成與喇叭一樣,需要在其供電端上加上高低不斷變化的電信號才可以驅(qū)動發(fā)出聲音。用單片機控制蜂鳴器發(fā)出不同頻率的聲音,最好采用無源的蜂鳴器,如果用有源蜂鳴器,可以會因為二種不同頻率聲音(有源蜂鳴器本身固有發(fā)音頻率與單片機驅(qū)動頻率)互相疊加,造成效果混亂、發(fā)音不清。4.3電路工作原理當(dāng)按下按鍵,P1.0口輸出音樂脈沖,脈沖信號首先經(jīng)過由電容C1和C2組成的回路輸入到單片機XTAL1XTAL2.輸入信號經(jīng)過晶振處后,從Vout輸出,送入到P0.0腳。并且串聯(lián)一個限流電阻R2,用以保護蜂鳴器的正常工作。經(jīng)過此電路后,單片機發(fā)出的不同頻率的音頻信號就可以通過蜂鳴器發(fā)出想要的歌曲。五、軟件設(shè)計軟件設(shè)計是指在硬件電路的基礎(chǔ)上,以程序的形式實現(xiàn)算法,進而實現(xiàn)音樂播放器的功能。軟件是整個控制系統(tǒng)設(shè)計的核心,采用模塊化設(shè)計,具有充分的靈活性,在硬件結(jié)構(gòu)不變的情況下,只需要改變軟件就能實現(xiàn)一些不同的功能,滿足用戶多樣性需求。本系統(tǒng)采用模塊化的編程思想,把整個軟件系統(tǒng)化分為多個功能模塊,主程序通過調(diào)用各個子程序來完成各個功能的實現(xiàn)。軟件的程序主要由主程序、發(fā)聲模塊程序、控制模塊程序、LCD1602顯示程序組成。本設(shè)計使用KeilμVison3軟件完成程序的編寫和調(diào)試。5.1軟件開發(fā)平臺KeilμVison系列是德國KeilSoftware公司推出的51系列兼容單片機軟件開發(fā)系統(tǒng)。μVison3是集成的可視化Windows操作界面,其提供了豐富的庫函數(shù)和各種編譯工具,能夠?qū)?1系列單片機以及和51系列兼容的絕大部分類型的單片機進行設(shè)計。KeilμVison系列可以支持單片機C51程序設(shè)計語言,也可以直接進行匯編語言的設(shè)計與編譯。目前,Keil公司已經(jīng)被ARM公司收購,成為ARM旗下的產(chǎn)品。KeilμVison系列的集成開發(fā)環(huán)境最高版本是μVison3,版本號為V8.08。KeilμVison系列是一個非常優(yōu)秀的編譯器,受到廣大單片機設(shè)計者的廣泛使用。其主要特點如有:支持匯編語言、C51語言等多種單片機設(shè)計語言;可視化的文件管理,界面友好;支持豐富的產(chǎn)品線,除了51及其兼容內(nèi)核的單片機外,還新增加了對ARM內(nèi)核產(chǎn)品的支持;具有完善的編譯連接工具;具備豐富的仿真調(diào)試功能,可以仿真串口、并口、A/D、D/A、定時器/計數(shù)器以及中斷等資源,同時也可以和外部仿真器聯(lián)合進行在線調(diào)試;內(nèi)嵌RTX-51實時多任務(wù)操作系統(tǒng);支持在一個工作空間中進行多項目的程序設(shè)計。支持多級代碼優(yōu)化。5.2詳細(xì)的程序設(shè)計詳細(xì)的程序設(shè)計如下:#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitSPEAK=P1^7;//定義蜂鳴器輸出端口sbitKey0=P1^0; //定義獨立按鍵sbitKey1=P1^1;sbitKey2=P1^2;sbitKey3=P1^3;sbitRS=P2^0;//定義控制引腳sbitRW=P2^1;sbitE=P2^2;ucharbeat,tl,th;//定義節(jié)拍和T0初值變量ucharcodeTABLE[]={//音符對應(yīng)的定時器初值表 0xfb,0x04,0xfb,0x90,0xfc,0x09,0xfc,0x44, 0xfc,0xac,0xfd,0x09,0xfd,0x34,0xfd,0x82, 0xfd,0xc8,0xfe,0x06,0xfe,0x22,0xfe,0x56, 0xfe,0x85,0xfe,0x9a,0xfe,0xc1};ucharcodeGRACE[]={ //《奇異恩典》音符碼表 0x14,0x48,0x62,0x42,0x68,0x54,0x48,0x24,0x18, 0x14,0x48,0x62,0x42,0x68,0x54,0x8c,0x88, 0x64,0x86,0x62,0x82,0x62,0x48,0x14,0x26,0x42,0x42,0x22,0x18, 0x14,0x48,0x62,0x42,0x68,0x54,0x4c,0x48,0x00};ucharcodeJOY[]={ //《歡樂頌》音符碼表 0x64,0x64,0x74,0x84,0x84,0x74,0x64,0x54,0x44,0x44,0x54,0x64,0x66,0x52,0x58, 0x64,0x64,0x74,0x84,0x84,0x74,0x64,0x54,0x44,0x44,0x54,0x64,0x56,0x42,0x48, 0x54,0x54,0x64,0x44,0x54,0x62,0x72,0x64,0x44,0x54,0x62,0x72,0x64,0x54,0x44,0x54,0x18, 0x64,0x64,0x74,0x84,0x84,0x74,0x64,0x54,0x44,0x44,0x54,0x64,0x56,0x42,0x48,0x00};ucharcodeHAPPY[]={ //《生日快樂》音符碼表 0x82,0x01,0x81,0x94,0x84,0xB4,0xA4,0x04, 0x82,0x01,0x81,0x94,0x84,0xC4,0xB4,0x04, 0x82,0x01,0x81,0xF4,0xD4,0xB4,0xA4,0x94, 0xE2,0x01,0xE1,0xD4,0xB4,0xC4,0xB4,0x04, 0x82,0x01,0x81,0x94,0x84,0xB4,0xA4,0x04, 0x82,0x01,0x81,0x94,0x84,0xC4,0xB4,0x04, 0x82,0x01,0x81,0xF4,0xD4,0xB4,0xA4,0x94, 0xE2,0x01,0xE1,0xD4,0xB4,0xC4,0xB4,0x04, 0x00};ucharcodeGRACE_Name[]="AmazingGrace";ucharcodeJOY_Name[]="OdeToJoy";ucharcodeHAPPY_Name[]="HappyBirthday";voidTimer0_Initialize();voidDelay_1ms(ucharms);voidDelay(uchar);voidKey_Scan(char*numz,uchar*kz);ucharBusy_Check();voidLCD_Write_Command(ucharcmd);voidLCD_Initialize();voidShow_String(ucharx,uchary,uchar*str);voidmain(){ ucharm,m1,k=0;//定義臨時變量 charnum=0; char*numz; uchar*kz; uchar*p[3]; uchar*q[3]; numz=# kz=&k; p[0]=GRACE;p[1]=JOY;p[2]=HAPPY; q[0]=GRACE_Name;q[1]=JOY_Name;q[2]=HAPPY_Name; Timer0_Initialize(); LCD_Initialize(); while(Key1); Delay_1ms(5); while(Key1); while(1) { while(*(p[num]+k)!=0)//判斷取得的音符碼是否為結(jié)束碼 { beat=*(p[num]+k)&0x0f; //取節(jié)拍碼 m=_crol_(*(p[num]+k),4)&0x0f; //取音調(diào)碼 if(m!=0) //判斷取得的音調(diào)碼是否為0 { //不是,根據(jù)取得的音調(diào)碼計算T0初值 m1=--m*2+1; m=m*2; tl=TL0=TABLE[m1]; th=TH0=TABLE[m]; TR0=1; //啟動T0 } else //取得的音符碼為0,則停止T0 TR0=0; Delay(beat); k++; Show_String(0,0,q[num]); Show_String(0,1,q[num]+16); Key_Scan(numz,kz); }num++; if(num>2) num=0; k=0; }}/**************************T0初始化函數(shù)****************************/voidTimer0_Initialize(){ TMOD=0x01; IE=0x82;}/*************************T0中斷服務(wù)函數(shù)***************************/voidtimer0()interrupt1using1{TL0=tl;TH0=th;//重裝定時初值SPEAK=~SPEAK;//蜂鳴器控制端口電平取反}/************************四分之一拍延時函數(shù)************************/voidDelay_Beat(){ uinti; for(i=0;i<20000;i++);}/**************************節(jié)拍延時函數(shù)****************************/voidDelay(uchartt){ uchari; for(i=0;i<tt;i++) Delay_Beat();}/***************************1ms延時函數(shù)****************************/voidDelay_1ms(ucharms){ inti; while(ms--) for(i=125;i>0;i--);}/**************************按鍵掃描函數(shù)******************************/voidKey_Scan(char*numz,uchar*kz){ bitflag; if(!Key0) { Delay_1ms(5); if(!Key0) { (*numz)--; if(*numz<0) *numz=2; *kz=0; } } elseif(!Key2) { Delay_1ms(5); if(!Key2) { (*numz)++; if(*numz>2) *numz=0; *kz=0; } } elseif(!Key3) { Delay_1ms(5); if(!Key3) { TR0=0; flag=1; while(flag) { if(!Key1) { Delay_1ms(5); if(!Key1) { flag=0; TR0=1; } } } } } while((!Key0)||(!Key1)||(!Key2));}/*******************檢查1602是否處于忙狀態(tài)函數(shù)**********************/ucharBusy_Check(){ ucharLCD_Status; RS=0; RW=1; E=1; Delay_1ms(1);//為什么延時1ms呢? LCD_Status=P0; E=0; returnLCD_Status;}/************************向1602寫入命令函數(shù)*************************/voidLCD_Write_Command(ucharcmd){ while((Busy_Check()&0x80)==0x80);//如果1602忙 RS=0; RW=0; E=0; P0=cmd; E=1; Delay_1ms(1); E=0;}/************************向1602寫入數(shù)據(jù)函數(shù)*************************/voidLCD_Write_Data(uchardat){ while((Busy_Check()&0x80)==0x80); RS=1; RW=0; E=0; P0=dat; E=1; Delay_1ms(1); E=0; }/*************************初始化1602液晶函數(shù)*********************
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 掛靠免責(zé)協(xié)議書范本
- 《防治腦血管病》課件
- 2024年智能交通企業(yè)無抵押企業(yè)間借款合同范本3篇
- 2024年消防救援高空作業(yè)責(zé)任限定合同
- 2025年黑龍江貨運從業(yè)資格證模擬考試0題題庫答案
- 2025年福州道路運輸從業(yè)資格證考試內(nèi)容是什么
- 2025年西安考從業(yè)資格證貨運試題
- 2025年攀枝花貨運從業(yè)資格證試題庫及答案
- 2024年物業(yè)前期服務(wù)綜合合同
- 《萬象城商業(yè)模式》課件
- 招投標(biāo)評分標(biāo)準(zhǔn)表
- 冠心病雙聯(lián)抗血小板治療中國專家共識
- 大學(xué)體育與健康課件:體育鍛煉與安全衛(wèi)生保健
- 學(xué)校食堂色標(biāo)管理制度、食品切配工用具色標(biāo)管理操作指南
- 部編語文五年級上冊詞語表注音版
- 1神州謠 課件(共50張PPT)
- 國家開放大學(xué)思想道德與法治社會實踐作業(yè)集合6篇
- 小學(xué)侵害未成年人強制報告制度
- 2023年飛行員基礎(chǔ)知識考試題庫(500題版)
- 公租房運營管理服務(wù)投標(biāo)方案
- 能源管理系統(tǒng)EMS用戶需求說明書
評論
0/150
提交評論