基于單片機的電子賀卡設計_第1頁
基于單片機的電子賀卡設計_第2頁
基于單片機的電子賀卡設計_第3頁
基于單片機的電子賀卡設計_第4頁
基于單片機的電子賀卡設計_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、目錄引 言2一、設計要求31.1設計題目31.2課題意義3二、系統(tǒng)硬件原理及設計32.1系統(tǒng)組成框圖32.2 電子賀卡的功能結構框圖4三、音樂基礎知識43.1 音樂基礎43.2音調脈沖和音樂節(jié)拍的實現(xiàn)53.2.1 音調脈沖的產(chǎn)生53.2.2音樂節(jié)拍的產(chǎn)生63.2.3音符碼表的編制73.3主程序流程圖93.4發(fā)聲模塊程序設計103.5按鍵模塊程序設計11四、硬件電路設計124.1 主要器件124.1.1 微處理器124.1.2開關元件144.2 發(fā)聲驅動電路154.3電路工作原理16五、軟件設計165.1軟件開發(fā)平臺175.2詳細的程序設計17總 結27參考文獻28引 言如今,電子技術獲得了飛速

2、的發(fā)展,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領域。目前,單片機正朝著高性能個多品種方向發(fā)展趨勢將是進一步想著 CMOS化、低功耗、小體積、大容量、高性能、低價格和外圍電路裝化等幾個方面發(fā)展。 單片機又稱單片微控制器,它不是完成某一個邏輯功能的芯片,而是把一個計算機系 統(tǒng)集成到一個芯片上。相當于一個微型的計算機,和計算機相比,單片機只缺少了 I/O 設備。概括的講:一塊芯片就成了一臺計算機。它的體積小、質量輕、價格便宜、為學習、應用和開發(fā)提供了便利條件。同時,學習使用單片機是了解計算機原理與結構的最佳選擇。單片機內(nèi)部也用和電腦功能類似的模塊,比如 CPU,內(nèi)存,并行總線,還有和硬盤作用相同的存儲器件

3、,不同的是它的這些部件性能都相對我們的家用電腦弱很多,不過價錢也是低的,一般不超過 10元即可。單片機具有體積小、功耗低、控制功能強、擴展靈活、微型化和使用方便等優(yōu)點,廣泛應用于儀器儀表中,結合不同類型的傳感器,可實現(xiàn)諸如電壓、功率、頻率、濕度、 溫度、流量、速度、厚度、角度、長度、硬度、元素、壓力等物理量的測量。采用單片機控制使得儀器儀表數(shù)字化、智能化、微型化,且功能比起采用電子或數(shù)字電路更加強大。例如精密的測量設備(功率計,示波器,各種分析儀)。目前單片機滲透到我們生活的各個領域,幾乎很難找到哪個領域沒有單片機的蹤跡。因此,單片機的學習、開發(fā)與應用將造就一批計算機應用與智能化控制的科學家、

4、工程師。 利用單片機實現(xiàn)音樂播放有很多要點,例如外部電路簡單,控制方便等,因而備受廣大單片機愛好者的喜愛。通過音樂發(fā)聲器的設計方案,掌握C語言的編程方法。并熟練的運用 AT89C52 單片機定時器產(chǎn)生固定頻率的方波信號,推動喇叭發(fā)出旋律,按下單鍵可以演奏預先設置的歌曲旋律,最重要的是自己還可以通過程序設計輸入自己喜歡的歌曲來演奏,本設計采用簡易音階編碼直覺式輸入法方便設計音樂旋律。一、設計要求基于單片機的音樂播放器,播放簡單歌曲,本次課題音樂播放為奇異恩典、歡樂頌和生日快樂。1.1設計題目基于單片機的電子賀卡設計1.2課題意義基于單片機的音樂播放器可應用于 mp3,MP4,擴音器等很多方面,并

