2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  單片機技術(shù)課程設(shè)計報告</p><p>  課題名稱 電子音樂盒的設(shè)計 </p><p>  專業(yè)班級 xxxxxxxxxx </p><p>  學(xué) 號 xxxxxxxxx </p><p>  學(xué)生姓名

2、 xxxx </p><p>  指導(dǎo)教師 xxxxxx </p><p>  評 分 </p><p>  20xx年x月xx日至x月xx日</p><p><b>  答辯記錄</b></p>

3、<p>  1、例舉設(shè)計過程中遇到的問題及其解決方法(至少兩例)。</p><p>  答:(1)問題說明:</p><p><b>  解決方法:</b></p><p><b> ?。?)問題說明:</b></p><p><b>  解決方法:</b><

4、;/p><p>  2、教師現(xiàn)場提的問題記錄在此(不少于2個問題)。</p><p><b>  答:</b></p><p><b>  摘 要</b></p><p>  本設(shè)計是基于單片機的數(shù)字音樂盒設(shè)計,該音樂盒通過控制單片機內(nèi)部的定時器來產(chǎn)生不同頻率的方波,驅(qū)動喇叭發(fā)出不同音調(diào)的音樂,再

5、用Protel99來畫系統(tǒng)硬件圖,采用匯編語言進行編程,編程后利用KEIL C51來進行編譯,再生成的HEX文件裝入芯片中,采用proteus軟件來仿真,檢驗功能得以正常實現(xiàn)從而設(shè)計出數(shù)字音樂盒。</p><p>  選用單片機AT89C51來設(shè)計制作是由于其功能的實現(xiàn)主要通過軟件編程來完成,降低了硬件電路的復(fù)雜性,而且其成本也有所降低。芯片AT89C51是低功耗、高性能的CMOS型8位單片機。片內(nèi)帶有4KB的F

6、lash存儲器,且允許在系統(tǒng)內(nèi)改寫或用編程器編程。另外, AT89C51的指令系統(tǒng)和引腳與8051完全兼容,片內(nèi)有128B 的RAM、32條I/O口線、2個16位定時計數(shù)器、5個中斷源、一個全雙工串行口等。</p><p>  該音樂盒的設(shè)計可以通過按鍵選擇不同的曲目播放,并通過LCD顯示歌曲號及播放時間。音樂盒主要由五大模塊構(gòu)成,包括AT89C51芯片、按鈕、蜂鳴器、晶振電路和液晶顯示器。有3個歌曲選擇鍵供用戶

7、按照自己的喜好選擇音樂,該軟、硬件系統(tǒng)具有很好的通用性,很高的實際使用價值。</p><p>  關(guān)鍵詞:數(shù)字音樂盒; AT89C51; Proteus; KEIL; 匯編語言</p><p><b>  目 錄</b></p><p><b>  1 設(shè)計任務(wù)1</b></p><p><

8、;b>  2設(shè)計方案1</b></p><p><b>  2.1任務(wù)分析1</b></p><p><b>  2.2方案設(shè)計1</b></p><p>  3 系統(tǒng)硬件設(shè)計3</p><p>  3.1 AT89C51單片機簡介3</p><p&g

9、t;  3.2 晶振電路4</p><p>  3.3 按鍵電路4</p><p>  3.4 LCD顯示電路4</p><p><b>  3.5 蜂鳴器5</b></p><p>  4 系統(tǒng)軟件設(shè)計5</p><p>  4.1外部中斷源系統(tǒng)設(shè)計5</p><

10、p>  4.2音頻發(fā)生原理6</p><p>  4.3顯示模塊設(shè)計7</p><p>  5仿真與性能分析8</p><p>  5.1 系統(tǒng)仿真過程 8</p><p>  5.2 仿真分析

11、 9 </p><p><b>  6設(shè)計小結(jié)10</b></p><p><b>  參考文獻11</b></p><p>  附錄1

12、 系統(tǒng)原理圖12</p><p>  附錄2 系統(tǒng)PCB圖13</p><p>  附錄3 程序清單14</p><p><b>  1 設(shè)計任務(wù)</b></p><p>  利用單片機設(shè)計一款簡單實用的電子音樂盒。</p><p><b>  1. 基本要求</b>&

