畢業(yè)設(shè)計—基于stc89c52單片機的電子琴_第1頁
已閱讀1頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  基于STC89C52單片機的電子琴</p><p>  學院名稱: </p><p>  專 業(yè): </p><p>  班 級: </p><p>  姓 名: </p><p

2、>  學 號: </p><p>  指導教師: </p><p><b>  **年**月</b></p><p><b>  目錄</b></p><p><b>  摘要2</b>

3、</p><p><b>  第一章 引言3</b></p><p>  第二章 任務要求與總體設(shè)計方案3</p><p>  2.1 設(shè)計任務與要求3</p><p>  2.2 設(shè)計方案3</p><p>  2.2.1 播放模塊3</p><p>  2.2

4、.2 按鍵控制模塊4</p><p>  2.3 總體硬件組成框圖4</p><p>  三、硬件設(shè)計及說明4</p><p>  3.1系統(tǒng)組成及總體框圖4</p><p><b>  3.2元件簡介5</b></p><p>  3.2.1 STC89SC525</p>

5、<p>  3.2.2 LM3866</p><p>  3.3各功能模塊原理圖8</p><p>  3.4.1 STC89C2模塊電路原理圖8</p><p>  3.4.2鍵盤掃描模塊電路原理圖9</p><p>  3.4.3音頻處理模塊電路原理圖10</p><p><b>

6、  四、軟件設(shè)計11</b></p><p>  4.1 音樂相關(guān)知識11</p><p>  4.2如何用單片機實現(xiàn)音樂的節(jié)拍11</p><p>  4.3如何用單片機產(chǎn)生音頻脈沖12</p><p>  4.4系統(tǒng)總體功能流程圖12</p><p><b>  五、系統(tǒng)調(diào)試15&

7、lt;/b></p><p>  5.1硬件調(diào)試15</p><p>  5.2 軟件調(diào)試15</p><p>  六、課程設(shè)計總結(jié)以及心得體會15</p><p><b>  七、參考文獻16</b></p><p>  附錄1:元器件清單16</p><p&

8、gt;  附錄2:主要電路原理圖17</p><p>  附錄3:程序清單18</p><p><b>  摘  要 </b></p><p>  電子琴是現(xiàn)代電子科技與音樂結(jié)合的產(chǎn)物,是一種新型的鍵盤樂器。它在現(xiàn)代音樂扮演著重要的角色,單片機具有強大的控制功能和靈活的編程實現(xiàn)特性,它已經(jīng)溶入現(xiàn)代人們的生活中,成為不可替代的一

9、部分。本文的主要內(nèi)容是用STC89C52單片機為核心控制元件,設(shè)計一個電子琴。以單片機作為主控核心,與鍵盤、揚聲器等模塊組成核心主控制模塊,在主控模塊上設(shè)有16個按鍵和揚聲器。本系統(tǒng)運行穩(wěn)定,其優(yōu)點是硬件電路簡單,軟件功能完善,控制系統(tǒng)可靠性價比較高等,具有一定的實用和參考價值。</p><p>  關(guān)鍵詞:單片機 鍵盤揚聲器 電子琴</p><p><b>  Abstr

10、act</b></p><p>  Electronic organ is a modern electronic music technology and the product is a new type of keyboard instruments. It played an important role in modern music. SCM has powerful control fu

11、nctions and flexible programming characteristics. It has converged with modern people's lives, become an irreplaceable part. The main content is AT89S51 control of the core components, design of a electronic organ. S

12、CM as a host to the core, with the keyboard, speaker and other core modules. In the main control mod</p><p>  Key words : SCM  keyboard  speaker  electronic organ</p><p><b>

13、  引言</b></p><p>  單片微型計算機是大規(guī)模集成電路技術(shù)發(fā)展的產(chǎn)物,屬第四代電子計算機,它具有高性能、高速度、體積小、價格低廉、穩(wěn)定可靠、應用廣泛的特點。它的應用必定導致傳統(tǒng)的控制技術(shù)從根本上發(fā)生變革。因此,單片機的開發(fā)應用已成為高科技和工程領(lǐng)域的一項重大課題。</p><p>  電子琴是現(xiàn)代電子科技與音樂結(jié)合的產(chǎn)物,是一種新型的鍵盤樂器。它在現(xiàn)代音樂扮演著重