5、可作為很多系統(tǒng)的輔助功能,作為單片機的重要硬件資源之一,利用定時器可以產(chǎn)生 各種固定頻率的方波信號,也可以產(chǎn)生包括“Do”、“Re”、“Me”-等音階在內(nèi)的各種頻率聲音。將各個音階連接在一起,便可組成一支曲子或是演奏一段旋律。我們可以運用在生活實際中比如賀卡或者電子門鈴?;谶@個思想,我們設計了一款特殊的“音樂播放器”,本播放器可實現(xiàn)播放、暫停、等功能。由于時間及條件限制,本設計實現(xiàn)了一種簡單的音樂播放器,其核心器件采用 AT89C52 單片機,本播放器具有電路簡單,功能強大,易于拓展等特點。在此基礎上,可以添加按鍵,LED 顯示屏等模塊,實現(xiàn)切換歌曲,歌名顯示,動感音樂屏等功能。二、系統(tǒng)硬件

6、原理及設計 2.1系統(tǒng)組成框圖硬件系統(tǒng)包括主控模塊、時鐘電路、復位電路、電源電路、顯示模塊、發(fā)聲模塊和按鍵模塊。如圖2-1所示。發(fā)聲模塊時鐘電路主控模塊(AT89C52)復位電路按鍵模塊電源電路 圖2-1 硬件系統(tǒng)結構圖2.2 電子賀卡的功能結構框圖電子賀卡的功能框圖如圖2-2所示,程序調用,按不同鍵負責控制歌曲的播放、下一曲、上一曲和暫停,同時蜂鳴器發(fā)出響聲和停止聲音。 開始播放、下一曲、上一曲、暫停發(fā)聲和暫停聲音程序調用圖2-2 電子賀卡的功能框圖三、音樂基礎知識3.1 音樂基礎音作為一種物理現(xiàn)象,是由于物體振動而產(chǎn)生的,振動產(chǎn)生的聲波作用于人耳,聽覺系統(tǒng)將神經(jīng)沖動傳達給大腦,進而產(chǎn)生聽覺

7、。人耳能聽到的聲音頻率大約在 1120000Hz,而音樂使用的音一般在 274100Hz。樂音體系中各音級的名稱叫做音名,被廣泛采用的是 C D E F G A B (do re mi fa so la si 則多用于歌唱,稱為唱名)。樂音體系中音高關系的最小計量單位叫做半音,兩個半音構成一個全音。樂音中有幾十個高低不同的音,但是最基本只有這七個音,其他高、低音名都是在這個基礎上變化出來的。樂譜表上用來表示正在進行的音的長短的符號,叫做音符。不同的音符代表不同的長度。音符有以下幾種:全音符、二分音符、四分音符、八分音符、十六分音符、三十二分音符、六十四分音符。此外,還有附點音符,它就是指帶附點