13、lt;/p><p> ?。?)查閱資料,了解單片機控制單音喇叭發(fā)聲原理; </p><p>  (2)設(shè)計基于單片機的電子音樂盒; </p><p>  (3)通過按鈕可選擇不同的音樂;。</p><p><b>  2. 選做</b></p><p> ?。?)采用LCD顯示信息。</p>

14、;<p>  (2)開機時有英文歡迎提示字符,播放時顯示歌曲序號(或名稱)。</p><p> ?。?)可通過功能鍵選擇樂曲播放。</p><p><b>  2設(shè)計方案</b></p><p><b>  2.1任務(wù)分析</b></p><p>  本程序主要利用AT89C51芯片,

15、通過它來產(chǎn)生一定頻率的音頻脈沖信號來實現(xiàn)課程設(shè)計的基本要求和附加功能,并可以通過按鍵播放3首歌曲。</p><p><b>  2.2方案設(shè)計</b></p><p><b>  1.硬件方案</b></p><p><b>  圖1.硬件原理框圖</b></p><p>  

16、AT89C51是一種帶4K字節(jié)閃存可編程可擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS 8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復(fù)擦除100次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由

17、于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C51單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。</p><p> ?。?)用P3.0--P3.2控制按鍵。</p><p>  (3)用P3.5,P3.6,P3.3作為LCD的RS,R/W,E的控制信號。用P1.0--P1.7作為&

18、lt;/p><p>  LCD的D0--D7的控制信號。</p><p> ?。?)用P3.7口控制蜂鳴器。</p><p> ?。?)電路為12MHZ晶振頻率工作,起振電路中C1,C2均為22pf,接在XTAL1和</p><p><b>  XTAL2間。</b></p><p><b>

19、;  軟件方案</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  圖2.主程序流程圖</b></p><p><b>  3 系統(tǒng)硬件設(shè)計</b></p><

20、p>  3.1 AT89C51單片機簡介</p><p><b>  引腳功能:</b></p><p>  P0.0-P0.7:為一個8位漏級開路雙向I/O口;</p><p>  P1.0-P1.7:是一個內(nèi)部提供上拉電阻的8位雙向I/O口;</p><p>  P2.0-P2.7:為一個內(nèi)部上拉電阻的8位雙向

21、I/O口;</p><p>  P3.0-P3.7:管腳是8個帶內(nèi)部上拉電阻的雙向I/O口;</p><p>  P3.0:RXD(串行輸入口);</p><p>  P3.1:TXD(串行輸出口);</p><p>  P3.2:INT0(外部中斷0);</p><p>  P3.3:INT1(外部中斷1);<

22、/p><p>  P3.4:T0(記時器0外部輸入);</p><p>  P3.6:WR(外部數(shù)據(jù)存儲器寫選通);</p><p>  P3.7:RD(外部數(shù)據(jù)存儲器讀選通);</p><p>  EA:當(dāng)EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管</p><p>  是否有內(nèi)部程序存儲器

23、。注意加密方式1時,EA將內(nèi)部鎖定為RESET;當(dāng)</p><p>  EA端保持高電平時,此間內(nèi)部程序存儲器;</p><p>  P3.5:T1(記時器1外部輸入);</p><p>  ALE:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié);</p><p>  PSEN:外部程序存儲器的選通信號;</p>

24、<p><b>  RST:復(fù)位輸入;</b></p><p>  XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入;</p><p>  XTAL2:來自反向振蕩器的輸出。</p><p><b>  3.2 晶振電路</b></p><p>  晶振電路采用12MHZ的晶振

25、頻率工作,取起振電路中C1,C2均為22pf。它們分別接在晶振的兩個腳上和對地的電容,會影響到晶振的諧振頻率和輸出幅度。晶體旁邊的兩個電容接地, 實際上就是電容三點式電路的分壓電容, 接地點就是分壓點. 以接地點即分壓點為參考點, 振蕩引腳的輸入和輸出是反相的, 但從并聯(lián)諧振回路即石英晶體兩端來看, 形成一個正反饋以保證電路持續(xù)振蕩。</p><p><b>  C1</b></p&g

