基于51單片機(jī)帶存儲播放功能功能的電子琴_第1頁
基于51單片機(jī)帶存儲播放功能功能的電子琴_第2頁
基于51單片機(jī)帶存儲播放功能功能的電子琴_第3頁
基于51單片機(jī)帶存儲播放功能功能的電子琴_第4頁
基于51單片機(jī)帶存儲播放功能功能的電子琴_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、單片機(jī)課程設(shè)計(jì)報(bào)告書小組成員:呂夢莎 吳玉鳳學(xué) 號:11213072 11213078班 級:自動化1106指導(dǎo)教師:于振宇基于at89c51的屏幕聲光式可錄音電子琴北京交通大學(xué) 電子信息工程學(xué)院 呂夢莎 吳玉鳳摘要:本文的主要內(nèi)容是用at89s51單片機(jī)為核心控制元件,通過脈沖觸發(fā)產(chǎn)生出電子音調(diào),與按鍵、揚(yáng)聲器、lcd顯示屏等模塊組成控制模塊,設(shè)計(jì)一個電子琴。該系統(tǒng)運(yùn)行穩(wěn)定,其優(yōu)點(diǎn)是硬件電路簡單,軟件功能完善,控制系統(tǒng)可靠,性價(jià)比較高等,具有一定的實(shí)用與參考價(jià)值。關(guān)鍵詞:at89c51、脈沖觸發(fā)、屏幕聲光式、錄音、播放、演奏、電子琴。第一章 引言1.1設(shè)計(jì)背景單片微型計(jì)算機(jī)是大規(guī)模集成電路技

2、術(shù)發(fā)展的產(chǎn)物,屬第四代電子計(jì)算機(jī),它具有高性能、高速度、體積小、價(jià)格低廉、穩(wěn)定可靠、應(yīng)用廣泛的特點(diǎn)。它的應(yīng)用必定導(dǎo)致傳統(tǒng)的控制技術(shù)從根本上發(fā)生變革。因此,單片機(jī)的開發(fā)應(yīng)用已成為高科技和工程領(lǐng)域的一項(xiàng)重大課題。 電子琴是現(xiàn)代電子科技與音樂結(jié)合的產(chǎn)物,是一種新型的鍵盤樂器。它在現(xiàn)代音樂扮演著重要的角色,單片機(jī)具有強(qiáng)大的控制功能和靈活的編程實(shí)現(xiàn)特性,它已經(jīng)溶入現(xiàn)代人們的生活中,成為不可替代的一部分。 本文對利用單片機(jī)設(shè)計(jì)簡易電子琴進(jìn)行了分析,分別從原理圖,主要芯片,各模塊原理及各模塊的程序的調(diào)試來詳細(xì)闡述。本系統(tǒng)是簡易電子琴的設(shè)計(jì),按下四角自鎖開關(guān)會使lcd顯示屏顯示當(dāng)前音符名稱、播放的歌曲名稱或播

3、放的錄音名稱,同時揚(yáng)聲器播放對應(yīng)的音符,led閃爍相應(yīng)的節(jié)奏。通過設(shè)計(jì)本系統(tǒng)可熟悉掌握單片機(jī)的基本功能。1.2設(shè)計(jì)任務(wù)1、設(shè)計(jì)以單片機(jī)為核心的簡易電子琴系統(tǒng),可隨意彈奏想要表達(dá)的音樂;2、針對要求控制的對象完成程序的編制;3、硬件軟件聯(lián)調(diào),完成題目所要求的功能;1.3設(shè)計(jì)思路1、發(fā)聲部分設(shè)計(jì)思路音樂是由不同頻率的聲音組成的。利用程序來控制單處機(jī)某個口線的“高”電平或低電平,則在該口線上就能產(chǎn)生一定頻率的矩形波。 利用延時程序控制“高”“低”電平的持續(xù)時間,就能改變輸出頻率,從而改變音調(diào)。于是產(chǎn)生do,re,mi,fa,so,la,xi七個音符的變換。 2、顯示部分設(shè)計(jì)思路考慮到信息的多媒體傳播