14、要的角色,單片機具有強大的控制功能和靈活的編程實現(xiàn)特性,它已經(jīng)溶入現(xiàn)代人們的生活中,成為不可替代的一部分。本文的主要內(nèi)容是用AT89S51單片機為核心控制元件,設(shè)計一個電子琴。以單片機作為主控核心,與鍵盤、揚聲器等模塊組成核心主控制模塊,在主控模塊上設(shè)有16個按鍵和揚聲器。</p><p>  本文主要對使用單片機設(shè)計簡易電子琴進行了分析,并介紹了基于單片機電子琴統(tǒng)硬件組成。利用單片機產(chǎn)生不同頻率來獲得我們要求的

15、音階,最終可隨意彈奏想要表達的音樂。并且本文分別從原理圖,主要芯片,各模塊原理及各模塊的程序的調(diào)試來詳細闡述。</p><p>  一首音樂是許多不同的音階組成的,而每個音階對應著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂了,當然對于單片機來產(chǎn)生不同的頻率非常方便,我們可以利用單片機的定時/計數(shù)器T0來產(chǎn)生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應頻率關(guān)系弄正確即可。<

16、;/p><p>  第二章 任務要求與總體設(shè)計方案</p><p>  2.1 設(shè)計任務與要求</p><p>  利用所給鍵盤的4*4十六個鍵,能夠發(fā)出16個不同的音調(diào),并用P1.7的高低電平控制功能是為按鍵還是播放存在芯片中的音樂。當接高電平時為音樂盒,接低電平時為按鍵的電子琴。當系統(tǒng)掃描到鍵盤按下,則快速檢測出是哪一個按鍵被按下,然后單片機的定時器啟動,發(fā)出一定頻

17、率的脈沖,該頻率的脈沖經(jīng)喇叭驅(qū)動電路放大濾波后,就會發(fā)出相應的音調(diào)。如果在前一個按下的鍵發(fā)聲的同時有另一個按鍵被按下,則啟動中斷系統(tǒng)。前面的發(fā)音停止,轉(zhuǎn)到后按的鍵的發(fā)音程序。發(fā)出后按的鍵的音調(diào)。</p><p><b>  2.2 設(shè)計方案</b></p><p>  2.2.1 播放模塊</p><p>  播放模塊是由喇叭構(gòu)成,它幾乎不存在

18、噪聲,音響效果較好,而且由于所需驅(qū)動功率較小,且價格低廉,所以,被廣泛應用。</p><p>  2.2.2 按鍵控制模塊</p><p>  電子琴設(shè)有16個按鍵,其中16個作為音符輸入。16個按鍵分別代表167個音符,包括中音段的全部音符,低高音的部分音符。通過軟硬件設(shè)計,模式轉(zhuǎn)換按鍵觸發(fā)外部中斷,中斷使程序跳轉(zhuǎn),實現(xiàn)模式轉(zhuǎn)換,啟動電子琴。然后通過查詢電子琴所按下的按鍵,讀取電子琴輸入

19、狀態(tài),跳轉(zhuǎn)到對應的程序入口,實現(xiàn)自編歌曲的輸入。</p><p>  2.3 總體硬件組成框圖</p><p>  該設(shè)計方案是通過按鍵隨意按下所要表達的音符,作為電平送給主體電路,中央處理器通過識別,解碼輸出音符,在揚聲器中發(fā)出有效的聲音。通過這樣可以不斷的彈奏我們想要的音符或者是音調(diào),電路由復位電路和功能按鍵電路組成,通過P1.7的高低電平可以選擇播放音樂或者彈奏音節(jié),硬件主要有下面幾

20、個部分組成。</p><p>  圖2-1電子琴硬件設(shè)計框圖</p><p>  用P2口的高四位和P2口的低四位作為按鍵的接口,用P1口做信號輸出口。</p><p>  第三章 硬件設(shè)計及說明</p><p>  3.1系統(tǒng)組成及總體框圖</p><p>  硬件設(shè)計的任務是根據(jù)總體設(shè)計要求,在選擇的機型的基礎(chǔ)上,

21、具體確定系統(tǒng)中所要使用的元器件,設(shè)計出系統(tǒng)的原理框圖、電路原理圖。</p><p>  該設(shè)計要實現(xiàn)一種由單片機控制的電子琴,單片機工作于12MHZ時鐘頻率,使用其定時/計數(shù)器T0,工作模式為1,改變計數(shù)值TH0和TL0可以產(chǎn)生不同頻率的脈沖信號。該設(shè)計具有16個音節(jié)的鍵盤,用戶可以根據(jù)樂譜在鍵盤上進行演奏,音樂發(fā)生器會根據(jù)用戶的彈奏,通過揚聲器將音樂播放出來。由于本例實現(xiàn)的音樂發(fā)生器是由用戶通過鍵盤輸入彈奏樂曲