26、t;<p><b>  XTAL1</b></p><p><b>  C2</b></p><p><b>  XTAL2</b></p><p><b>  3.3 按鍵電路</b></p><p>  采用三個按鈕,分別用于選擇播放三首

27、歌。</p><p>  3.4 LCD顯示電路</p><p>  LCD顯示模塊采用14引腳的LM032L芯片,它有八個數(shù)據(jù)端口,三個控制口。當(dāng)控制口R/W為低電平時,單片機向LCD寫入指令,當(dāng)其為高電平時,單片機讀取LCD的信息。單片機的P3.5,P3.6,P3.3分別作為LCD的RS,R/W,E的控制信號。用P1.0~P1.7作為LCD的D0~D7的控制信號。用LCD來顯示開機歡迎

28、字符及播放歌曲信息。 </p><p><b>  3.5 蜂鳴器</b></p><p>  蜂鳴器發(fā)聲原理是電流通過電磁線圈,</p><p>  使電磁線圈產(chǎn)生磁場來驅(qū)動振動膜發(fā)聲的。</p><p><b>  4 系統(tǒng)軟件設(shè)計</b></p><p>

29、  4.1 外部中斷源系統(tǒng)設(shè)計</p><p>  在本設(shè)計中中斷源是采用外部中斷0方式,其入口地址是0003H。其中斷響應(yīng)級別最高。</p><p> ?。?)定時器/計數(shù)器</p><p>  工作方式寄存器TMOD用于選擇定時器/計數(shù)器的工作方式和工作模式。</p><p><b>  門控位—GATE</b>&l

30、t;/p><p>  工作方式選擇位—M1、M0</p><p>  —計數(shù)器模式和定時器模式選擇位</p><p>  =0,為定時器模式。</p><p><b>  =1,為計數(shù)模式。</b></p><p>  本設(shè)計中采用方式1的16位定時器/計數(shù)器。</p><p>

31、;  定時器/計數(shù)器控制寄存器TCON,其格式如下:</p><p>  TF1、TF0—計數(shù)溢出標(biāo)志位當(dāng)計數(shù)器溢出時,該位置1。</p><p>  TR1、TR0—計數(shù)運行控制位</p><p>  4.2 音頻發(fā)生原理</p><p>  要生產(chǎn)音頻脈沖,只要算出某一音頻的周期(1/頻率),然后將此周期除以2,</p>&

32、lt;p>  即為半周期的時間。利用定時器計時這個半周期時間,每當(dāng)計時到后就將輸 </p><p>  出脈沖的I/O反相,然后重復(fù)計時此半周期時間再對I/O反相,就可在I/O</p><p>  腳上得到此頻率的脈沖。</p><p>  利用8051的內(nèi)部定時器使用其工作在計數(shù)器模式MODE1下,改變計數(shù)值THO </p><p>

33、  及TLO以產(chǎn)生不同頻率的方法。</p><p>  例如頻率為523Hz,其周期T=1/523=1912us,因此只要令計數(shù)器計時</p><p>  956us/1us=956,在每次計數(shù)956次時將I/O反相,就可得到中音DO</p><p><b>  (523Hz). </b></p><p>  計數(shù)脈沖值

34、與頻率的關(guān)系公式如下:</p><p>  N=Fi÷2÷Fr </p><p><b>  N: 計算值;</b></p><p>  Fi: 內(nèi)部計時一次為1us, 故其頻率為1MHz;</p><p>  其計數(shù)值的求法如下:</p><p>  T=6553

35、6-N=65536-Fi÷2÷Fr</p><p>  例如: 設(shè)K=65536, F=1000000=Fi=1MHz, 求低音DO(261Hz).中音DO </p><p>  (523Hz)。高音的DO(1046Hz)的計算值.</p><p>  T=65536-N=65536-Fi÷2÷Fr=65536-1000000

36、÷2÷Fr</p><p> ?。?5536-500000/Fr</p><p>  低音DO的 T=65536-500000/262=63627</p><p>  中音DO的 T=65536-500000/523=64580</p><p>  高音DO的 T=65536-500000/1047=65059</p