4、已經(jīng)成為信息化時代的主流,我們給電子琴設(shè)計(jì)了lcd顯示器和節(jié)拍指示led燈,帶來視聽雙重沖擊。 lcd具有功耗低,顯示質(zhì)量高,數(shù)字式接口更加穩(wěn)定可靠的優(yōu)點(diǎn)。演示過程中可顯示歡迎語,當(dāng)前功能,按下的音符名稱,當(dāng)前播放的歌曲名稱等。第二章 方案論證采用at89c51單片機(jī)作為主控芯片,設(shè)置獨(dú)立按鍵、揚(yáng)聲器、lcd顯示屏等外圍器件,另外還用到一些簡單器件如npn型三極管及電阻等。利用按鍵實(shí)現(xiàn)音符和音調(diào)的輸入;lcd顯示屏進(jìn)行被操作的按鍵顯示;用pnp型三極管2n2907實(shí)現(xiàn)低音頻功率放大;最后用揚(yáng)聲器發(fā)音。主控芯片采用at89c51單片機(jī),它是大規(guī)模集成電路技術(shù)發(fā)展的產(chǎn)物,具有高性能、高速度、體積小

5、、價(jià)格低廉、穩(wěn)定可靠、應(yīng)用廣泛的特點(diǎn)。避免了由于元器件種類、個數(shù)繁多,而過于復(fù)雜的硬件電路也容易引起系統(tǒng)的精度不高、體積過大等不利因素。同時具有強(qiáng)大的控制功能和靈活的編程實(shí)現(xiàn)特性,由于本設(shè)計(jì)主要用于娛樂方面,因此在設(shè)計(jì)上盡量使其安全以及簡單易操作。具有經(jīng)濟(jì)可行性、技術(shù)可行性、實(shí)物應(yīng)用性。第三章 硬件系統(tǒng)設(shè)計(jì)3.1 時鐘電路 mcs-51內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器,引腳xtal1和xtal2分別是此放大器的輸入端輸出端。本圖采用內(nèi)部時鐘電路,如圖3-1所示,通常在引腳xtall和xtal2上跨接石英晶體x1和兩個補(bǔ)償電容c1、c2構(gòu)成自激振蕩器??梢愿鶕?jù)情況選擇212mhz頻率之

6、間的石英晶體,補(bǔ)償電容通常選擇30pf左右的瓷片電容。圖3-1 時鐘電路3.2 復(fù)位電路 單片機(jī)小系統(tǒng)常采用上電自動復(fù)位和手動按鍵復(fù)位兩種方式實(shí)現(xiàn)系統(tǒng)的復(fù)位操作。本實(shí)驗(yàn)采用上電自動復(fù)位方式,其結(jié)構(gòu)圖如圖3-2所示。上電復(fù)位要求接通電源后,自動實(shí)現(xiàn)復(fù)位操作。復(fù)位電路的基本功能是:系統(tǒng)上電時提供復(fù)位信號,直至系統(tǒng)電源穩(wěn)定后,撤銷復(fù)位信號。對于mcs-51單片機(jī),只要在rst復(fù)位端接一個電容至vcc和一個電阻至vss即可。在加電瞬間,rst端出現(xiàn)一定時間的高電平,只要高電平保持時間足夠長,就可以使mcs-51復(fù)位。圖3-2 復(fù)位電路3.3 原理框圖本系統(tǒng)有主控芯片at89c52、揚(yáng)聲器、顯示模塊、按

7、鍵模塊和晶振復(fù)位電路組成。圖3-3 原理框圖3.4 顯示部分設(shè)計(jì)為了讓電子琴能夠顯示出音調(diào),我們另外附加了一個lcd1602提供屏幕式音調(diào)顯示,lcd1602屬于字符型液晶,可以顯示字母和數(shù)字等字符。lcd1602是指顯示的內(nèi)容為16x2,即可以顯示兩行,每行16個字符液晶模塊(顯示字符和數(shù)字)。 圖3-4 顯示電路3.5 按鍵部分設(shè)計(jì)3.5.1鍵盤設(shè)計(jì)鍵盤可以分為2類:獨(dú)立連接式鍵盤和矩陣式鍵盤。本設(shè)計(jì)采用獨(dú)立式鍵盤。獨(dú)立式按鍵是直接用i/o口線構(gòu)成的單個按鍵電路,其特點(diǎn)是每個按鍵單獨(dú)占用一根i/o口線,每個按鍵的工作不會影響其它i/o口線的狀態(tài)。獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡單。獨(dú)立式