22、的,所以節(jié)拍由用戶掌握,不由程序控制。用單片機產(chǎn)生的音頻脈沖直接驅(qū)動揚聲器并不能產(chǎn)生所要實現(xiàn)的音樂,因為它沒有足夠的驅(qū)動能力,這就需要音頻功率放大電路。</p><p>  本例使用國家半導體公司的低壓音頻功率放大器LM386來實現(xiàn)音頻功放電路。</p><p>  圖3-1 系統(tǒng)結(jié)構(gòu)圖</p><p><b>  3.2元件簡介</b>&

23、lt;/p><p>  3.2.1 STC89C52</p><p>  STC89C52是一種帶8K字節(jié)閃爍可編程可檫除只讀存儲器(FPEROM-Flash Programable and Erasable Read Only Memory )的低電壓,高性能COMOS8的微處理器,俗稱單片機。該器件采用ATMEL搞密度非易失存儲器制造技術(shù)制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容

24、。</p><p>  主要功能特性如表二所示:</p><p>  表二 STC89C52主要功能</p><p>  3.2.2 LM386</p><p>  LM386是美國國家半導體公司生產(chǎn)的音頻功率放大 器,主要應用于低電壓消費類產(chǎn)品。為使外圍元件最少,電壓增益內(nèi)置為20。但在1腳和8腳之間增加一只外接電阻和電容,便可將電壓增益

25、調(diào)為任意值,直至 200。輸入端以地位參考,同時輸出端被自動偏置到電源電壓的一半,在6V電源電壓下,它的靜態(tài)功耗僅為24mW,使得LM386特別適用于電池供電的場合。LM386是一種音頻集成功放,具有自身功耗低、電壓增益可調(diào)整、電源電壓范圍大、外接元件少和總諧波失真小等優(yōu)點,廣泛應用于錄音機和收音機之中。</p><p>  LM386的封裝形式有塑封8引線雙列直插式和貼片式。</p><p&

26、gt;  圖3-2 LM386的封裝形式</p><p>  特性(Features)</p><p>  靜態(tài)功耗低,約為4mA,可用于電池供電。   工作電壓范圍寬,4-12V or 5-18V。   外圍元件少。   電壓增益可調(diào),20-200。   低失真度。</p><p>  其典型應用電

27、路如下:</p><p>  圖3-3 放大器增益=20(最少器件)</p><p>  圖3-4 放大器增益=50 </p><p>  圖3-5 低頻提升放大器</p><p>  3.4 各功能模塊原理圖</p><p>  3.4.1 STC89C52模塊電路原理圖</p><p>  

28、單片機主程序模塊通過對鍵盤掃描程序信號的讀取,在通過對應的表,取出數(shù)碼管顯示編碼和定時器初始值以產(chǎn)生不同的聲音信號。在這一過程中,對數(shù)碼管編碼是直接賦值,對聲音信號則是通過中斷程序進行控制。</p><p>  圖3-7STC89C52模塊電路原理圖</p><p>  3.4.2鍵盤掃描模塊電路原理圖</p><p>  對鍵盤掃描電路的掃描方式有行掃描法和線反轉(zhuǎn)

29、法,在此次程序編寫中,采用行掃描法,通過在p3.0~p3.3上循環(huán)送出0掃描信號,p3.4~p3.7輸入按鍵上的高低電平信息給單片機,經(jīng)處理程序,判斷出是哪個開關(guān)按下,并送主程序以實現(xiàn)不同功能。</p><p>  圖3-8 鍵盤掃描模塊電路原理圖</p><p>  3.4.4音頻處理模塊電路原理圖</p><p>  由于單片機驅(qū)動能力不夠,在處理音符信號時,需

30、加功率放大裝置,因LM386芯片具有低功耗、高增益的特點,這合適單片機低功耗輸出,所以加裝LM386音頻信號放大器對信號進行放大。</p><p>  圖3-10 音頻處理模塊電路原理圖</p><p><b>  第四章 軟件設(shè)計</b></p><p>  本軟件設(shè)計關(guān)鍵是要實現(xiàn)一種由單片機控制的簡單音樂發(fā)生器,它由16個音節(jié)組成的的鍵盤,

31、用戶可以根據(jù)樂譜在鍵盤上進行演奏,音樂發(fā)生器會根據(jù)用戶的彈奏,通過揚聲器將音樂播放出來。</p><p>  4.1 音樂相關(guān)知識</p><p>  樂音聽起來有的高,有的低,這就叫音高,音高是由發(fā)音物體振動頻率的高低決定的,頻率高聲音就高,頻率低聲音就低,不同音商的樂音是用C、D、E、F、G、A、B表示的,這7個字母就是樂音的音名,它們一般依次唱成DO、RE、MI、FA、SO、LA、S