8、的音符,所謂附點就是記在音符右邊的小圓點,表示增加前面音符時值的一半。音持續(xù)的長短即時值,一般用拍數(shù)表示,休止符表示暫停發(fā)音。一首音樂就是由許多不同的音符組成的,而每一個音符對應著不同的頻率,這樣就可以利用不同的頻率的組合,加以拍數(shù)對應的延時來構成不同的音樂。3.2音調脈沖和音樂節(jié)拍的實現(xiàn)3.2.1 音調脈沖的產(chǎn)生音調表示一個音符唱多高的頻率,和平時所說的“音高”十分類似。這是音樂學中的名詞,在音樂中常把中央C上方的A音定為標準音高,其頻率f=440Hz。其余音均通過和其比較獲得。如果f1和f2兩個音符的頻率相差一倍時,也即f2=2×f1時,則稱f2比f1高一個倍頻程。音符1(低音d

9、o)與音符i(中音do),等之間正好相差一個倍頻程,在音樂學中一般稱其相差一個八度音。音樂中規(guī)定,在一個八度音內(nèi),共有12個半音。以1八音區(qū)為例,這12個半音分別是:11、12、22、23、34、44,45、55、56、66、67、7i。由于人耳的聽覺效果是非線性的,因此這12個音階的分度基本上是以對數(shù)關系來劃分的。要讓單片機產(chǎn)生音頻脈沖,只要計算出某一音頻的周期,將此周期除以2得到半周期,利用定時器對此半周期進行定時,每當定時時間到,將P1.7口線上的電平取反,從而得到所需要的音頻脈沖。產(chǎn)生音頻的定時器初值計算公式如下:式中,k根據(jù)單片機工作方式確定,可為13(方式0)、16(方式1)、8(

10、方式2), fosc為單片機工作頻率, 為希望產(chǎn)生的音頻。例如中音DO的頻率為523Hz,若單片機的工作頻率為12MHz,定時器T0設置為工作方式1,按以上公式計算得定時器初值為64580;高音DO的頻率為1047Hz,計算定時器初值為65058。3.2.2音樂節(jié)拍的產(chǎn)生節(jié)拍表示一個音符唱多長的時間,同樣是音樂學中的名詞。在一張完整樂譜的開頭,都有如1=C 、1=G 等的標識。例如圖3-2所示為1=C 的節(jié)拍示意圖。這里的、用來表示節(jié)拍,而1=C、1=G表示一個樂譜的曲調,簡單地說就是跟音調有關系。圖3-2 節(jié)拍示意圖可以通過延時程序來產(chǎn)生不同的節(jié)拍。如果1拍為0.4秒,則1/4為0.1秒,只

11、要設定延時時間就可以求得節(jié)拍時間。例如一段延時程序Delay為1/4拍,則一拍只要調用4次Delay程序,依此類推。3.2.3音符碼表的編制編寫一段音樂的音符碼表時,先把樂譜的音符找出,按表3-1建立對應的音調碼碼及定時器初值表,按表3-2建立節(jié)拍碼表。每個音符使用1個字節(jié),字節(jié)的高4位存放音符的音調碼,低4位存放音符的節(jié)拍碼。表3-1 與音符對應的音調碼表和定時器初值表(fosc=12MHz)簡譜發(fā)聲音調碼定時器初值5低音SO1FB046低音LA2FB907低音SI3FC091中音DO4FC442中音RE5FCAC3中音ME6FD094中音FA7FD345中音SO8FD826中音LA9FDC

12、87中音SIAFE061高音DOBFE222高音RECFE563高音MEDFE854高音FAEFE9A5高音SOFFEC1不發(fā)音0用C語言將音調碼表和定時器初值表表示出來即為:uchar code TABLE = /音符對應的定時器初值表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

13、拍51又1/4拍61又2/4拍82拍A2又2/4拍C3拍F3又3/4拍按照上述原理可以編寫出“Amazing Grace”樂曲的音符碼表。“Amazing Grace”的簡譜如下:5.|1 - 31 |3- 2| 1 - 6. |5.- 5.|1-31|3-2|5-|5-|3 |5·3 53|1-5.| 6·1 16.|5.-5.|1-31|3-2|1-|1-|對應的音符碼表為:uchar code GRACE = /奇異恩典音符碼表 0x14,0x48,0x62,0x42,0x68,0x54,0x48,0x24,0x18,0x14,0x48,0x62,0x42,0x68,

14、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ā)聲模塊程序設計如圖3-4所示為發(fā)聲模塊程序流程圖。開始是否為結束碼Y取音調碼和節(jié)拍碼 N音調碼是否為0NY停止T0計算T0初值,裝載,啟動T0延時音符碼變量+1結束圖3-4 發(fā)聲模塊程序流程圖3.5按鍵模塊程序設計本設計中采用4個按鍵來控制