8、按鍵軟件常采用查詢式結(jié)構(gòu)。先逐位查詢每根i/o口線的輸入狀態(tài),如某一根i/o口線輸入為低電平,則可確認(rèn)該i/o口線所對應(yīng)的按鍵已按下,然后,再轉(zhuǎn)向該鍵的功能處理程序。由于本程序較為簡單,為了使用方便及節(jié)省資源,選擇獨(dú)立式鍵盤。下圖為獨(dú)立式鍵盤電路圖:圖3-5 獨(dú)立式鍵盤電路圖3.5.2 去抖動鍵盤編程中主要考慮去抖動的問題。當(dāng)測試表明有鍵被按下之后,緊接著就進(jìn)行去抖動處理。因?yàn)榘存I是機(jī)械開關(guān)結(jié)構(gòu),由于機(jī)械觸點(diǎn)的彈性及電壓突跳等原因,在觸點(diǎn)閉合或斷開的瞬間會出現(xiàn)電壓抖動。為保證鍵識別的準(zhǔn)確,在電壓信號抖動的情況下不能進(jìn)行行狀態(tài)輸入。為此需進(jìn)行去抖動處理。去抖動有硬件和軟件兩種方法。硬件方法就是加

9、去抖動電路,從 根 本上 避 免 抖 動的 產(chǎn)生。軟件消 抖,在第一次 檢 測 到有 鍵 按 下 時,執(zhí) 行一段延時程序之后,再檢測此按鍵,如果第二次檢測結(jié)果仍為按下狀態(tài),cpu便確認(rèn)此按鍵己按下,消除了抖動。本實(shí)驗(yàn)采用軟件消抖法,在按鍵按下后,執(zhí)行一段延時程序。3.6 發(fā)音部分設(shè)計(jì)如下圖所示,發(fā)音電路是由揚(yáng)聲器、三極管、變位器構(gòu)成。由三極管來驅(qū)動揚(yáng)聲器發(fā)音的,同時加上變位器實(shí)現(xiàn)電阻的可調(diào)來增強(qiáng)驅(qū)動電流,提高驅(qū)動能力,從而調(diào)節(jié)揚(yáng)聲器的音效。圖3-6 揚(yáng)聲器電路圖第四章 軟件系統(tǒng)設(shè)計(jì)4.1系統(tǒng)分析4.1.1系統(tǒng)軟件的組成(1)鍵盤掃描程序:檢測是否有按鍵按下,有按鍵按下則記錄按下鍵的鍵值,并跳轉(zhuǎn)

10、至功能轉(zhuǎn)移程序;無按鍵按下,則返回鍵盤掃描程序繼續(xù)檢測。(2)功能轉(zhuǎn)移程序:對檢測到的按鍵值進(jìn)行判斷,是琴鍵則跳轉(zhuǎn)至琴鍵處理程序,是功能鍵則跳轉(zhuǎn)至相應(yīng)的功能程序,我們設(shè)計(jì)的功能程序有三種,即音色調(diào)節(jié)功能、自動播放樂曲和錄音的功能。(3)琴鍵處理程序:根據(jù)檢測到的按鍵值,查詢音調(diào)表,給計(jì)時器賦值,使發(fā)出相應(yīng)頻率的聲音。(4)自動播放歌曲程序:檢測到按鍵按下的是自動播放歌曲功能鍵后執(zhí)行該程序,電子琴會自動播放事先已經(jīng)存放的歌曲或錄音歌曲,歌曲播放完畢之后自動返回至鍵盤掃描程序,繼續(xù)等待是否有按鍵按下。(5)錄音程序:檢測到按鍵按下的是錄音功能鍵后執(zhí)行該程序,跳轉(zhuǎn)到鍵盤掃描程序,檢測是否有鍵按下,有

11、按鍵按下則記錄按下鍵值,根據(jù)檢測到的按鍵值,查詢音調(diào)表,給計(jì)時器賦值,使發(fā)出相應(yīng)頻率的聲音并跳轉(zhuǎn)到功能轉(zhuǎn)移程序。4.1.2系統(tǒng)總體功能流程圖開始初始化t0鍵盤掃描程序演奏功能鍵按下自動播放鍵按下錄音功能鍵按下 n n y y y記錄音符 播放內(nèi)部存儲的音樂查表得到按鍵音符頻率查表得到按鍵音符頻率播放音符播放音符4.2參數(shù)計(jì)算4.2.1發(fā)音原理若要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/頻率),再將此周期除以2,即為半周期的時間。利用定時器計(jì)時半周期時間,每當(dāng)計(jì)時終止后就將p1.0反相,然后重復(fù)計(jì)時再反相。就可在p1.0引腳上得到此頻率的脈沖。利用at89c51的內(nèi)部定時器使其工作計(jì)數(shù)器模式(

12、mode1)下,改變計(jì)數(shù)值th0及tl0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階。4.2.2 音調(diào)的確定音調(diào)是唱曲時樂音的發(fā)音,一般依次唱成do、re、mi、fa、so、la、si,即唱成簡譜的1、2、3、4、5、6、7,相當(dāng)于漢字“多來米發(fā)梭拉西”的讀音。例如,頻率為523hz,其周期t1/5231912s,因此只要令計(jì)數(shù)器計(jì)時956s/1s956,每計(jì)數(shù)956次時將i/o反相,就可得到中音do(523hz)。計(jì)數(shù)脈沖值與頻率的關(guān)系式是:nfi2fr,式中,n是計(jì)數(shù)值;fi是機(jī)器頻率(晶體振蕩器為12mhz時,其頻率為1mhz);fr是想要產(chǎn)生的頻率。其計(jì)數(shù)初值t的求法如下:t65536n65536