32、I,這是唱曲時樂音的發(fā)音,所以叫唱名。</p><p>  音持續(xù)時間的長短即時值,一般用拍數(shù)表示,休止符表示暫停發(fā)音。</p><p>  一首音樂是由許多不同的音符組成的,而每個音符對應著不同的頻率,這樣就可以利用不同頻率的組合,加以與拍數(shù)對應的延時,構(gòu)成音樂。</p><p>  4.2如何用單片機實現(xiàn)音樂的節(jié)拍</p><p>  除

33、了音符以外,節(jié)拍也是音樂的關(guān)鍵組成部分。</p><p>  節(jié)拍實際上就是音持續(xù)時間的長短,在單片機系統(tǒng)中可以用延時來實現(xiàn),如果1/4拍的延時是0.4秒,則1拍的延時是1.6秒,只要知道1/4拍的延時時間,其余的節(jié)拍延時時間就是它的陪數(shù)。如果單片機要自己播放音樂,那么必須在程序設(shè)計中考慮到節(jié)拍的設(shè)置,由于本例實現(xiàn)的音樂發(fā)生器是由用戶通過鍵盤輸入彈奏樂曲的,所以節(jié)拍由用戶掌握,不由程序控制。對于不同的曲調(diào)我們也可

34、以用單片機的另外一個定時/計數(shù)器來完成。音樂的音拍,一個節(jié)拍為單位(C調(diào))具體如下表:</p><p>  表4-1 音樂節(jié)拍表</p><p>  4.3如何用單片機產(chǎn)生音頻脈沖</p><p>  了解音樂的一些基本知識后可知,產(chǎn)生不同頻率的音頻脈沖即能產(chǎn)生音樂,對于單片機而言,產(chǎn)生不同頻率有脈沖非常方便,可以利用它的定時/計數(shù)器來產(chǎn)生這樣的方波頻率信號,因此,

35、需要弄清楚音樂中的音符和對應的頻率,以及單片機定時計數(shù)的關(guān)系。</p><p>  在本實驗中,單片機工作于12MHZ時鐘頻率,使用其定時/計數(shù)器T0,工作模式為1,改變計數(shù)值TH0和TL0可以產(chǎn)生不同頻率的脈沖信號,在此情況下,C調(diào)的各音符頻率與計數(shù)值T的對照如下表:</p><p>  表4-2 音符頻率與計數(shù)值T的對照表</p><p>  T的值決定了TH0

36、和TL0的值,其關(guān)系為:TH0=T/256,TL0=T%256</p><p>  4.4系統(tǒng)總體功能流程圖</p><p>  該程序設(shè)計思路比較清晰既從開始到聲明變量與函數(shù)再到讀取按鈕開關(guān),判斷是否按下,然后就是一個一個按鈕的動作。其主程序如下: </p><p>  圖4-1 主程序框圖 </p><p>  按鍵子程序流程圖如下:

37、</p><p><b>  第五章 系統(tǒng)調(diào)試</b></p><p>  電路調(diào)試是整個系統(tǒng)功能否實現(xiàn)的關(guān)鍵步驟,我們將整個調(diào)試過程分為三大部分:硬件調(diào)試、軟件調(diào)試和綜合調(diào)試。</p><p><b>  5.1硬件調(diào)試</b></p><p>  硬件調(diào)試主要是針對單片機部分進行調(diào)試。</

38、p><p>  在上電前,先確保電路中不在斷路或短路情況,這一工作是整個調(diào)試工作的第一步,也是非常重要的一個步驟。在這部分調(diào)試中主要使用的工具是萬用表,用來完成檢測電路中是否存在斷路或者短路情況等。注意焊點之間,確保焊點沒有短接在一起,同時注意焊點的美觀,確保沒有開路以及短路的現(xiàn)象出現(xiàn)。</p><p>  在確保硬件電路正常,無異常情況(斷路或短路)方可上電調(diào)試,上電調(diào)試的目的是檢驗電路是否

39、接錯,同時還要檢驗原理是否正確,在本次設(shè)計中,上電調(diào)試主要鍵盤單片機控制部分和音頻轉(zhuǎn)換電路硬件調(diào)試。</p><p>  鍵盤單片機控制部分調(diào)試:上電后,隨機按動鍵盤可以發(fā)現(xiàn)各個按鍵對應的音正確。</p><p><b>  5.2 軟件調(diào)試</b></p><p>  調(diào)試主要方法和技巧:</p><p>  通常一個