37、><p>  C調(diào)各音符頻率與計數(shù)值T的對照表如表所示。</p><p>  4.3 顯示模塊設(shè)計</p><p>  本設(shè)計選用LM016L芯片顯示。LCD液晶投影機是液晶顯示技術(shù)和投影技術(shù)相結(jié)合的產(chǎn)物,它利用了液晶的電光效應(yīng),通過電路控制液晶單元的透射率及反射率,從而產(chǎn)生不同灰度層次及多達1670萬種色彩的靚麗圖像。LCD投影機的主要成像器件是液晶板。LCD投影機的

38、體積取決于液晶板的大小,液晶板越小,投影機的體積也就越小。</p><p>  LM016L液晶模塊采用HD44780控制器。HD44780具有簡單而功能較強的指令集,可以實現(xiàn)字符移動、閃爍等功能。LM016L與單片機MCU(Microcontroller Unit)通訊可采用8位或者4位并行傳輸兩種方式。HD44780控制器由兩個 8位寄存器、指令寄存器( IR)和數(shù)據(jù)寄存器(DR)、忙標(biāo)志(BF)、顯示數(shù)據(jù)

39、RAM(DDRAM)、字符發(fā)生器ROM(CGROM)、字符發(fā)生器 RAM(CGRAM)、地址計數(shù)器( AC)。IR用于寄存指令碼,只能寫入不能讀出;DR用于寄存數(shù)據(jù),數(shù)據(jù)由內(nèi)部操作自動寫入 DDRAM和CGRAM,或者暫存從DDRAM和CGRAM讀出的數(shù)據(jù)。BF為 1時,液晶模塊處于內(nèi)部處理模式,不響應(yīng)外部操作指令和接受數(shù)據(jù)。DDRAM用來存儲顯示的字符,能存儲 80個字符碼。 </p><p><b>

40、;  5 仿真與性能分析</b></p><p>  5.1 系統(tǒng)仿真過程</p><p>  按照上面設(shè)計的電路在proteus軟件內(nèi)畫圖,選擇需要的芯片及參數(shù),按照原理圖畫出仿真圖,打開單片機軟件開發(fā)系統(tǒng)Keil,選擇89C51單片機,在其中編寫程序(源程序見附錄),運行生成一個后綴名為hex的文件,然后將該文件下載到proteus中的AT89C51單片機中進行仿真,觀察實

41、驗現(xiàn)象。仿真能實現(xiàn)播放音樂,按鍵選擇曲目的功能。</p><p><b>  仿真原理圖:</b></p><p><b>  運行界面:</b></p><p><b>  5.2 仿真分析</b></p><p>  現(xiàn)象結(jié)果:當(dāng)按下按鈕后LCD上會顯示歡迎字符且其所對應(yīng)的

42、歌曲能正常播放。</p><p>  程序調(diào)試中出現(xiàn)的問題及解決的辦法:</p><p> ?。?)有時編寫的程序沒有錯誤,卻在電腦輸入時沒有按照規(guī)范的格式,以致程序無法正常運行,這浪費了很多時間,所以還是得注重細節(jié);</p><p> ?。?)在檢查錯誤時,大篇的程序感覺無從下手,在平時編程的時候就得注意在關(guān)鍵的地方留下注釋,以便以后的檢驗和修改;</p&g

43、t;<p> ?。?)流程圖對編程來說很重要,能使思路清晰;</p><p>  (4)設(shè)計原理圖時經(jīng)常會用到自己平時都沒接觸過的芯片,所以要上網(wǎng)查找資料,了解其原理才方便設(shè)計。</p><p>  (5)在播放歌曲時LCD無法顯示歌曲信息和播放時間。這個問題無論怎么修改編程依舊無法解決。</p><p><b>  設(shè)計小結(jié)</b&g

44、t;</p><p>  由于是上學(xué)期學(xué)的單片機知識,而這學(xué)期來做課程設(shè)計,中間相隔很長一段時間,以至于剛拿到這個課題無所適從。于是又把課本和筆記拿出來溫習(xí)一遍,網(wǎng)上查找了些相關(guān)資料,才有了點設(shè)計的概念和頭緒。這次的課程設(shè)計為期一周,感覺時間有點緊迫,所以只是在完成基本要求的基礎(chǔ)上稍稍有點拓展。本次課程設(shè)計使我第一次真正意義上用自己的專業(yè)知識和技能來設(shè)計一個完整的作品,這使得我得到了很大的鍛煉和提高,雖說這過程非