15、音樂的播放:Key0 控制上一曲播放;Key1開始播放;Key2控制下一曲播放;Key3暫停播放。主程序中放置了3首歌曲,分別是"Amazing Grace" ;"Ode To Joy" ;"Happy Birthday"。進入主程序后,判斷開始鍵是否按下,若按下,則按順序循環(huán)播放這3首歌曲。開始播放后,通過控制4個按鍵來控制歌曲的播放。圖3-5為按鍵模塊程序流程圖上一曲N下一曲N暫停Y停止T0YYN開始 N歌曲號1歌曲號+1啟動T0Y音樂播放圖3-5 按鍵模塊程序流程圖四、硬件電路設計硬件電路主要由 AT89C52 單片機、三極管音

16、頻功放電路(圖中為理想原件,有三極管的音頻放大可以增加聲音效果)和蜂鳴器部分組成,電路結構比較簡單。仿真圖如下圖所示:4.1 主要器件4.1.1 微處理器AT89C52的功能全部兼容MCS-51,并且還有程序加密等功能,相對而言更加實用。AT89C52單片機是美國ATMEL公司生產(chǎn)的低電壓,高性能CMOS 8位微控制器,片內(nèi)含8KB的可反復擦寫的只讀程序存儲器和256字節(jié)的隨機存取存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術生產(chǎn),與標準MCS-51指令系統(tǒng)及805日1產(chǎn)品引腳兼容,片內(nèi)置通用8位中央處理器(CPU)和Flash存儲單元,其強大的功能更適合較為復雜的控制應用場合。其主

17、要工作特性是:片內(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)先權的結構;串行口是具有一個全雙工的可編程串行通信口;具有一個數(shù)據(jù)指針DPTR;低功耗工作模式有空閑模式和掉電模式;具有可編程的3級程序鎖定位;AT89C52工作電源電壓為5(1±0.2)V,且典型值為5V;AT89C52最高工作頻率為24MHZ。下圖為AT89C51單片機的實物圖與引腳圖: 圖4-2 AT89C52單片機的實物圖與引腳圖引腳功能描述如下:P0口:8位

18、、漏極開路的雙向I/O口。當使用片外存儲器及外擴I/O口時,P0口作為低字節(jié)地址/數(shù)據(jù)復用線。在編程時,P0口可用于接收指令代碼字節(jié);在校驗時,P0口可輸出指令字節(jié)(須外加上拉電阻)。P0口也可做通用I/O口使用,但需加上拉電阻,變?yōu)闇孰p向口。當作為普通輸入時,應將輸出鎖存器置1。P0口可驅動8個TTL負載。P1口:8位、準雙向I/O口,具有內(nèi)部上拉電阻。P1口是為用戶準備的I/O口雙向口。在編程和校驗時,可用做輸入低8位地址。用做輸入時,應先將輸出鎖存器置1。P1口可驅動4個TTL負載。P2口:8位、準雙向I/O口,具有內(nèi)部上拉電阻。當使用片外存儲器或外擴I/O口時,P2口輸出高8位地址。在

19、編程/校驗時,P2口可接收高字節(jié)地址和某些控制信號。P2口也可做普通I/O口使用。用做輸入時,應先將輸出鎖存器置1。P1口可驅動4個TTL負載。P3口:8位、準雙向I/O口,具有內(nèi)部上拉電阻。P3口可做普通I/O口使用。用作輸入時,應先將輸出鎖存器置1。在編程/校驗時,P3口接收某些控制信號。它可驅動4個TTL負載。RST:復位輸入。晶振工作時,RST腳持續(xù)2個機器周期高電平將使單片機復位??撮T狗計時完成后,RST 腳輸出 96 個晶振周期的高電平。特殊寄存器 AUXR(地址 8EH)上的 DISRTO位可以使此功能無效。DISRTO默認狀態(tài)下,復位高電平有效。ALE/PROG:地址鎖存控制信