40、調(diào)試程序應該具備至少四種性能:跟蹤、斷點、查看變量、更改數(shù)值。整個程序是一個主程序調(diào)用各個子程序?qū)崿F(xiàn)功能的過程,要使主程序和整個程序都能平穩(wěn)運行,各個模塊的子程序的正確與平穩(wěn)運行必不可少,所以在軟件調(diào)試的最初階段就是把各個子程序模塊進行分別調(diào)試。</p><p>  第六章 課程設(shè)計總結(jié)以及心得體會</p><p>  通過這周的單片機課程設(shè)計,我學到了不少課本上沒有的知識,也鍛煉了自己的

41、動手能力,將以前學過的零散的知識串到一起。</p><p>  首先在課程設(shè)計剛開始的調(diào)研階段,我學會了怎么通過各種方式查詢相關(guān)的資料。通過對這些資料的學習,我大致了解了單片機的發(fā)展現(xiàn)狀以及未來的發(fā)展趨勢,認識到目前單片機方面的各種各樣的發(fā)展,和它們之間的競爭。了解了單片機方面的先進技術(shù),這些都為我的未來的學習指明了方向。</p><p>  我的課程設(shè)計主要涉及軟件方面的內(nèi)容,通過這些我

42、的軟件開發(fā)能力都獲得了提高。設(shè)計了一個單片機最小系統(tǒng)。通過開發(fā)板的設(shè)計和硬件搭建的過程,使我對51系單片機的接口有了更深層次的理解,熟悉了一些單片機常用的外圍電路引腳和連接方法,如復位,鍵盤等。</p><p>  在軟件方面,通過串行口調(diào)試工具的開發(fā),使我加深了對于封裝的理解,熟</p><p>  悉了51系列單片機內(nèi)部的寄存器和編程規(guī)則,以及如何控制外圍電路。</p>

43、<p>  最后,感謝老師的精心指導,使我能夠完成這次課程設(shè)計。</p><p><b>  參考文獻</b></p><p>  【1】譚會生,張昌凡.EDA技術(shù)及應用(第二版)[M].西安電子科技大學出版社,2001年9月第1版</p><p>  【2】徐志軍,王金明,伊廷輝等. EDA技術(shù)與PLD設(shè)計[M].人民郵電出版社,

44、2006年2月第1版</p><p>  【3】趙鑫,蔣亮,齊兆群等.數(shù)字電路設(shè)計[M].北京機械工業(yè)出版社,2005年6月第一版.</p><p>  【4】蘇家健、曹柏榮、汪志鋒.單片機原理及應用技術(shù)[M].高等教育出版社</p><p>  【5】[美]Ashish Wilfred Meeta Gupta Kartik Bhatnagar著,劉永明,賀民譯.

45、php專業(yè)項目實例開發(fā)[J]. 水利水電出版社,2003</p><p>  【6】于海生. 微型計算機控制技術(shù)選編[M].清華大學出版社,1999.</p><p>  【7】李朝青. 單片機原理及接口技術(shù)[M]. 北京:北京航天航空大學出版色,2001.【8】胡漢才. 單片機原理及其接口技術(shù)[M]. 北京:清華大學出版社,2004.</p><p><

46、b>  附錄1:元器件清單</b></p><p>  揚聲器 一只</p><p>  按鍵 16只</p><p>  電容: 0.1uf 五只</p><p>  晶振: 12M 一只 </p><p>  瓷片

47、電容: 20pf 二只 </p><p>  電解電容: 10uf 三只 </p><p><b>  47uf 一只</b></p><p>  電阻 10K 四只</p><p>  集成塊: LM386 一只</p><p&g

48、t;  STC89C52 一只</p><p>  附錄2:主要電路原理圖</p><p><b>  附錄3:程序清單</b></p><p>  MAIN: </p><p>  KEYBUF EQU 30H</p><p>  STH0 EQU 31H</p>

49、;<p>  STL0 EQU 32H</p><p>  TEMP EQU 33H </p><p><b>  ORG 0000H</b></p><p>  LJMP START</p><p><b>  ORG 000

50、BH</b></p><p>  LJMP INT_T0</p><p><b>  ORG 1000h</b></p><p>  LJMP SHENGRIGE</p><p><b>  ORG 1100h</b></p><p>  START: MO

51、V TMOD,#01H ;定時器0方式一</p><p>  SETB EA ;開中斷</p><p><b>  SETB ET0</b></p><p>  LOOP: MOV A,P1 ;判斷電子琴的功能為放置已存音樂還是按鍵電子琴,高電平為音樂盒,低電平為電子琴</p>