45、常的難熬,花費了很多的時間,但看到自己的勞動得到了成果就覺得值得了。</p><p>  在這次設(shè)計中,我完成了一個基于單片機的數(shù)字音樂盒設(shè)計,盡管結(jié)果并算不上完美,但是我努力了,獲得了豐富的知識,完善了大學(xué)三年中理論與實踐相結(jié)合的學(xué)習(xí)。我從資料的收集中,掌握了很多單片機的知識,讓我對我所學(xué)過的知識有所鞏固和提高,在遇到困難時虛心請教同學(xué),和同學(xué)的討論也使我受益匪淺,拓寬了設(shè)計思路,可以說音樂盒的完成少不了同學(xué)的

46、幫助和支持。在仿真過程中我大致學(xué)會了proteus和keil軟件的應(yīng)用,雖說算不上精通,但也會基本的操作和運行,這也為日后從事這方面的工作打下了一個良好的基礎(chǔ)。單片機是一個需要細心的學(xué)科,在本次課程設(shè)計中,很多次都是因為自己的不細心才導(dǎo)致走了許多彎路,浪費了很多時間,這是我明白什么才是細節(jié)決定成敗。</p><p>  雖說設(shè)計的過程是很糾結(jié)很痛苦的,但我相信只要度過了這個過程,我的知識和經(jīng)驗終將上升一個臺階,我

47、想這也就是我們以后邁入社會所擁有的最寶貴的東西了吧!</p><p><b>  參考文獻</b></p><p>  [1] 秦實宏,徐春輝.MCS-51單片機原理及應(yīng)用[M].武漢:華中科技大學(xué)出版社,2010.6</p><p>  [2] 杜樹春.基于Proteus和Keil C51的單片機設(shè)計與仿真.北京:電子工業(yè)出版社,2012&l

48、t;/p><p>  [3] 譚浩強.C程序設(shè)計.第三版,北京:清華大學(xué)出版社,2005:105</p><p>  [4] 張毅剛.單片機原理及應(yīng)用[M].北京:高等教育出版社,2008.</p><p>  [5] 周堅.單片機C語言輕松入門[M].北京:北京航空航天大學(xué)出版社,2006.</p><p><b>  附錄1 系統(tǒng)原

49、理圖</b></p><p>  附錄2 系統(tǒng)PCB圖</p><p><b>  附錄3 程序清單</b></p><p>  #include <REG52.H></p><p>  #include "Soundplay.h"//頭文件見后</p>&l

50、t;p>  int z,flag;</p><p>  unsigned char code word1[]={"Welcome to"};</p><p>  unsigned char code word2[]={"listen the music"};</p><p>  typedef unsigned cha

51、r uint8;</p><p>  sbit KeyIn1=P3^0;</p><p>  sbit KeyIn2=P3^1;</p><p>  sbit KeyIn3=P3^2;</p><p>  sbit RS = P3^5 ;</p><p>  sbit RW = P3^6 ;</p>&l

52、t;p>  sbit E = P3^3 ;</p><p>  sbit BUSY = P1^7;</p><p>  void delay(int z);</p><p>  void Key_check();</p><p>  void wait();</p><p>  void w_dat(int da

53、t);</p><p>  void w_cmd(uint8 cmd);</p><p>  void w_string(uint8 addr_start, uint8 *p);</p><p>  void Init_LCD1602(void);</p><p>  void display();</p><p> 

54、 void Delay1ms(unsigned int count)</p><p><b>  {</b></p><p>  unsigned int i,j;</p><p>  for(i=0;i<count;i++)</p><p>  for(j=0;j<120;j++);</p>

55、<p><b>  }</b></p><p>  //*****************************Music******************************************************</p><p><b>  //揮著翅膀的女孩</b></p><p>  un