20、號(ALE)是訪問外部程序存儲器時,鎖存低 8 位地址的輸出脈沖。在flash編程時,此引腳(PROG)也用作編程輸入脈沖。在一般情況下,ALE以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時器或時鐘使用。然而,特別強調,在每次訪問外部數(shù)據(jù)存儲器時,ALE脈沖將會跳過。如果需要,通過將地址為8EH的SFR的第0位置“1”,ALE操作將無效。這一位置 “1”,ALE僅在執(zhí)行MOVX或MOVC指令時有效。否則,ALE 將被微弱拉高。這個ALE使能標志位(地址為8EH的SFR的第0位)的設置對微控制器處于外部執(zhí)行模式下無效。PSEN:外部程序存儲器選通信號(PSEN)是外部程序存儲器選通信號。當

21、 AT89S52從外部程序存儲器執(zhí)行外部代碼時,PSEN在每個機器周期被激活兩次,而在訪問外部數(shù)據(jù)存儲器時,PSEN將不被激活。EA/VPP:訪問外部程序存儲器控制信號。為使能從0000H到FFFFH的外部程序存儲器讀取指令,EA必須接GND。為了執(zhí)行內(nèi)部程序指令,EA應該接 VCC。在flash編程期間,EA也接收12伏VPP電壓。XTAL1:振蕩器反相放大器和內(nèi)部時鐘發(fā)生電路的輸入端。XTAL2:振蕩器反相放大器的輸出端。 4.1.2開關元件獨立按鍵是51單片機應用系統(tǒng)中最常用的人機交互通道之一,它通常用于給用戶提供向51單片機輸入信息的通道。獨立按鍵的基本工作原理是:按鍵按下時接通兩個點

22、,放開時則斷開這兩個點。按照結構可以把按鍵分為兩類:觸點式開關按鍵,如機械式開關、導電橡膠式開關等;無觸點式開關按鍵,如電氣式按鍵,磁感應按鍵等。本設計的控制電路采用4個獨立按鍵,如圖4.1.2所示。從左至右:Key0與P1.0口相連,播放上一曲;Key1與P1.1口相連,開始播放;Key2與P1.2口相連,播放下一曲;Key3與P1.3口相連,暫停播放。當按鍵按下時,接口接收到低電平,從而實現(xiàn)對音樂器的控制。圖4.1.2 控制電路4.2 發(fā)聲驅動電路蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,廣泛應用于計算機、打印機、報警器、電子玩具、汽車電子設備、電話機、定時器等電子產(chǎn)品中作發(fā)聲

23、器件。圖2-4所示為蜂鳴器實物圖。圖2-4 蜂鳴器實物圖蜂鳴器按其結構主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。多諧振蕩器由晶體管或集成電路構成。當接通電源后(1.515V直流工作電壓),多諧振蕩器起振,輸出1.52.5kHZ的音頻信號,阻抗匹配器推動壓電蜂鳴片發(fā)聲。壓電蜂鳴片由鋯鈦酸鉛或鈮鎂酸鉛壓電陶瓷材料制成。在陶瓷片的兩面鍍上銀電極,經(jīng)極化和老化處理后,再與黃銅片或不銹鋼片粘在一起。電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號電流通過電磁線圈,使電磁線圈產(chǎn)生磁場。振

24、動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發(fā)聲。蜂鳴器按其是否帶有信號源又分為有源和無源兩種類型。有源蜂鳴器只需要在其供電端加上額定直流電壓,其內(nèi)部的震蕩器就可以產(chǎn)生固定頻率的信號,驅動蜂鳴器發(fā)出聲音。無源蜂鳴器可以理解成與喇叭一樣,需要在其供電端上加上高低不斷變化的電信號才可以驅動發(fā)出聲音。用單片機控制蜂鳴器發(fā)出不同頻率的聲音,最好采用無源的蜂鳴器,如果用有源蜂鳴器,可以會因為二種不同頻率聲音(有源蜂鳴器本身固有發(fā)音頻率與單片機驅動頻率)互相疊加,造成效果混亂、發(fā)音不清。4.3電路工作原理當按下按鍵,P1.0口輸出音樂脈沖,脈沖信號首先經(jīng)過由電容C1和 C2組成的回路輸入到單片機XTA