52、<p>  ANL A,#80H</p><p>  CJNE A,00H,LOOP1</p><p><b>  JMP WAIT</b></p><p>  LOOP1: LJMP SHENGRIGE</p><p>  WAIT: MOV P3,#0FFH ;判斷是否有鍵按下?&

53、lt;/p><p>  CLR P3.4 ;是否第一行有鍵按下?</p><p><b>  MOV A,P3</b></p><p>  ANL A,#0FH</p><p>  XRL A,#0FH</p><p><b>  JZ NOKEY1</b>

54、</p><p>  LCALL DELY10MS</p><p><b>  MOV A,P3</b></p><p>  ANL A,#0FH</p><p>  XRL A,#0FH</p><p><b>  JZ NOKEY1</b></p><

55、p><b>  MOV A,P3</b></p><p>  ANL A,#0FH ;若有,則判斷是該行哪一列按下</p><p>  CJNE A,#0EH,NK1</p><p>  MOV KEYBUF,#0</p><p><b>  LJMP DK1</b></p

56、><p>  NK1: CJNE A,#0DH,NK2 </p><p>  MOV KEYBUF,#1</p><p><b>  LJMP DK1</b></p><p>  NK2: CJNE A,#0BH,NK3</p><p>  MOV KEYBUF,#2<

57、;/p><p><b>  LJMP DK1</b></p><p>  NK3: CJNE A,#07H,NK4</p><p>  MOV KEYBUF,#3</p><p><b>  LJMP DK1</b></p><p>  NK4: NOP<

58、;/p><p>  DK1: MOV A,KEYBUF ;判斷好后將初值裝入T0中</p><p>  MOV DPTR,#TABLE</p><p>  MOVC A,@A+DPTR</p><p><b>  MOV P0,A</b></p><p>  MOV A,KEY

59、BUF</p><p><b>  MOV B,#2</b></p><p><b>  MUL AB</b></p><p>  MOV TEMP,A</p><p>  MOV DPTR,#TABLE1</p><p>  MOVC A,@A+DPTR</p>

60、<p>  MOV STH0,A</p><p><b>  MOV TH0,A</b></p><p><b>  INC TEMP</b></p><p>  MOV A,TEMP</p><p>  MOVC A,@A+DPTR</p><p>  MOV

61、 STL0,A</p><p><b>  MOV TL0,A</b></p><p><b>  SETB TR0</b></p><p>  DK1A: MOV A,P3 ;判斷按鍵是否松開,若沒有繼續(xù)剛才的聲音,若松開則音樂停止。</p><p>  ANL A,#0

62、FH</p><p>  XRL A,#0FH</p><p><b>  JNZ DK1A</b></p><p><b>  CLR TR0</b></p><p>  NOKEY1: MOV P3,#0FFH ;是否第二行有鍵按下?</p><p>&l

63、t;b>  CLR P3.5</b></p><p><b>  MOV A,P3</b></p><p>  ANL A,#0FH</p><p>  XRL A,#0FH</p><p><b>  JZ NOKEY2</b></p><p>  LCA

64、LL DELY10MS</p><p><b>  MOV A,P3</b></p><p>  ANL A,#0FH</p><p>  XRL A,#0FH</p><p>  JZ NOKEY2 ;若有則判斷該行哪一列按下?</p><p><b>  MOV

65、 A,P3</b></p><p>  ANL A,#0FH</p><p>  CJNE A,#0EH,NK5</p><p>  MOV KEYBUF,#4</p><p><b>  LJMP DK2</b></p><p>  NK5: CJNE A,#0DH,NK6

66、</p><p>  MOV KEYBUF,#5</p><p><b>  LJMP DK2</b></p><p>  NK6: CJNE A,#0BH,NK7</p><p>  MOV KEYBUF,#6</p><p><b>  LJMP DK2</b>

67、</p><p>  NK7: CJNE A,#07H,NK8</p><p>  MOV KEYBUF,#7</p><p><b>  LJMP DK2</b></p><p>  NK8: NOP</p><p>  DK2: MOV A,KEYBUF

68、 ;若有按下,重裝T0</p><p>  MOV DPTR,#TABLE</p><p>  MOVC A,@A+DPTR</p><p><b>  MOV P0,A</b></p><p>  MOV A,KEYBUF</p><p><b>  MOV B,#2<

69、;/b></p><p><b>  MUL AB</b></p><p>  MOV TEMP,A</p><p>  MOV DPTR,#TABLE1</p><p>  MOVC A,@A+DPTR</p><p>  MOV STH0,A</p><p>&l

