版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
...wd......wd......wd...AT89C51的屏幕聲光式可錄音電子琴摘要:本文的主要內(nèi)容是用AT89S51單片機為核心控制元件,通過脈沖觸發(fā)產(chǎn)生出電子音調(diào),與按鍵、揚聲器、LCD顯示屏等模塊組成控制模塊,設(shè)計一個電子琴。該系統(tǒng)運行穩(wěn)定,其優(yōu)點是硬件電路簡單,軟件功能完善,控制系統(tǒng)可靠,性價比擬高等,具有一定的實用與參考價值。關(guān)鍵詞:AT89C51、脈沖觸發(fā)、屏幕聲光式、錄音、播放、演奏、電子琴。第一章引言1.1設(shè)計背景單片微型計算機是大規(guī)模集成電路技術(shù)開展的產(chǎn)物,屬第四代電子計算機,它具有高性能、高速度、體積小、價格低廉、穩(wěn)定可靠、應(yīng)用廣泛的特點。它的應(yīng)用必定導(dǎo)致傳統(tǒng)的控制技術(shù)從根本上發(fā)生變革。因此,單片機的開發(fā)應(yīng)用已成為高科技和工程領(lǐng)域的一項重大課題。電子琴是現(xiàn)代電子科技與音樂結(jié)合的產(chǎn)物,是一種新型的鍵盤樂器。它在現(xiàn)代音樂扮演著重要的角色,單片機具有強大的控制功能和靈活的編程實現(xiàn)特性,它已經(jīng)溶入現(xiàn)代人們的生活中,成為不可替代的一局部。本文對利用單片機設(shè)計簡易電子琴進(jìn)展了分析,分別從原理圖,主要芯片,各模塊原理及各模塊的程序的調(diào)試來詳細(xì)闡述。本系統(tǒng)是簡易電子琴的設(shè)計,按下四角自鎖開關(guān)會使LCD顯示屏顯示當(dāng)前音符名稱、播放的歌曲名稱或播放的錄音名稱,同時揚聲器播放對應(yīng)的音符,LED閃爍相應(yīng)的節(jié)奏。通過設(shè)計本系統(tǒng)可熟悉掌握單片機的根本功能。1.2設(shè)計任務(wù)1、設(shè)計以單片機為核心的簡易電子琴系統(tǒng),可隨意彈奏想要表達(dá)的音樂;2、針對要求控制的對象完成程序的編制;3、硬件軟件聯(lián)調(diào),完成題目所要求的功能;1.3設(shè)計思路1、發(fā)聲局部設(shè)計思路音樂是由不同頻率的聲音組成的。利用程序來控制單處機某個口線的“高〞電平或低電平,則在該口線上就能產(chǎn)生一定頻率的矩形波。利用延時程序控制“高〞“低〞電平的持續(xù)時間,就能改變輸出頻率,從而改變音調(diào)。于是產(chǎn)生do,re,mi,fa,so,la,xi七個音符的變換。2、顯示局部設(shè)計思路考慮到信息的多媒體傳播已經(jīng)成為信息化時代的主流,我們給電子琴設(shè)計了LCD顯示器和節(jié)拍指示LED燈,帶來視聽雙重沖擊。LCD具有功耗低,顯示質(zhì)量高,數(shù)字式接口更加穩(wěn)定可靠的優(yōu)點。演示過程中可顯示歡送語,當(dāng)前功能,按下的音符名稱,當(dāng)前播放的歌曲名稱等。第二章方案論證采用AT89C51單片機作為主控芯片,設(shè)置獨立按鍵、揚聲器、LCD顯示屏等外圍器件,另外還用到一些簡單器件如NPN型三極管及電阻等。利用按鍵實現(xiàn)音符和音調(diào)的輸入;LCD顯示屏進(jìn)展被操作的按鍵顯示;用PNP型三極管2N2907實現(xiàn)低音頻功率放大;最后用揚聲器發(fā)音。主控芯片采用AT89C51單片機,它是大規(guī)模集成電路技術(shù)開展的產(chǎn)物,具有高性能、高速度、體積小、價格低廉、穩(wěn)定可靠、應(yīng)用廣泛的特點。防止了由于元器件種類、個數(shù)繁多,而過于復(fù)雜的硬件電路也容易引起系統(tǒng)的精度不高、體積過大等不利因素。同時具有強大的控制功能和靈活的編程實現(xiàn)特性,由于本設(shè)計主要用于娛樂方面,因此在設(shè)計上盡量使其安全以及簡單易操作。具有經(jīng)濟可行性、技術(shù)可行性、實物應(yīng)用性。第三章硬件系統(tǒng)設(shè)計3.1時鐘電路MCS-51內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是此放大器的輸入端輸出端。本圖采用內(nèi)部時鐘電路,如圖3-1所示,通常在引腳XTALl和XTAL2上跨接石英晶體X1和兩個補償電容C1、C2構(gòu)成自激振蕩器??梢愿鶕?jù)情況選擇212MHz頻率之間的石英晶體,補償電容通常選擇30pF左右的瓷片電容。圖3-1時鐘電路3.2復(fù)位電路單片機小系統(tǒng)常采用上電自動復(fù)位和手動按鍵復(fù)位兩種方式實現(xiàn)系統(tǒng)的復(fù)位操作。本實驗采用上電自動復(fù)位方式,其構(gòu)造圖如圖3-2所示。上電復(fù)位要求接通電源后,自動實現(xiàn)復(fù)位操作。復(fù)位電路的根本功能是:系統(tǒng)上電時提供復(fù)位信號,直至系統(tǒng)電源穩(wěn)定后,撤銷復(fù)位信號。對于MCS-51單片機,只要在RST復(fù)位端接一個電容至VCC和一個電阻至VSS即可。在加電瞬間,RST端出現(xiàn)一定時間的高電平,只要高電平保持時間足夠長,就可以使MCS-51復(fù)位。圖3-2復(fù)位電路3.3原理框圖本系統(tǒng)有主控芯片AT89C52、揚聲器、顯示模塊、按鍵模塊和晶振復(fù)位電路組成。圖3-3原理框圖3.4顯示局部設(shè)計為了讓電子琴能夠顯示出音調(diào),我們另外附加了一個LCD1602提供屏幕式音調(diào)顯示,LCD1602屬于字符型液晶,可以顯示字母和數(shù)字等字符。LCD1602是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個字符液晶模塊〔顯示字符和數(shù)字〕。圖3-4顯示電路3.5按鍵局部設(shè)計3.5.1鍵盤設(shè)計鍵盤可以分為2類:獨立連接式鍵盤和矩陣式鍵盤。本設(shè)計采用獨立式鍵盤。獨立式按鍵是直接用I/O口線構(gòu)成的單個按鍵電路,其特點是每個按鍵單獨占用一根I/O口線,每個按鍵的工作不會影響其它I/O口線的狀態(tài)。獨立式按鍵電路配置靈活,軟件構(gòu)造簡單。獨立式按鍵軟件常采用查詢式構(gòu)造。先逐位查詢每根I/O口線的輸入狀態(tài),如某一根I/O口線輸入為低電平,則可確認(rèn)該I/O口線所對應(yīng)的按鍵已按下,然后,再轉(zhuǎn)向該鍵的功能處理程序。由于本程序較為簡單,為了使用方便及節(jié)省資源,選擇獨立式鍵盤。以下列圖為獨立式鍵盤電路圖:圖3-5獨立式鍵盤電路圖3.5.2去抖動鍵盤編程中主要考慮去抖動的問題。當(dāng)測試說明有鍵被按下之后,緊接著就進(jìn)展去抖動處理。因為按鍵是機械開關(guān)構(gòu)造,由于機械觸點的彈性及電壓突跳等原因,在觸點閉合或斷開的瞬間會出現(xiàn)電壓抖動。為保證鍵識別的準(zhǔn)確,在電壓信號抖動的情況下不能進(jìn)展行狀態(tài)輸入。為此需進(jìn)展去抖動處理。去抖動有硬件和軟件兩種方法。硬件方法就是加去抖動CPU便確認(rèn)此按鍵己按下,消除了抖動。本實驗采用軟件消抖法,在按鍵按下后,執(zhí)行一段延時程序。3.6發(fā)音局部設(shè)計如以下列圖所示,發(fā)音電路是由揚聲器、三極管、變位器構(gòu)成。由三極管來驅(qū)動揚聲器發(fā)音的,同時加上變位器實現(xiàn)電阻的可調(diào)來增強驅(qū)動電流,提高驅(qū)動能力,從而調(diào)節(jié)揚聲器的音效。圖3-6揚聲器電路圖第四章軟件系統(tǒng)設(shè)計4.1系統(tǒng)分析4.1.1系統(tǒng)軟件的組成〔1〕鍵盤掃描程序:檢測是否有按鍵按下,有按鍵按下則記錄按下鍵的鍵值,并跳轉(zhuǎn)至功能轉(zhuǎn)移程序;無按鍵按下,則返回鍵盤掃描程序繼續(xù)檢測?!?〕功能轉(zhuǎn)移程序:對檢測到的按鍵值進(jìn)展判斷,是琴鍵則跳轉(zhuǎn)至琴鍵處理程序,是功能鍵則跳轉(zhuǎn)至相應(yīng)的功能程序,我們設(shè)計的功能程序有三種,即音色調(diào)節(jié)功能、自動播放樂曲和錄音的功能?!?〕琴鍵處理程序:根據(jù)檢測到的按鍵值,查詢音調(diào)表,給計時器賦值,使發(fā)出相應(yīng)頻率的聲音?!?〕自動播放歌曲程序:檢測到按鍵按下的是自動播放歌曲功能鍵后執(zhí)行該程序,電子琴會自動播放事先已經(jīng)存放的歌曲或錄音歌曲,歌曲播放完畢之后自動返回至鍵盤掃描程序,繼續(xù)等待是否有按鍵按下。〔5〕錄音程序:檢測到按鍵按下的是錄音功能鍵后執(zhí)行該程序,跳轉(zhuǎn)到鍵盤掃描程序,檢測是否有鍵按下,有按鍵按下則記錄按下鍵值,根據(jù)檢測到的按鍵值,查詢音調(diào)表,給計時器賦值,使發(fā)出相應(yīng)頻率的聲音并跳轉(zhuǎn)到功能轉(zhuǎn)移程序。4.1.2系統(tǒng)總體功能流程圖開場開場初始化T0初始化T0鍵盤掃描鍵盤掃描程序演奏功能鍵按下自動播放鍵按下錄音功能鍵按下NN演奏功能鍵按下自動播放鍵按下錄音功能鍵按下YYY記錄音符記錄音符播放內(nèi)部存儲的音樂查表得到按鍵音符頻率播放內(nèi)部存儲的音樂查表得到按鍵音符頻率查表得到按鍵音符頻率查表得到按鍵音符頻率播放音符播放音符播放音符播放音符4.2參數(shù)計算4.2.1發(fā)音原理假設(shè)要產(chǎn)生音頻脈沖,只要算出某一音頻的周期〔1/頻率〕,再將此周期除以2,即為半周期的時間。利用定時器計時半周期時間,每當(dāng)計時終止后就將P1.0反相,然后重復(fù)計時再反相。就可在P1.0引腳上得到此頻率的脈沖。利用AT89C51的內(nèi)部定時器使其工作計數(shù)器模式〔MODE1〕下,改變計數(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,其周期T=1/523=1912μs,因此只要令計數(shù)器計時956μs/1μs=956,每計數(shù)956次時將I/O反相,就可得到中音DO〔523Hz〕。計數(shù)脈沖值與頻率的關(guān)系式是:N=fi÷2÷fr,式中,N是計數(shù)值;fi是機器頻率〔晶體振蕩器為12MHz時,其頻率為1MHz〕;fr是想要產(chǎn)生的頻率。其計數(shù)初值T的求法如下:T=65536-N=65536-fi÷2÷fr例如:設(shè)K=65536,fi=1MHz,求中音DO〔261Hz〕。T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr,中音DO的T=65536-500000/523=64580。由音符的頻率值可以計算得出各個音調(diào)的計數(shù)值,如表4-1所示:〔﹟叫升記號,表示把音在原來的根基上升高半音,b叫降記音,表示在原來的根基上降低半音。〕表4-1音調(diào)頻率與計數(shù)初值對照音符頻率〔Hz〕計數(shù)值〔T值〕音符頻率〔Hz〕計數(shù)值〔T值〕低1DO26263628#4FA#74064860#1DO#27763737中5SO78464898低2RE29463835#5SO#83194934#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#166165235#2RE#62264884高6LA176065252中3MI65964732#6LA#186565268中4FA69864820高7SI196765283采用查表程序進(jìn)展查表時,可以為這個音符建設(shè)一個表格,有助于單片機通過查表的方式來獲得相應(yīng)的數(shù)據(jù)。4.2.3節(jié)拍確實定假設(shè)要構(gòu)成音樂,光有音調(diào)是不夠的,還需要節(jié)拍,讓音樂具有旋律〔固定的律動〕,而且可以調(diào)節(jié)各個音的快滿度?!肮?jié)拍〞,即Beat,簡單說就是打拍子,就像我們聽音樂不自主的隨之拍手或跺腳。假設(shè)1拍實0.5s,則1/4拍為0.125s,只要設(shè)定延遲時間就可以求得節(jié)拍的時間,假設(shè)1拍為4DELAY,則1/4應(yīng)為1DELAY,以此類推,得到如表4-2所示的節(jié)拍與延遲時間對照表。休止符表示暫停發(fā)音。表4-21/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è)計4.3.1播放子程序〔包括自動播放存儲音樂和按鍵發(fā)音〕本設(shè)計共兩種播放模式,包括自動播放存儲音樂和按鍵發(fā)音。上電后,首先開中斷并設(shè)定定時器0為工作方式1,當(dāng)自動播放鍵按下時,進(jìn)入中斷,根據(jù)樂譜在定義的音頻數(shù)組中查找相應(yīng)音律,然后給定時器賦初值,即開場播放音樂。當(dāng)DO、RE、MI、FA、SO、LA、SI七種音符鍵按下時,根據(jù)音符值在定義的音頻數(shù)組中查找相應(yīng)音律,然后給定時器賦初值,即按鍵發(fā)音。開場開場開中斷并設(shè)定工作存放器開中斷并設(shè)定工作存放器有鍵按下有鍵按下自動播放鍵按下自動播放鍵按下進(jìn)入中斷N進(jìn)入中斷YY根據(jù)yinfu和工作方式取值,并在數(shù)組中查找相應(yīng)音律進(jìn)入中斷根據(jù)yinfu和工作方式取值,并在數(shù)組中查找相應(yīng)音律進(jìn)入中斷給定時器T0賦值根據(jù)樂譜在數(shù)組中查找相應(yīng)音律給定時器T0賦值根據(jù)樂譜在數(shù)組中查找相應(yīng)音律播放鍵值對應(yīng)的音符播放鍵值對應(yīng)的音符給定時器T0賦值給定時器T0賦值播放音樂播放音樂第五章實驗結(jié)果5.1硬件調(diào)試硬件調(diào)試主要是針對單片機局部進(jìn)展的調(diào)試。在上電之前,先確保電路中不存在斷路或短路情況,這一工作是整個調(diào)試工作的第一步,也是非常重要的一個步驟。在這局部調(diào)試中主要使用的工具是萬用表,用來完成檢測電路中是否存在斷路或者短路情況的任務(wù)。注意焊點之間,確保焊點沒有短接在一起,同時注意焊點的美觀,確保沒有開路以及短路的現(xiàn)象出現(xiàn)。在確保硬件電路正常且無異常情況(斷路或短路)的情況下方可上電調(diào)試,上電調(diào)試的目的是檢驗電路是否接錯,同時還要檢驗原理是否正確,在本次設(shè)計中,上電調(diào)試主要是檢測單片機控制局部、數(shù)碼管點亮局部、和音頻轉(zhuǎn)換電路硬件調(diào)試。1、數(shù)碼管LED電路調(diào)試:接通電源,隨機按下按鈕可以看到數(shù)碼管顯示數(shù)字。2、鍵盤單片機控制局部調(diào)試:上電后,隨機按動鍵盤可以發(fā)現(xiàn)各個按鍵對應(yīng)的音正確。5.2軟件調(diào)試調(diào)試主要方法和技巧:通常一個調(diào)試程序應(yīng)該具備至少四種性能:跟蹤、斷點、查看變量、更改數(shù)值。整個程序是一個主程序調(diào)用各個子程序?qū)崿F(xiàn)功能的過程,要使主程序和整個程序都能平穩(wěn)運行,各個模塊的子程序的正確與平穩(wěn)運行必不可少,所以在軟件調(diào)試的最初階段就是把各個子程序模塊進(jìn)展分別調(diào)試。5.3仿真結(jié)果第六章總結(jié)本次51單片機課程設(shè)計我們組做的是《基于AT89C51單片機的屏幕式聲光電子琴的設(shè)計》,通過這次的DIY制作的學(xué)習(xí),我學(xué)到了不少知識,真正體會到了學(xué)以致用的快感,通過自己動手制作小作品不僅加深了我們對51單片機的理解,而且也增強了我們對音樂的興趣,也因此喜歡上了各種基于51單片機的小制作,從而更好地將課本知識與實踐過程相結(jié)合。在這次課程設(shè)計中,主要涉及了軟件和硬件兩個方面的內(nèi)容。在軟件方面,我們掌握了仿真軟件proteus的仿真方法,實現(xiàn)了7音符的發(fā)聲、錄音以及音樂的自動播放功能,同時也提高了我們用匯編語言編程的能力;在硬件方面,我們對電子產(chǎn)品的開發(fā)流程和功能應(yīng)用有了一定的了解,進(jìn)一步熟悉和掌握了單片機的內(nèi)部構(gòu)造和工作原理,了解了單片機應(yīng)用系統(tǒng)設(shè)計的根本方法和步驟。并且提高了我們運用所學(xué)的專業(yè)根基知識來解決實際問題的能力,加深了對所學(xué)理論知識的理解和運用,動手能力也得到了相應(yīng)的提高,創(chuàng)新意識得到了鍛煉。在本次的實驗設(shè)計中,我們在借鑒前人的根基上也對自己的作品進(jìn)展了一局部創(chuàng)新,①在設(shè)置錄音功能方面,根據(jù)隨機彈奏的音調(diào),將其偏移地址存入36H單元中,然后通過查詢音調(diào)表,使其發(fā)出相應(yīng)頻率的聲音,從而彈奏出事先錄好的一段音樂。②在控制節(jié)奏方面,我們設(shè)置了休止符,來控制節(jié)奏的停頓,這樣就能產(chǎn)生有停頓感的音樂,而不是連續(xù)的,使音樂聽起來更加悅耳。而這些創(chuàng)新均基于匯編語言的學(xué)習(xí)。總體來說,此次單片機課程設(shè)計使我們收獲良多,雖然課程設(shè)計的過程中遇到了很多困難與問題,但我們最終還是完成了設(shè)計的任務(wù)及要求。也讓我認(rèn)識到,無論做什么事情,只要你足夠堅強,有足夠的毅力和決心,有足夠的挑戰(zhàn)困難的勇氣,就沒有什么辦不到的。最后,衷心感謝教師給我們提供了這樣一次難得的時機來展示自己的作品,激發(fā)了我們對單片機DIY小制作的興趣,也感謝教師在這個學(xué)期孜孜不倦的教悔,讓我們在學(xué)習(xí)單片機的根基知識的同時,真正體會到學(xué)以致用帶來的快感。由此我覺得,我們的學(xué)習(xí)不僅要在教師引導(dǎo)和幫助下順利入門,還要掌握自動控制原理課程的精華和要點,并且能夠“由厚及薄〞,到達(dá)對課程整體的把握,具有一定的工程概念和實踐能力。附錄一:源程序RSEQUP3.5RWEQUP3.6EEQUP3.7ORG00HSJMPMAINORG00BHMOVTH0,33HMOVTL0,34HCPLP3.4RETI;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ORG001BHINC3CH;中斷服務(wù),中斷計數(shù)器加1MOVTH1,#0D8HMOVTL1,#0EFH;12M晶振,形成10毫秒中斷RETI;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ORG30HMAIN:SETBP3.4;關(guān)閉揚聲器LCALLCSH1602;初始化1602MOVTMOD,#11H;設(shè)置定時器0為工作模式1SETBEA;開總中斷SETBET0;開定時器0中斷HUANYING:MOVP1,#80H;歡送語顯示地址LCALLENABLEMOVDPTR,#TAB_HYMOV30H,#00LP:MOVA,30HMOVCA,@A+DPTRJZKEYLCALLDELAY_100MSLCALLWRITE_1602INC30HSJMPLPKEY:MOVP1,#01H;清屏ACALLENABLEMOVP1,#80HLCALLENABLEMOVDPTR,#TAB_YANZHOUMOV30H,#00LP7:MOVA,30HMOVCA,@A+DPTRJZKEY_0LCALLWRITE_1602INC30HSJMPLP7KEY_0:MOVP1,#0C0H;音符的顯示地址LCALLENABLEMOV38H,#16;寫入1602的顯示地址指針MOV35H,#2;控制節(jié)拍KEY_1:MOVP2,#0FFH;置P2為輸入JBP2.0,KEY_2;K1鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.0,$MOV36H,#0;裝入1的音符碼相對地址LCALLBOFANG_YFKEY_2:JBP2.1,KEY_3;K2鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.1,$MOV36H,#2LCALLBOFANG_YFKEY_3:JBP2.2,KEY_4;K3鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.2,$MOV36H,#4LCALLBOFANG_YFKEY_4:JBP2.3,KEY_5;K4鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.3,$MOV36H,#6LCALLBOFANG_YFKEY_5:JBP2.4,KEY_6;K5鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.4,$MOV36H,#8LCALLBOFANG_YFKEY_6:JBP2.5,KEY_7;K6鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.5,$MOV36H,#10LCALLBOFANG_YFKEY_7:JBP2.6,KEY_9;K7鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.6,$MOV36H,#12LCALLBOFANG_YFKEY_9:JBP3.2,KEY_1;K9鍵沒按下,重新掃描LCALLDELAY_10MS;延時消抖JNBP3.2,$LCALLDELAY_10MS;-----------播放音樂程序段---------------MOVP1,#01H;清屏ACALLENABLEMOVP1,#80HLCALLENABLEMOVDPTR,#TAB_PLAYMOV30H,#00LP8:MOVA,30HMOVCA,@A+DPTRJZPLAYLCALLWRITE_1602INC30HSJMPLP8PLAY:MOVP2,#0FFH;置P2為輸入JBP2.0,PLAY_2;K1鍵沒按下,轉(zhuǎn)移MOVDPTR,#TAB_GEQU1;存曲目標(biāo)志LCALLBOFANG_GEQUPLAY_2:JBP2.1,PLAY_3;K2鍵沒按下,轉(zhuǎn)移SETBET1MOV3BH,TMODMOVTMOD,#11Hmovdptr,#tab2movp1,#0c0hlcallenablelcallwrite1MOVDPTR,#DAT2LCALLMUSIc0CLRTR1CLRET1MOVTMOD,3BHPLAY_3:JBP2.2,PLAY_4;K3鍵沒按下,轉(zhuǎn)移SETBET1MOV3BH,TMODMOVTMOD,#11Hmovdptr,#tab1movp1,#0c0hlcallenablelcallwrite1MOVDPTR,#DAT1LCALLMUSIc0CLRTR1CLRET1MOVTMOD,3BHPLAY_4:JBP2.3,PLAY_9MOVR1,#50HLCALLBOFANG_LUYINPLAY_9:JBP3.2,PLAY;K8鍵沒按下,重新掃描LCALLDELAY_10MS;延時消抖JNBP3.2,$LCALLDELAY_10MS;------------錄音程序段---------------MOVP1,#01H;清屏ACALLENABLEMOVP1,#80HLCALLENABLEMOVDPTR,#TAB_RECORDMOV30H,#00LP9:MOVA,30HMOVCA,@A+DPTRJZRECORD_0LCALLWRITE_1602INC30HSJMPLP9RECORD_0:MOVR1,#50H;錄取音符存放地址MOV35H,#3;控制節(jié)拍MOVP1,#0C0H;音符的顯示地址LCALLENABLEMOV38H,#16;寫入1602的顯示地址指針;---------寫入錄音的名字---------MOV30H,#00C5:MOVA,30HLCALLTAB_RECORDINGMOV@R1,A INCR1 INC30H CJNEA,#0FEH,C5RECORD_1:MOVP2,#0FFH;置P2為輸入JBP2.0,RECORD_2;K1鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.0,$MOV36H,#0;裝入1的音符碼相對地址LCALLBOFANG_YFLCALLCUNCU;調(diào)存音符子程序RECORD_2:JBP2.1,RECORD_3;K2鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.1,$MOV36H,#2LCALLBOFANG_YFLCALLCUNCURECORD_3:JBP2.2,RECORD_4;K3鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.2,$MOV36H,#4LCALLBOFANG_YFLCALLCUNCURECORD_4:JBP2.3,RECORD_5;K4鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.3,$MOV36H,#6LCALLBOFANG_YFLCALLCUNCURECORD_5:JBP2.4,RECORD_6;K5鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.4,$MOV36H,#8LCALLBOFANG_YFLCALLCUNCURECORD_6:JBP2.5,RECORD_7;K6鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.5,$MOV36H,#10LCALLBOFANG_YFLCALLCUNCURECORD_7:JBP2.6,RECORD_8;K7鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.6,$MOV36H,#12LCALLBOFANG_YFLCALLCUNCURECORD_8:JBP2.7,RECORD_9;K8鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.7,$MOV36H,#42;休止符標(biāo)志存36HLCALLDELAY_100MSLCALLCUNCURECORD_9:JNBP3.2,J0;K8鍵沒按下,重新掃描 LJMPRECORD_1J0:LCALLDELAY_10MS;延時消抖JNBP3.2,$LCALLDELAY_10MS MOV@R1,#255;寫入歌曲完畢標(biāo)志 LJMPKEY;回演奏模式;***********子程序區(qū)***************;=======初始化1602顯示器========CSH1602:MOVP3,#0FFHMOVP1,#01HACALLENABLEMOVP1,#38HACALLENABLEMOVP1,#0CHACALLENABLEMOVP1,#06HACALLENABLERET;====1602發(fā)命令子程序====ENABLE:CLRRSCLRRWCLREACALLDELAY_2MSSETBERET;=====讀1602IR中命令子程序======ENABLE_1:CLRRSSETBRWCLREACALLDELAY_2MSSETBERET;====寫數(shù)據(jù)子程序(1602)====WRITE_1602:MOVP1,ASETBRSCLRRWCLREMOVR5,#50;延時100us〔12M晶振〕DJNZR5,$SETBERET;===========播放一個音符并顯示音符和頻譜=========BOFANG_YF:MOVA,36HLCALLTAB_YFMOV33H,AMOVA,36HINCALCALLTAB_YFMOV34H,AMOVTH0,33HMOVTL0,34HSETBTR0;啟動定時器0MOVA,36H;取音符的顯示碼LCALLTAB_YF1LCALLWRITE_1602DEC38HMOVA,36HINCALCALLTAB_YF1LCALLWRITE_1602DJNZ38H,D2;1602一行沒寫滿,轉(zhuǎn)移MOV30H,#16;1602滿行清行并從頭開場寫MOVP1,#0C0HLCALLENABLEMOVA,#''LP10:LCALLWRITE_1602DJNZ30H,LP10MOV38H,#16MOVP1,#0C0HLCALLENABLE;----------顯示頻譜分析條程序段----------D2:MOVA,36H;音符碼轉(zhuǎn)換為相應(yīng)鍵值MOVB,#2DIVABADDA,#1MOV39H,AMOV3AH,39H;保護音符碼對應(yīng)的鍵值MOVP1,#85H;設(shè)定頻譜分析條顯示初地址LCALLENABLEMOVA,#'>'D5:LCALLWRITE_1602DJNZ39H,D5;--------控制節(jié)拍時長程序段---------MOV37H,35H;保護循環(huán)次數(shù)控制〔節(jié)拍〕LP1:ACALLDELAY_100MSDJNZ35H,LP1;延時次數(shù)控制MOV35H,37H;---------發(fā)音完畢,去除頻譜分析條------------MOVP1,#85H;頻譜分析條顯示的初地址LCALLENABLEMOVA,#''MOV39H,3AHD6:LCALLWRITE_1602DJNZ39H,D6MOVA,#10H;釋放音符碼顯示地址CLRCSUBBA,38HADDA,#0C0HMOVP1,ALCALLENABLECLRTR0;關(guān)定時器0RET;===========播放一個音符并顯示頻譜=========BOFANG_YF_1:MOVA,36HLCALLTAB_YFMOV33H,AMOVA,36HINCALCALLTAB_YFMOV34H,AMOVTH0,33HMOVTL0,34HSETBTR0;啟動定時器0;----------顯示頻譜分析條程序段----------MOVA,36H;音符碼轉(zhuǎn)換為相應(yīng)鍵值MOVB,#2DIVABADDA,#1MOV39H,AMOV3AH,39H;保護音符碼對應(yīng)的鍵值MOVP1,#85H;設(shè)定頻譜分析條顯示初地址LCALLENABLEMOVA,#'>'D7:LCALLWRITE_1602DJNZ39H,D7;--------控制節(jié)拍時長程序段---------MOV37H,35H;保護循環(huán)次數(shù)控制〔節(jié)拍〕LP11:ACALLDELAY_100MSDJNZ35H,LP11;延時次數(shù)控制MOV35H,37H;---------發(fā)音完畢,去除頻譜分析條------------MOVP1,#85H;頻譜分析條顯示的初地址LCALLENABLEMOVA,#''MOV39H,3AHD8:LCALLWRITE_1602DJNZ39H,D8CLRTR0;關(guān)定時器0RET;============播放一首歌并顯示歌名=============;------〔一個音符2字節(jié)存儲,音符碼存低字節(jié),節(jié)拍存高字節(jié);254為歌曲名完畢標(biāo)志,255為歌曲完畢標(biāo)志〕----------BOFANG_GEQU:MOVP1,#0C0H;歌名顯示地址LCALLENABLEMOV30H,#00LP2: MOVA,30H MOVCA,@A+DPTR INC30H CJNEA,#254,XIANSHI_GEMING SJMPC1XIANSHI_GEMING:MOVP1,ALCALLWRITE_1602 SJMPLP2C1: MOVP1,#0C0H;歌詞顯示地址 LCALLENABLELP3: MOVA,30HMOVCA,@A+DPTR;取音符碼 CJNEA,#0FFH,C6 SJMPS0C6: CJNEA,#42,C0;音符碼為休止符不開定時器,直接調(diào)用延時INC30H MOVA,30H MOVCA,@A+DPTR INC30H MOV35H,ALP12:LCALLDELAY_100MSDJNZ35H,LP12 SJMPLP3C0: MOV36H,A INC30H MOVA,30H MOVCA,@A+DPTR MOV35H,A INC30H LCALLBOFANG_YF_1 SJMPLP3S0: RET;============播放一錄音并顯示歌名和歌詞=============;------〔一個音符2字節(jié)存儲,音符碼存低字節(jié),節(jié)拍存高字節(jié);254為歌曲名完畢標(biāo)志,255為歌曲完畢標(biāo)志〕----------BOFANG_LUYIN:MOVP1,#0C0H;歌名顯示地址LCALLENABLELP4: MOVA,@R1 INCR1 CJNEA,#254,XIANSHI_LUYIN SJMPC2XIANSHI_LUYIN:MOVP1,ALCALLWRITE_1602 SJMPLP4C2: MOVP1,#0C0H;歌詞顯示地址 LCALLENABLELP5: MOVA,@R1;取音符碼 CJNEA,#255,C3 SJMPS2C3: CJNEA,#42,C4;音符碼為休止符不開定時器,直接調(diào)用延時INCR1 MOVA,@R1 MOV35H,A INCR1LP6:LCALLDELAY_100MSDJNZ35H,LP6 SJMPLP5C4:MOV36H,A INCR1 MOVA,@R1 MOV35H,A INCR1 LCALLBOFANG_YF_1 SJMPLP5S2: RET;============存音符子程序==============CUNCU:CJNER1,#0F0H,CUNCU_1MOV@R1,#255SJMPS1;滿160字節(jié)不存儲CUNCU_1:MOV@R1,36HINCR1MOV@R1,35HINCR1S1:RET;=========延時100ms〔12M晶振〕========DELAY_100MS:MOV31H,R6MOV32H,R7MOVR7,#200D1:MOVR6,#250DJNZR6,$DJNZR7,D1MOVR7,32HMOVR6,31HRET;====延時10MS(12MHz晶振)====DELAY_10MS:MOV31H,R6MOV32H,R7MOVR6,#20D0:MOVR7,#248DJNZR7,$DJNZR6,D0MOVR7,32HMOVR6,31HRET;======延時2MS〔12M晶振〕========DELAY_2MS:MOV31H,R6MOV32H,R7MOVR7,#4D3:MOVR6,#255D4:DJNZR6,D4DJNZR7,D3MOVR7,32HMOVR6,31HRET;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!MUSIc0:MOV3DH,R2MOV3EH,R3MOVTH1,#0FFHMOVTL1,#0FFH;表頭地址送DPTRMOV3CH,#00H;中斷計數(shù)器清0MOVB,#00H;表序號清0MUSIC1:NOPCLRAMOVCA,@A+DPTR;查表取代碼JZEND0;是00H,則完畢CJNEA,#0FFH,MUSIC5LJMPMUSIC3MUSIC5:NOPMOV40h,AINCDPTRMOVA,BMOVCA,@A+DPTR;取節(jié)拍代碼送R7MOV41h,ASETBTR1;啟動計數(shù)MUSIC2:NOPCPLP3.4MOVA,40hMOVR3,ALCALLDELMOVA,41hCJNEA,3CH,MUSIC2;中斷計數(shù)器(20H)=R7否?;不等,則繼續(xù)循環(huán)MOV3CH,#00H;等于,則取下一代碼INCDPTR;INCBLJMPMUSIC1MUSIC3:NOPCLRTR1;休止100毫秒MOVR2,#0DHMUSIC4:NOPMOVR3,#0FFHLCALLDELDJNZR2,MUSIC4INCDPTRLJMPMUSIC1END0:NOPMOVR2,#64H;歌曲完畢,延時1秒后繼續(xù)MUSIC6:MOVR3,#00HLCALLDELDJNZR2,MUSIC6 MOVR3,3EH MOVR2,3DHRETDEL:;延時10*R3usNOPNOPNOP NOP NOP NOP NOPNOPDJNZR3,DELREtwrite1:MOV37H,R1movr1,#00ha1:mova,r1movca,@a+dptrcallwrite2incr1cjnea,#00h,a1MOVR1,37Hretwrite2:movp1,asetbrsclrrwclrelcalldelay_2MSsetberetTAb1:db'bayueguihuaxiang',00hTAb2:db'nizaitaxianghaih',00hDAT1:DB18H,30H,1CH,10HDB20H,40H,1CH,10HDB18H,10H,20H,10HDB1CH,10H,18H,40HDB1CH,20H,20H,20HDB1CH,20H,18H,20HDB20H,80H,0FFH,20HDB30H,1CH,10H,18HDB20H,15H,20H,1CHDB20H,20H,20H,26HDB40H,20H,20H,2BHDB20H,26H,20H,20HDB20H,30H,80H,0FFHDB20H,20H,1CH,10HDB18H,10H,20H,20HDB26H,20H,2BH,20HDB30H,20H,2BH,40HDB20H,20H,1CH,10HDB18H,10H,20H,20HDB26H,20H,2BH,20HDB30H,20H,2BH,40HDB20H,30H,1CH,10HDB18H,20H,15H,20HDB1CH,20H,20H,20HDB26H,40H,20H,20HDB2BH,20H,26H,20HDB20H,20H,30H,80HDB20H,30H,1CH,10HDB20H,10H,1CH,10HDB20H,20H,26H,20HDB2BH,20H,30H,20HDB2BH,40H,20H,15HDB1FH,05H,20H,10HDB1CH,10H,20H,20HDB26H,20H,2BH,20HDB30H,20H,2BH,40HDB20H,30H,1CH,10HDB18H,20H,15H,20HDB1CH,20H,20H,20HDB26H,40H,20H,20HDB2BH,20H,26H,20HDB20H,20H,30H,30HDB20H,30H,1CH,10HDB18H,40H,1CH,20H
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市場營銷經(jīng)理面試技巧策略與執(zhí)行能力考核
- 財務(wù)經(jīng)理面試題集專業(yè)能力測試
- 流程自動化工程師的績效考核指標(biāo)設(shè)定
- 安全閥校驗考試題庫及答案解析
- 環(huán)保行業(yè)技術(shù)人員面試要點與答案
- 互聯(lián)網(wǎng)公司CTO面試題
- 搜索引擎優(yōu)化SEO實戰(zhàn)面試題含答案
- 高級會計師面試題集及答案參考
- 通信設(shè)備安裝工程師面試題庫
- 游戲測試進(jìn)度匯報及反饋機制
- 2025課堂懲罰 主題班會:馬達(dá)加斯加企鵝課堂懲罰 課件
- 本科《行政領(lǐng)導(dǎo)學(xué)》期末紙質(zhì)考試總題庫2025版
- 肘管綜合征超聲診斷與評估
- 上海市中考語文古詩文必背篇目匯總
- 家裝設(shè)計的職責(zé)【部門職能】1、接待裝-112702874
- 大類資產(chǎn)配置量化模型研究系列之五:不同協(xié)方差矩陣估計方法對比分析
- 雜物電梯維護保養(yǎng)施工方案
- 《菉竹山房》優(yōu)質(zhì)教學(xué)課件
- GB/T 23794-2023企業(yè)信用評價指標(biāo)
- GA 1468-2018寄遞企業(yè)安全防范要求
評論
0/150
提交評論