25、L1 XTAL2.輸入信號經(jīng)過晶振處后,從 Vout 輸出,送入到P0.0腳。并且串聯(lián)一個限流電阻R2,用以保護蜂鳴器的正常工作。經(jīng)過此電路后,單片機發(fā)出的不同頻率的音頻信號就可以通過蜂鳴器發(fā)出想要的歌曲。五、軟件設計軟件設計是指在硬件電路的基礎上,以程序的形式實現(xiàn)算法,進而實現(xiàn)音樂播放器的功能。軟件是整個控制系統(tǒng)設計的核心,采用模塊化設計,具有充分的靈活性,在硬件結構不變的情況下,只需要改變軟件就能實現(xiàn)一些不同的功能,滿足用戶多樣性需求。本系統(tǒng)采用模塊化的編程思想,把整個軟件系統(tǒng)化分為多個功能模塊,主程序通過調用各個子程序來完成各個功能的實現(xiàn)。軟件的程序主要由主程序、發(fā)聲模塊程序、控制模塊程

26、序、LCD1602顯示程序組成。本設計使用Keil Vison3軟件完成程序的編寫和調試。5.1軟件開發(fā)平臺Keil Vison系列是德國Keil Software公司推出的51系列兼容單片機軟件開發(fā)系統(tǒng)。Vison3是集成的可視化Windows操作界面,其提供了豐富的庫函數(shù)和各種編譯工具,能夠對51系列單片機以及和51系列兼容的絕大部分類型的單片機進行設計。Keil Vison系列可以支持單片機C51程序設計語言,也可以直接進行匯編語言的設計與編譯。目前,Keil公司已經(jīng)被ARM公司收購,成為ARM旗下的產(chǎn)品。Keil Vison系列的集成開發(fā)環(huán)境最高版本是Vison3,版本號為V8.08。

27、Keil Vison系列是一個非常優(yōu)秀的編譯器,受到廣大單片機設計者的廣泛使用。其主要特點如有:支持匯編語言、C51語言等多種單片機設計語言;可視化的文件管理,界面友好;支持豐富的產(chǎn)品線,除了51及其兼容內(nèi)核的單片機外,還新增加了對ARM內(nèi)核產(chǎn)品的支持;具有完善的編譯連接工具;具備豐富的仿真調試功能,可以仿真串口、并口、A/D、D/A、定時器/計數(shù)器以及中斷等資源,同時也可以和外部仿真器聯(lián)合進行在線調試;內(nèi)嵌RTX-51實時多任務操作系統(tǒng);支持在一個工作空間中進行多項目的程序設計。支持多級代碼優(yōu)化。5.2詳細的程序設計詳細的程序設計如下:#include<reg52.h>#incl

28、ude<intrins.h>#define uchar unsigned char#define uint unsigned intsbit SPEAK=P17; /定義蜂鳴器輸出端口sbit Key0=P10; /定義獨立按鍵sbit Key1=P11;sbit Key2=P12;sbit Key3=P13;sbit RS=P20; /定義控制引腳sbit RW=P21;sbit E=P22;uchar beat,tl,th; /定義節(jié)拍和T0初值變量uchar code TABLE= /音符對應的定時器初值表0xfb,0x04,0xfb,0x90,0xfc,0x09,0xfc,

29、0x44,0xfc,0xac,0xfd,0x09,0xfd,0x34,0xfd,0x82,0xfd,0xc8,0xfe,0x06,0xfe,0x22,0xfe,0x56,0xfe,0x85,0xfe,0x9a,0xfe,0xc1;uchar code GRACE= /奇異恩典音符碼表 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,0x

30、62,0x42,0x68,0x54,0x4c,0x48,0x00;uchar code JOY= /歡樂頌音符碼表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,0x6

31、4,0x74,0x84,0x84,0x74,0x64,0x54,0x44,0x44,0x54,0x64,0x56,0x42,0x48,0x00;uchar code HAPPY= /生日快樂音符碼表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,0