70、t;b>  MOV TH0,A</b></p><p><b>  INC TEMP</b></p><p>  MOV A,TEMP</p><p>  MOVC A,@A+DPTR</p><p>  MOV STL0,A</p><p><b>  MOV TL0

71、,A</b></p><p><b>  SETB TR0</b></p><p>  DK2A: MOV A,P3 ;是否鍵按彈開,若沒有繼續(xù),則繼續(xù)發(fā)出原來的聲音。</p><p>  ANL A,#0FH</p><p>  XRL A,#0FH</p>

72、<p><b>  JNZ DK2A</b></p><p><b>  CLR TR0</b></p><p>  NOKEY2: MOV P3,#0FFH ;判斷第三行是否有鍵按下?</p><p><b>  CLR P3.6</b></p>

73、<p><b>  MOV A,P3</b></p><p>  ANL A,#0FH</p><p>  XRL A,#0FH</p><p><b>  JZ NOKEY3</b></p><p>  LCALL DELY10MS</p><p><b&g

74、t;  MOV A,P3</b></p><p>  ANL A,#0FH</p><p>  XRL A,#0FH</p><p><b>  JZ NOKEY3</b></p><p><b>  MOV A,P3</b></p><p>  ANL A,#0

75、FH</p><p>  CJNE A,#0EH,NK9 ;判斷該行哪一列按下?</p><p>  MOV KEYBUF,#8</p><p><b>  LJMP DK3</b></p><p>  NK9: CJNE A,#0DH,NK10</p><p>  MO

76、V KEYBUF,#9</p><p><b>  LJMP DK3</b></p><p>  NK10: CJNE A,#0BH,NK11</p><p>  MOV KEYBUF,#10</p><p><b>  LJMP DK3</b></p><p>  

77、NK11: CJNE A,#07H,NK12</p><p>  MOV KEYBUF,#11</p><p><b>  LJMP DK3</b></p><p>  NK12: NOP</p><p>  DK3: MOV A,KEYBUF ;判斷好哪個按鍵按下后,重裝T

78、0</p><p>  MOV DPTR,#TABLE</p><p>  MOVC A,@A+DPTR</p><p><b>  MOV P0,A</b></p><p>  MOV A,KEYBUF</p><p><b>  MOV B,#2</b></p>

79、;<p><b>  MUL AB</b></p><p>  MOV TEMP,A</p><p>  MOV DPTR,#TABLE1</p><p>  MOVC A,@A+DPTR</p><p>  MOV STH0,A</p><p><b>  MOV TH0

80、,A</b></p><p><b>  INC TEMP</b></p><p>  MOV A,TEMP</p><p>  MOVC A,@A+DPTR</p><p>  MOV STL0,A</p><p><b>  MOV TL0,A</b><

81、/p><p><b>  SETB TR0</b></p><p>  DK3A: MOV A,P3 ;判斷按鍵是否彈開,若無,繼續(xù)發(fā)出剛剛的聲音。</p><p>  ANL A,#0FH</p><p>  XRL A,#0FH</p><p><b>

82、;  JNZ DK3A</b></p><p><b>  CLR TR0</b></p><p>  NOKEY3: MOV P3,#0FFH ;是否第四行有鍵按下?</p><p><b>  CLR P3.7</b></p><p><b>  

83、MOV A,P3</b></p><p>  ANL A,#0FH</p><p>  XRL A,#0FH</p><p><b>  JZ NOKEY4</b></p><p>  LCALL DELY10MS</p><p><b>  MOV A,P3</b&g

84、t;</p><p>  ANL A,#0FH</p><p>  XRL A,#0FH</p><p><b>  JZ NOKEY4</b></p><p>  MOV A,P3 ;判斷改行哪一列按鍵按下</p><p>  ANL A,#0FH</p&

85、gt;<p>  CJNE A,#0EH,NK13</p><p>  MOV KEYBUF,#12</p><p><b>  LJMP DK4</b></p><p>  NK13: CJNE A,#0DH,NK14</p><p>  MOV KEYBUF,#13</p><

86、;p><b>  LJMP DK4</b></p><p>  NK14: CJNE A,#0BH,NK15</p><p>  MOV KEYBUF,#14</p><p><b>  LJMP DK4</b></p><p>  NK15: CJNE A,#07H,NK16

87、</p><p>  MOV KEYBUF,#15</p><p><b>  LJMP DK4</b></p><p>  NK16: NOP</p><p>  DK4: MOV A,KEYBUF ;判斷好后重裝T0</p><p>  