13、fi2fr例如:設(shè)k65536,fi1mhz,求中音do(261hz)。t65536n65536fi2fr6553610000002fr65536500000/fr,中音do的t65536500000/52364580。由音符的頻率值可以計(jì)算得出各個音調(diào)的計(jì)數(shù)值,如表4-1所示:(叫升記號,表示把音在原來的基礎(chǔ)上升高半音,b叫降記音,表示在原來的基礎(chǔ)上降低半音。)表4-1 音調(diào)頻率與計(jì)數(shù)初值對照音符頻率(hz)計(jì)數(shù)值(t值)音符頻率(hz)計(jì)數(shù)值(t值)低1do26263628#4fa#74064860#1do#27763737中5so78464898低2re29463835#5so#8319

14、4934#2re#31163928中6la88064968低3mi33064021#6la#93264994低4fa34964103中7si96865030#4fa#37064185低1do104665058低so39264260#1do#110965085#5so#41564331高2re117565110低6la44064400#2re#124565134#6la#46664463高3mi131865157低7si49464524高4fa139765178中1do52364580#4fa#149065198#1do#55464633高5so156865217中2re58764633#5so

15、#166165235#2re#62264884高6la176065252中3mi65964732#6la#186565268中4fa69864820高7si196765283采用查表程序進(jìn)行查表時,可以為這個音符建立一個表格,有助于單片機(jī)通過查表的方式來獲得相應(yīng)的數(shù)據(jù)。4.2.3 節(jié)拍的確定若要構(gòu)成音樂,光有音調(diào)是不夠的,還需要節(jié)拍,讓音樂具有旋律(固定的律動),而且可以調(diào)節(jié)各個音的快滿度?!肮?jié)拍”,即beat,簡單說就是打拍子,就像我們聽音樂不自主的隨之拍手或跺腳。若1拍實(shí)0.5s,則1/4 拍為0.125s,只要設(shè)定延遲時間就可以求得節(jié)拍的時間,假設(shè)1拍為4delay,則1/4應(yīng)為1del

16、ay,以此類推,得到如表4-2所示的節(jié)拍與延遲時間對照表。休止符表示暫停發(fā)音。表4-2 1/4和1/8節(jié)拍的時間設(shè)定曲調(diào)值delay曲調(diào)值delay調(diào)4/4125毫秒調(diào)4/462毫秒調(diào)3/4187毫秒調(diào)3/494毫秒調(diào)2/4250毫秒調(diào)2/4125毫秒4.3程序設(shè)計(jì)4.3.1播放子程序(包括自動播放存儲音樂和按鍵發(fā)音)本設(shè)計(jì)共兩種播放模式,包括自動播放存儲音樂和按鍵發(fā)音。上電后,首先開中斷并設(shè)定定時器0為工作方式1,當(dāng)自動播放鍵按下時,進(jìn)入中斷,根據(jù)樂譜在定義的音頻數(shù)組中查找相應(yīng)音律,然后給定時器賦初值,即開始播放音樂。當(dāng)do、re、mi、fa、so、la、si七種音符鍵按下時,根據(jù)音符值在定