56、signed char code Music_Girl[]={ </p><p>  0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x03,</p><p>  0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03,</p><p>  0x19,0x02,

57、0x16,0x03, 0x17,0x03, 0x18,0x02, 0x18,0x03,</p><p>  0x17,0x03, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0x18,0x02,</p><p>  0x10,0x03, 0x15,0x03, 0x16,0x02, 0x15,0x03, 0x16,0x03,</p><p>  

58、0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x1A,0x03,</p><p>  0x1B,0x03, 0x1F,0x03, 0x1F,0x03, 0x17,0x03, 0x18,0x03,</p><p>  0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03,</p>

59、<p>  0x18,0x03, 0x1F,0x03, 0x1F,0x02, 0x16,0x03, 0x17,0x03,</p><p>  0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02,</p><p>  0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,&

60、lt;/p><p>  0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03,</p><p>  0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,</p><p>  0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03,

61、0x17,0x03,</p><p>  0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03,</p><p>  0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,</p><p>  0x20,0x03, 0x1F,0x03, 0x1B,0x03,

62、0x1F,0x66, 0x1F,0x03,</p><p>  0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,</p><p>  0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,</p><p>  0x1F,0x00, 0x1A,0x03,

63、0x1A,0x03, 0x1A,0x03, 0x1B,0x03,</p><p>  0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x19,0x02, 0x17,0x03,</p><p>  0x15,0x17, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x18,0x03,</p><p>  0x17,0x04,

64、0x18,0x0E, 0x18,0x03, 0x17,0x04, 0x18,0x0E,</p><p>  0x18,0x66, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03,</p><p>  0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66,</p><p>  

65、0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03,</p><p>  0x1F,0x66, 0x1F,0x04, 0x1B,0x0E, 0x1B,0x03, 0x19,0x03,</p><p>  0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,</p>

66、<p>  0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04,</p><p>  0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,</p><p>  0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03,&

67、lt;/p><p>  0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03,</p><p>  0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,</p><p>  0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00,

68、0x18,0x02,</p><p>  0x18,0x03, 0x1A,0x03, 0x19,0x0D, 0x15,0x03, 0x15,0x02,</p><p>  0x18,0x66, 0x16,0x02, 0x17,0x02, 0x15,0x00, 0x00,0x00};</p><p><b>  //葫蘆娃</b></p&g

69、t;<p>  unsigned char code Music_Small[]={ </p><p>  0x83,0x63,0x51,0x61,0x03,0x81,0x61,0x51,0x81,</p><p>  0x63,0x01,0x81,0x61,0x63,0x51,</p><p>  0x63,0x01,0x61,0x81,0x61,0

70、x51,0x81,0x63,0x03,</p><p>  0x12,0x12,0x35,0x11,0x12,0x31,0x02,</p><p>  0x62,0x62,0x61,0x51,0x62,0x51,0x12,0x31,0x02,</p><p>  0x81,0x61,0x61,0x51,0x65,0x51,0x12,0x21,0x02,</p&

71、gt;<p>  0x75,0x51,0x32,0x58,</p><p>  0x81,0x01,0x61,0x61,0x51,0x51,0x62,0x61,0x01,</p><p>  0x52,0x11,0x32,0x02,0x81,0x01,0x61,0x61,0x51,0x51,0x61,0x61,0x01,0x51,0x11,</p><p&

72、gt;  0x22,0x02,</p><p>  0x35,0x11,0x62,0x18,</p><p>  0x31,0x52,0x61,0x31,0x52,0x61,</p><p>  0x85,0x01,0x71,0x52,0x65,0x02,0xff</p><p><b>  };</b></p&g

73、t;<p>  //兩只蝴蝶 </p><p>  unsigned char code Music_Two[] ={ </p><p>  0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03,

74、 </p><p>  0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, </p><p>  0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,

75、 </p><p>  0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x16,0x03, </p><p>  0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01,

76、 </p><p>  0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, </p><p>  0x16,0x03, 0x15,0x03, 0x10,0x03, 0x15,0x03, 0x16,0x01,

77、 </p><p>  0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03, </p><p>  0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,

78、 </p><p>  0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, </p><p>  0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x19,0x03,

79、</p><p>  0x19,0x01, 0x19,0x03, 0x1A,0x03, 0x19,0x03, 0x17,0x01, </p><p>  0x16,0x03, 0x16,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03,

80、</p><p>  0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0D, 0x15,0x00, </p><p>  0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03,

81、</p><p>  0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, </p><p>  0x16,0x0D, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, &l

82、t;/p><p>  0x1A,0x02, 0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, </p><p>  0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, <