88、MOV DPTR,#TABLE</p><p>  MOVC A,@A+DPTR</p><p><b>  MOV P0,A</b></p><p>  MOV A,KEYBUF</p><p><b>  MOV B,#2</b></p><p><b>  M

89、UL AB</b></p><p>  MOV TEMP,A</p><p>  MOV DPTR,#TABLE1</p><p>  MOVC A,@A+DPTR</p><p>  MOV STH0,A</p><p><b>  MOV TH0,A</b></p>

90、<p><b>  INC TEMP</b></p><p>  MOV A,TEMP</p><p>  MOVC A,@A+DPTR</p><p>  MOV STL0,A</p><p><b>  MOV TL0,A</b></p><p><b&g

91、t;  SETB TR0</b></p><p>  DK4A: MOV A,P3 ;判斷按鍵是否彈開,若無,繼續(xù)發(fā)出原來的聲音。</p><p>  ANL A,#0FH</p><p>  XRL A,#0FH</p><p><b>  JNZ DK4A</b>&l

92、t;/p><p><b>  CLR TR0</b></p><p>  NOKEY4: LJMP LOOP </p><p>  DELY10MS: MOV R6,#10 ;延時子程序</p><p>  C1: MOV R7,#248</p>

93、;<p><b>  DJNZ R7,$</b></p><p>  DJNZ R6,C1</p><p><b>  RET</b></p><p>  SHENGRIGE:mov tmod,#01h ;設(shè)定時方式 </p><p>  mov ie,#82h ;開中斷 </p

94、><p>  start0: mov 30h,#00h ; 18 </p><p>  next: mov a,30h </p><p>  mov dptr,#table3 </p><p>  movc a,@a+dptr ;查表取音調(diào)和節(jié)拍 </p><p><b>  mov r2,a <

95、;/b></p><p>  jz end0 ;為零,不進行處理. </p><p>  anl a,#0fh </p><p>  mov r5,a ;將節(jié)拍存入R5 </p><p><b>  mov a,r2 </b></p><p><b>  swap a </b

96、></p><p>  anl a,#0fh </p><p>  jnz sing ;根據(jù)音調(diào)決定是否演奏. </p><p><b>  clr tr0 </b></p><p><b>  jmp d1 </b></p><p>  sing: dec a

97、 </p><p>  mov 22h,a ;將音調(diào)存入22H. </p><p><b>  rl a </b></p><p>  mov dptr,#table2 </p><p>  movc a,@a+dptr ;根據(jù)音調(diào)決定定時器初值. </p><p>  mov th0,a ;放入

98、TH0 </p><p>  mov STH0,a </p><p>  mov a,22h </p><p><b>  rl a </b></p><p><b>  inc a </b></p><p>  movc a,@a+dptr </p><

99、p>  mov tl0,a ;放入TL0 </p><p>  mov STL0,a </p><p>  setb tr0 ;啟動定時 </p><p>  d1: Lcall delay </p><p><b>  inc 30h </b></p><p><b>

100、;  jmp next </b></p><p>  end0: clr tr0 </p><p>  jmp start0 </p><p>  delay: mov r7,#02h ;延時子程序 </p><p>  d2: mov r4,#187 </p><p>  d3:

101、 mov r3,#248 </p><p>  djnz r3,$ </p><p>  djnz r4,d3 </p><p>  djnz r7,d2 </p><p>  djnz r5,delay </p><p><b>  ret </b></p><p

102、>  INT_T0: PUSH ACC</p><p><b>  PUSH PSW</b></p><p>  MOV TH0,STH0</p><p>  MOV TL0,STL0</p><p><b>  CPL P1.0</b></p><p><b&

103、gt;  POP PSW</b></p><p>  POP ACC </p><p><b>  RETI</b></p><p>  TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H</p><p>  DB 7FH,6FH,77H,7CH,39H,5EH,7

104、9H,71H</p><p>  TABLE1: DW 64021,64103,64260,64400</p><p>  DW 64524,64580,64684,64777</p><p>  DW 64820,64898,64968,65030</p><p>  DW 65058,65110,65157,65178</p>

105、;<p>  table2: DW 64260,64400,64524,64580</p><p>  DW 64684,64777,64820,64898</p><p>  DW 64968,65030,65058,65110</p><p>  DW 65157,65178,65217</p><p>  table3:

106、 DB 82H,01H,81H,94H,84H</p><p>  DB 0B4H,0A4H,04H</p><p>  DB 82H,01H,81H,94H,84H</p><p>  DB 0C4H,0B4H,04H</p><p>  DB 82H,01H,81H,0F4H,0D4H</p><p>  DB

溫馨提示

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

評論

0/150

提交評論