17、義的音頻數(shù)組中查找相應(yīng)音律,然后給定時器賦初值,即按鍵發(fā)音。開始開中斷并設(shè)定工作寄存器有鍵按下自動播放鍵按下進(jìn)入中斷 n y y根據(jù)yinfu和工作方式取值,并在數(shù)組中查找相應(yīng)音律進(jìn)入中斷給定時器t0 賦值根據(jù)樂譜在數(shù)組中查找相應(yīng)音律播放鍵值對應(yīng)的音符給定時器t0賦值播放音樂第五章實(shí)驗(yàn)結(jié)果5.1硬件調(diào)試硬件調(diào)試主要是針對單片機(jī)部分進(jìn)行的調(diào)試。在上電之前,先確保電路中不存在斷路或短路情況,這一工作是整個調(diào)試工作的第一步,也是非常重要的一個步驟。在這部分調(diào)試中主要使用的工具是萬用表,用來完成檢測電路中是否存在斷路或者短路情況的任務(wù)。注意焊點(diǎn)之間,確保焊點(diǎn)沒有短接在一起,同時注意焊點(diǎn)的美觀,確保沒有

18、開路以及短路的現(xiàn)象出現(xiàn)。在確保硬件電路正常且無異常情況(斷路或短路)的情況下方可上電調(diào)試,上電調(diào)試的目的是檢驗(yàn)電路是否接錯,同時還要檢驗(yàn)原理是否正確,在本次設(shè)計(jì)中,上電調(diào)試主要是檢測單片機(jī)控制部分、數(shù)碼管點(diǎn)亮部分、和音頻轉(zhuǎn)換電路硬件調(diào)試。1、數(shù)碼管led電路調(diào)試:接通電源,隨機(jī)按下按鈕可以看到數(shù)碼管顯示數(shù)字。2、鍵盤單片機(jī)控制部分調(diào)試:上電后,隨機(jī)按動鍵盤可以發(fā)現(xiàn)各個按鍵對應(yīng)的音正確。5.2軟件調(diào)試調(diào)試主要方法和技巧:通常一個調(diào)試程序應(yīng)該具備至少四種性能:跟蹤、斷點(diǎn)、查看變量、更改數(shù)值。整個程序是一個主程序調(diào)用各個子程序?qū)崿F(xiàn)功能的過程,要使主程序和整個程序都能平穩(wěn)運(yùn)行,各個模塊的子程序的正確與

19、平穩(wěn)運(yùn)行必不可少,所以在軟件調(diào)試的最初階段就是把各個子程序模塊進(jìn)行分別調(diào)試。5.3仿真結(jié)果第六章 總結(jié)本次51單片機(jī)課程設(shè)計(jì)我們組做的是基于at89c51單片機(jī)的屏幕式聲光電子琴的設(shè)計(jì),通過這次的diy制作的學(xué)習(xí),我學(xué)到了不少知識,真正體會到了學(xué)以致用的快感,通過自己動手制作小作品不僅加深了我們對51單片機(jī)的理解,而且也增強(qiáng)了我們對音樂的興趣,也因此喜歡上了各種基于51單片機(jī)的小制作,從而更好地將課本知識與實(shí)踐過程相結(jié)合。在這次課程設(shè)計(jì)中,主要涉及了軟件和硬件兩個方面的內(nèi)容。在軟件方面,我們掌握了仿真軟件proteus的仿真方法,實(shí)現(xiàn)了7音符的發(fā)聲、錄音以及音樂的自動播放功能,同時也提高了我們

20、用匯編語言編程的能力;在硬件方面,我們對電子產(chǎn)品的開發(fā)流程和功能應(yīng)用有了一定的了解,進(jìn)一步熟悉和掌握了單片機(jī)的內(nèi)部結(jié)構(gòu)和工作原理,了解了單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)的基本方法和步驟。并且提高了我們運(yùn)用所學(xué)的專業(yè)基礎(chǔ)知識來解決實(shí)際問題的能力,加深了對所學(xué)理論知識的理解和運(yùn)用,動手能力也得到了相應(yīng)的提高,創(chuàng)新意識得到了鍛煉。在本次的實(shí)驗(yàn)設(shè)計(jì)中,我們在借鑒前人的基礎(chǔ)上也對自己的作品進(jìn)行了一部分創(chuàng)新,在設(shè)置錄音功能方面,根據(jù)隨機(jī)彈奏的音調(diào),將其偏移地址存入36h單元中,然后通過查詢音調(diào)表,使其發(fā)出相應(yīng)頻率的聲音,從而彈奏出事先錄好的一段音樂。在控制節(jié)奏方面,我們設(shè)置了休止符,來控制節(jié)奏的停頓,這樣就能產(chǎn)生有停頓