32、x82,0x01,0x81,0x94,0x84,0xC4,0xB4,0x04,0x82,0x01,0x81,0xF4,0xD4,0xB4,0xA4,0x94,0xE2,0x01,0xE1,0xD4,0xB4,0xC4,0xB4,0x04,0x00;uchar code GRACE_Name="Amazing Grace "uchar code JOY_Name="Ode To Joy "uchar code HAPPY_Name="Happy Birthday "void Timer0_Initialize();void Delay_

33、1ms(uchar ms);void Delay(uchar);void Key_Scan(char *numz,uchar *kz);uchar Busy_Check();void LCD_Write_Command(uchar cmd);void LCD_Initialize();void Show_String(uchar x,uchar y,uchar *str);void main()uchar m,m1,k=0; /定義臨時變量char num=0;char *numz;uchar *kz;uchar *p3;uchar *q3;numz=&num;kz=&k;p0

34、=GRACE;p1=JOY;p2=HAPPY;q0=GRACE_Name;q1=JOY_Name;q2=HAPPY_Name;Timer0_Initialize();LCD_Initialize();while(Key1);Delay_1ms(5);while(Key1); while(1)while(*(pnum+k)!=0) /判斷取得的音符碼是否為結束碼beat=*(pnum+k)&0x0f;/取節(jié)拍碼m=_crol_(*(pnum+k),4)&0x0f;/取音調碼if(m!=0)/判斷取得的音調碼是否為0/不是,根據(jù)取得的音調碼計算T0初值m1=-m*2+1;m=m*2

35、;tl=TL0=TABLEm1;th=TH0=TABLEm;TR0=1;/啟動T0else/取得的音符碼為0,則停止T0TR0=0;Delay(beat);k+;Show_String(0,0,qnum);Show_String(0,1,qnum+16);Key_Scan(numz,kz);num+;if(num>2)num=0;k=0;/* T0初始化函數(shù) */void Timer0_Initialize()TMOD=0x01;IE=0x82;/* T0中斷服務函數(shù) */void timer0() interrupt 1 using 1 TL0=tl;TH0=th; /重裝定時初值 S

36、PEAK=SPEAK; /蜂鳴器控制端口電平取反/* 四分之一拍延時函數(shù) */void Delay_Beat()uint i;for(i=0;i<20000;i+);/* 節(jié)拍延時函數(shù) */void Delay(uchar tt)uchar i;for(i=0;i<tt;i+) Delay_Beat();/*1ms延時函數(shù) */void Delay_1ms(uchar ms)int i;while(ms-)for(i=125;i>0;i-);/*按鍵掃描函數(shù)*/void Key_Scan(char *numz,uchar *kz)bit flag;if(!Key0)Delay

37、_1ms(5);if(!Key0)(*numz)-;if(*numz<0)*numz=2;*kz=0; else if(!Key2)Delay_1ms(5);if(!Key2)(*numz)+;if(*numz>2)*numz=0;*kz=0;else if(!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ù)*/uchar Busy_Check()uc

38、har LCD_Status;RS=0;RW=1;E=1;Delay_1ms(1); /為什么延時1ms呢?LCD_Status=P0;E=0;return LCD_Status;/*向1602寫入命令函數(shù)*/void LCD_Write_Command(uchar cmd) 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ù)*/void LCD_Write_Data(uchar dat)while(Busy_Check()&0x80)=0x80);RS=1;RW=0;E=0;P0=dat;E=1;Delay_1ms(1);E=0;/*初始化1602液晶函數(shù)*/void LCD_Initialize()LCD_Write_Command(0x38); /設置1602液晶功能,8位數(shù)據(jù)接口, /兩行顯示,5*10點陣字符 Delay_1ms(1);LCD_Write_Command(0x01); /清屏Delay_1ms(1);LCD_Write_Co

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論