83、;/p><p>  0x19,0x02, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, </p><p>  0x1B,0x04, 0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, <

84、;/p><p>  0x1B,0x04, 0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, </p><p>  0x17,0x0D, 0x16,0x03, 0x17,0x03, 0x19,0x01, 0x19,0x03, &l

85、t;/p><p>  0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03, 0x1B,0x03, </p><p>  0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x03, &l

86、t;/p><p>  0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02, </p><p>  0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x01, &l

87、t;/p><p>  0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, 0x19,0x03, </p><p>  0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, <

88、;/p><p>  0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, </p><p>  0x17,0x16, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, <

89、;/p><p>  0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, 0x0F,0x02, </p><p>  0x10,0x03, 0x15,0x00, 0x00,0x00 };</p><p>  //******************************

90、*****************************************************</p><p><b>  /**</b></p><p><b>  * 等待繁忙標(biāo)志</b></p><p><b>  */</b></p><p>  void

91、wait(void)</p><p><b>  {</b></p><p>  P1 = 0xFF;</p><p><b>  do</b></p><p><b>  {</b></p><p>  RS = 0;</p>&

92、lt;p><b>  RW = 1;</b></p><p><b>  E = 0;</b></p><p><b>  E = 1;</b></p><p>  }while (BUSY == 1);</p><p><b>  E = 0;</b&g

93、t;</p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  * 寫數(shù)據(jù)</b></p><p><b>  */</b></p><p>  void w_dat(int d

94、at)</p><p><b>  {</b></p><p><b>  wait();</b></p><p><b>  E = 0;</b></p><p><b>  P1 = dat;</b></p><p><b

95、>  RS = 1;</b></p><p><b>  RW = 0;</b></p><p><b>  E = 1;</b></p><p><b>  E = 0;</b></p><p><b>  }</b></p>

96、;<p><b>  /**</b></p><p><b>  * 寫命令</b></p><p><b>  */</b></p><p>  void w_cmd(uint8 cmd)</p><p><b>  {</b></p

97、><p><b>  wait();</b></p><p><b>  E = 0;</b></p><p><b>  P1 = cmd;</b></p><p><b>  RS = 0;</b></p><p><b>

98、;  RW = 0;</b></p><p><b>  E = 1;</b></p><p><b>  E = 0;</b></p><p><b>  }</b></p><p><b>  /**</b></p><

99、p>  * 發(fā)送字符串到LCD</p><p><b>  */</b></p><p>  void w_string(uint8 addr_start, uint8 *p)</p><p><b>  {</b></p><p>  w_cmd(addr_start);</p>

100、<p>  while (*p != '\0')</p><p><b>  {</b></p><p>  w_dat(*p++);</p><p><b>  }</b></p><p><b>  }</b></p><p

101、><b>  /**</b></p><p><b>  * 初始化1602</b></p><p><b>  */</b></p><p>  void Init_LCD1602(void)</p><p><b>  {</b></p&g

102、t;<p>  w_cmd(0x38); // 16*2顯示,5*7點陣,8位數(shù)據(jù)接口</p><p>  w_cmd(0x0c); // 顯示器開、光標(biāo)開、光標(biāo)允許閃爍</p><p>  w_cmd(0x06); // 文字不動,光標(biāo)自動右移</p><p>  w_cmd(0x01); // 清屏</p><p>

103、<b>  }</b></p><p><b>  main()</b></p><p><b>  {</b></p><p><b>  while(1)</b></p><p><b>  {</b></p>&l

104、t;p>  InitialSound();</p><p>  Key_check();//檢測按鍵</p><p>  if(flag==1)</p><p><b>  {</b></p><p>  Play(Music_Girl,0,3,360);</p><p>  delay(1

105、00);</p><p>  Key_check();</p><p><b>  }</b></p><p>  if(flag==2)</p><p><b>  {</b></p><p>  Play(Music_Small,0,3,360);</p>

106、<p>  delay(100);</p><p>  Key_check();</p><p><b>  }</b></p><p>  if(flag==3)</p><p><b>  {</b></p><p>  Play(Music_Two,0,3,3

107、60);</p><p>  //Delay1ms(500);</p><p>  delay(100);</p><p>  Key_check();</p><p><b>  }</b></p><p><b>  }</b></p><p>&

108、lt;b>  }</b></p><p>  void display()</p><p><b>  {</b></p><p><b>  RW=0;</b></p><p>  delay(500);</p><p>  Init_LCD1602();

109、</p><p>  w_string(0x80,word1);</p><p>  w_string(0xc0,word2);</p><p>  delay(1000);</p><p>  w_cmd(0x01);</p><p><b>  }</b></p><p&g

110、t;  void Key_check()//按鍵檢測子程序</p><p><b>  {</b></p><p>  if(!KeyIn1)//判斷是否有按鍵按下,按下后P3^3=0</p><p><b>  {</b></p><p>  delay(10);</p><p

111、>  if(!KeyIn1)//再判斷一次(按鍵去抖)</p><p><b>  {</b></p><p>  while(!KeyIn1);//等待松手,松開后跳出程序</p><p>  flag=1;//標(biāo)志位</p><p><b>  }</b></p><p

112、><b>  }</b></p><p>  if(!KeyIn2)</p><p><b>  {</b></p><p>  delay(10);</p><p>  if(!KeyIn2)</p><p><b>  {</b></p&

113、gt;<p>  while(!KeyIn2);</p><p><b>  flag=2;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(!KeyIn3)</p><p>

114、;<b>  {</b></p><p>  delay(10);</p><p>  if(!KeyIn3)</p><p><b>  {</b></p><p>  while(!KeyIn3);</p><p><b>  flag=3;</b>

115、</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void delay(int z) //延時子程序</p><p><b>  {</b>

116、;</p><p><b>  int x,y;</b></p><p>  for(x=z;x>0;x--)</p><p>  for(y=200;y>0;y--);</p><p><b>  }</b></p><p><b>  //頭文件:&

117、lt;/b></p><p>  #ifndef __SOUNDPLAY_H_REVISION_FIRST__</p><p>  #define __SOUNDPLAY_H_REVISION_FIRST__</p><p>  //****************************************************************

118、**********</p><p>  #define SYSTEM_OSC 12000000//定義晶振頻率12000000HZ</p><p>  #define SOUND_SPACE 4/5 //定義普通音符演奏的長度分率,//每4分音符間隔</p><p>  sbit BeepIO = P3^7;//定義輸出管腳P3^

119、7</p><p>  unsigned int code FreTab[12] = { 262,277,294,311,330,349,369,392,415,440,466,494 }; //原始頻率表</p><p>  unsigned char code SignTab[7] = { 0,2,4,5,7,9,11 }; //1~7在頻率表中的位置<

120、/p><p>  unsigned char code LengthTab[7]= { 1,2,4,8,16,32,64 };</p><p>  unsigned char Sound_Temp_TH0,Sound_Temp_TL0;//音符定時器初值暫存 </p><p>  unsigned char Sound_Temp_TH1,Sound_Tem

121、p_TL1;//音長定時器初值暫存</p><p>  //**************************************************************************</p><p>  void Key_check();</p><p>  void InitialSound(void)</p><p

122、><b>  {</b></p><p>  BeepIO = 0;</p><p>  Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256;// 計算TL1應(yīng)裝入的初值 </p><p>  Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256;

123、// 計算TH1應(yīng)裝入的初值 </p><p>  TH1 = Sound_Temp_TH1;</p><p>  TL1 = Sound_Temp_TL1;</p><p>  TMOD |= 0x11;</p><p>  ET0 = 1;</p><p>  ET1 = 0;</p>

124、<p>  TR0 = 0;</p><p>  TR1 = 0;</p><p>  EA = 1;</p><p><b>  }</b></p><p>  void BeepTimer0(void) interrupt 1</p><p><b>

125、;  {</b></p><p>  BeepIO = !BeepIO;</p><p>  TH0 = Sound_Temp_TH0;</p><p>  TL0 = Sound_Temp_TL0;</p><p><b>  }</b></p><p>  //****

126、**********************************************************************</p><p>  void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed)</p><p><b>  {&

127、lt;/b></p><p>  unsigned int NewFreTab[12];//新的頻率表</p><p>  unsigned char i,j;</p><p>  unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength;</p>

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論