21、感的音樂,而不是連續(xù)的,使音樂聽起來更加悅耳。而這些創(chuàng)新均基于匯編語言的學(xué)習(xí)??傮w來說,此次單片機(jī)課程設(shè)計(jì)使我們收獲良多,雖然課程設(shè)計(jì)的過程中遇到了很多困難與問題,但我們最終還是完成了設(shè)計(jì)的任務(wù)及要求。也讓我認(rèn)識到,無論做什么事情,只要你足夠堅(jiān)強(qiáng),有足夠的毅力和決心,有足夠的挑戰(zhàn)困難的勇氣,就沒有什么辦不到的。最后,衷心感謝老師給我們提供了這樣一次難得的機(jī)會來展示自己的作品,激發(fā)了我們對單片機(jī)diy小制作的興趣,也感謝老師在這個學(xué)期孜孜不倦的教悔,讓我們在學(xué)習(xí)單片機(jī)的基礎(chǔ)知識的同時,真正體會到學(xué)以致用帶來的快感。由此我覺得,我們的學(xué)習(xí)不僅要在教師引導(dǎo)和幫助下順利入門, 還要掌握自動控制原理課程

22、的精髓和要點(diǎn), 并且能夠“由厚及薄”, 達(dá)到對課程整體的把握, 具有一定的工程概念和實(shí)踐能力。附錄一:源程序rs equ p3.5rw equ p3.6e equ p3.7org 00hsjmp mainorg 00bhmov th0,33hmov tl0,34hcpl p3.4reti;!org 001bh inc 3ch ;中斷服務(wù),中斷計(jì)數(shù)器加1 mov th1,#0d8h mov tl1,#0efh ;12m晶振,形成10毫秒中斷 reti;!org 30hmain : setb p3.4 ;關(guān)閉揚(yáng)聲器lcall csh1602 ;初始化1602mov tmod,#11h ;設(shè)置定時器

23、0為工作模式1setb ea ;開總中斷setb et0 ;開定時器0中斷huanying: mov p1,#80h ;歡迎語顯示地址lcall enablemov dptr,#tab_hymov 30h,#00lp: mov a,30hmovc a,a+dptrjz keylcall delay_100mslcall write_1602inc 30hsjmp lpkey: mov p1,#01h ;清屏 acall enable mov p1,#80h lcall enable mov dptr,#tab_yanzhou mov 30h,#00lp7: mov a,30h movc a,a

24、+dptr jz key_0 lcall write_1602 inc 30h sjmp lp7key_0: mov p1,#0c0h ;音符的顯示地址 lcall enable mov 38h,#16 ;寫入1602的顯示地址指針 mov 35h,#2 ;控制節(jié)拍key_1: mov p2,#0ffh ;置p2為輸入 jb p2.0,key_2 ;k1鍵沒按下,轉(zhuǎn)移 lcall delay_10ms ;延時消抖 jnb p2.0,$ mov 36h,#0 ;裝入1的音符碼相對地址 lcall bofang_yfkey_2: jb p2.1,key_3 ;k2鍵沒按下,轉(zhuǎn)移 lcall del

25、ay_10ms ;延時消抖 jnb p2.1,$ mov 36h,#2 lcall bofang_yfkey_3: jb p2.2,key_4 ;k3鍵沒按下,轉(zhuǎn)移 lcall delay_10ms ;延時消抖 jnb p2.2,$ mov 36h,#4 lcall bofang_yfkey_4: jb p2.3,key_5 ;k4鍵沒按下,轉(zhuǎn)移 lcall delay_10ms ;延時消抖 jnb p2.3,$ mov 36h,#6 lcall bofang_yfkey_5: jb p2.4,key_6 ;k5鍵沒按下,轉(zhuǎn)移 lcall delay_10ms ;延時消抖 jnb p2.4,$

26、 mov 36h,#8 lcall bofang_yfkey_6: jb p2.5,key_7 ;k6鍵沒按下,轉(zhuǎn)移 lcall delay_10ms ;延時消抖 jnb p2.5,$ mov 36h,#10 lcall bofang_yfkey_7: jb p2.6,key_9 ;k7鍵沒按下,轉(zhuǎn)移 lcall delay_10ms ;延時消抖 jnb p2.6,$ mov 36h,#12 lcall bofang_yfkey_9: jb p3.2,key_1 ;k9鍵沒按下,重新掃描 lcall delay_10ms ;延時消抖 jnb p3.2,$ lcall delay_10ms;-播

27、放音樂程序段- mov p1,#01h ;清屏 acall enable mov p1,#80h lcall enable mov dptr,#tab_play mov 30h,#00lp8: mov a,30h movc a,a+dptr jz play lcall write_1602 inc 30h sjmp lp8play: mov p2,#0ffh ;置p2為輸入 jb p2.0,play_2 ;k1鍵沒按下,轉(zhuǎn)移 mov dptr,#tab_gequ1 ;存曲目標(biāo)志 lcall bofang_gequplay_2: jb p2.1,play_3 ;k2鍵沒按下,轉(zhuǎn)移 setb et

28、1mov 3bh,tmodmov tmod,#11hmov dptr,#tab2 mov p1,#0c0hlcall enablelcall write1mov dptr,#dat2 lcall music0 clr tr1 clr et1 mov tmod,3bhplay_3: jb p2.2,play_4 ;k3鍵沒按下,轉(zhuǎn)移setb et1mov 3bh,tmodmov tmod,#11hmov dptr,#tab1 mov p1,#0c0hlcall enablelcall write1mov dptr,#dat1 lcall music0 clr tr1 clr et1 mov tm

29、od,3bhplay_4: jb p2.3,play_9 mov r1,#50h lcall bofang_luyinplay_9: jb p3.2,play ;k8鍵沒按下,重新掃描 lcall delay_10ms ;延時消抖 jnb p3.2,$ lcall delay_10ms;-錄音程序段- mov p1,#01h ;清屏 acall enable mov p1,#80h lcall enable mov dptr,#tab_record mov 30h,#00lp9: mov a,30h movc a,a+dptr jz record_0 lcall write_1602 inc

30、30h sjmp lp9record_0: mov r1,#50h ;錄取音符存放地址 mov 35h,#3 ;控制節(jié)拍 mov p1,#0c0h ;音符的顯示地址 lcall enable mov 38h,#16 ;寫入1602的顯示地址指針;-寫入錄音的名字- mov 30h,#00c5: mov a,30h lcall tab_recording mov r1,ainc r1inc 30hcjne a,#0feh,c5record_1: mov p2,#0ffh ;置p2為輸入 jb p2.0,record_2 ;k1鍵沒按下,轉(zhuǎn)移 lcall delay_10ms ;延時消抖 jnb

31、p2.0,$ mov 36h,#0 ;裝入1的音符碼相對地址 lcall bofang_yf lcall cuncu ;調(diào)存音符子程序record_2: jb p2.1,record_3 ;k2鍵沒按下,轉(zhuǎn)移 lcall delay_10ms ;延時消抖 jnb p2.1,$ mov 36h,#2 lcall bofang_yf lcall cuncurecord_3: jb p2.2,record_4 ;k3鍵沒按下,轉(zhuǎn)移 lcall delay_10ms ;延時消抖 jnb p2.2,$ mov 36h,#4 lcall bofang_yf lcall cuncurecord_4: jb

32、p2.3,record_5 ;k4鍵沒按下,轉(zhuǎn)移 lcall delay_10ms ;延時消抖 jnb p2.3,$ mov 36h,#6 lcall bofang_yf lcall cuncurecord_5: jb p2.4,record_6 ;k5鍵沒按下,轉(zhuǎn)移 lcall delay_10ms ;延時消抖 jnb p2.4,$ mov 36h,#8 lcall bofang_yf lcall cuncurecord_6: jb p2.5,record_7 ;k6鍵沒按下,轉(zhuǎn)移 lcall delay_10ms ;延時消抖 jnb p2.5,$ mov 36h,#10 lcall bof

33、ang_yf lcall cuncurecord_7: jb p2.6,record_8 ;k7鍵沒按下,轉(zhuǎn)移 lcall delay_10ms ;延時消抖 jnb p2.6,$ mov 36h,#12 lcall bofang_yf lcall cuncurecord_8: jb p2.7,record_9 ;k8鍵沒按下,轉(zhuǎn)移 lcall delay_10ms ;延時消抖 jnb p2.7,$ mov 36h,#42 ;休止符標(biāo)志存36h lcall delay_100ms lcall cuncurecord_9: jnb p3.2,j0 ;k8鍵沒按下,重新掃描 ljmp record_

34、1j0: lcall delay_10ms ;延時消抖 jnb p3.2,$ lcall delay_10ms mov r1,#255 ;寫入歌曲結(jié)束標(biāo)志 ljmp key ;回演奏模式;*子程序區(qū)*;=初始化1602顯示器=csh1602: mov p3,#0ffhmov p1,#01hacall enablemov p1,#38hacall enablemov p1,#0chacall enablemov p1,#06hacall enableret;=1602發(fā)命令子程序=enable: clr rs clr rwclr eacall delay_2mssetb eret;=讀1602i

35、r中命令子程序=enable_1: clr rssetb rwclr eacall delay_2mssetb eret;=寫數(shù)據(jù)子程序(1602)=write_1602: mov p1,a setb rsclr rwclr emov r5,#50 ;延時100us(12m晶振)djnz r5,$setb eret;=播放一個音符并顯示音符和頻譜=bofang_yf: mov a,36h lcall tab_yf mov 33h,a mov a,36h inc a lcall tab_yf mov 34h,a mov th0,33h mov tl0,34h setb tr0 ;啟動定時器0 m

36、ov a,36h ;取音符的顯示碼 lcall tab_yf1 lcall write_1602 dec 38h mov a,36h inc a lcall tab_yf1 lcall write_1602 djnz 38h,d2 ;1602一行沒寫滿,轉(zhuǎn)移 mov 30h,#16 ;1602滿行清行并從頭開始寫 mov p1,#0c0h lcall enable mov a,# lp10: lcall write_1602 djnz 30h,lp10 mov 38h,#16 mov p1,#0c0h lcall enable;-顯示頻譜分析條程序段-d2: mov a,36h ;音符碼轉(zhuǎn)換為

37、相應(yīng)鍵值 mov b,#2 div ab add a,#1 mov 39h,a mov 3ah,39h ;保護(hù)音符碼對應(yīng)的鍵值 mov p1,#85h ;設(shè)定頻譜分析條顯示初地址 lcall enable mov a,#d5: lcall write_1602 djnz 39h,d5;-控制節(jié)拍時長程序段- mov 37h,35h ;保護(hù)循環(huán)次數(shù)控制(節(jié)拍) lp1: acall delay_100ms djnz 35h,lp1 ;延時次數(shù)控制 mov 35h,37h;-發(fā)音結(jié)束,清除頻譜分析條- mov p1,#85h ;頻譜分析條顯示的初地址 lcall enable mov a,# mo

38、v 39h,3ah d6: lcall write_1602 djnz 39h,d6 mov a,#10h ;釋放音符碼顯示地址 clr c subb a,38h add a,#0c0h mov p1,a lcall enable clr tr0 ;關(guān)定時器0 ret;=播放一個音符并顯示頻譜=bofang_yf_1: mov a,36h lcall tab_yf mov 33h,a mov a,36h inc a lcall tab_yf mov 34h,a mov th0,33h mov tl0,34h setb tr0 ;啟動定時器0 ;-顯示頻譜分析條程序段- mov a,36h ;音

39、符碼轉(zhuǎn)換為相應(yīng)鍵值 mov b,#2 div ab add a,#1 mov 39h,a mov 3ah,39h ;保護(hù)音符碼對應(yīng)的鍵值 mov p1,#85h ;設(shè)定頻譜分析條顯示初地址 lcall enable mov a,#d7: lcall write_1602 djnz 39h,d7;-控制節(jié)拍時長程序段- mov 37h,35h ;保護(hù)循環(huán)次數(shù)控制(節(jié)拍) lp11: acall delay_100ms djnz 35h,lp11 ;延時次數(shù)控制 mov 35h,37h;-發(fā)音結(jié)束,清除頻譜分析條- mov p1,#85h ;頻譜分析條顯示的初地址 lcall enable mov

40、 a,# mov 39h,3ah d8: lcall write_1602 djnz 39h,d8 clr tr0 ;關(guān)定時器0 ret;=播放一首歌并顯示歌名=;-(一個音符2字節(jié)存儲,音符碼存低字節(jié),節(jié)拍存高字節(jié);254為歌曲名結(jié)束標(biāo)志,255為歌曲結(jié)束標(biāo)志)-bofang_gequ: mov p1,#0c0h ;歌名顯示地址 lcall enable mov 30h,#00lp2: mov a,30h movc a,a+dptr inc 30h cjne a,#254,xianshi_geming sjmp c1xianshi_geming: mov p1,a lcall write_1602sjmp lp2c1:mov p1,#0c0h ;歌詞顯示地址lcall enablelp3:mov a,30h movc a,a+dptr ;取音符碼cjne a,#0ffh,c6sjmp s0c6:cjne a,#42,c0 ;音符碼為休止符不開定時器,直接調(diào)用延時 inc 30hmov a,30hmovc a,a+dptrinc 30hmov 35h,alp12: lcall delay_100ms djnz 35h,lp12sjmp lp3c0:mov 36h,ainc 30hmov a,30hmovc a,a+dptrmov 35h,ainc 30hlca

溫馨提示

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

最新文檔

評論

0/150

提交評論