基于單片機的電子琴設(shè)計論文.doc_第1頁
基于單片機的電子琴設(shè)計論文.doc_第2頁
基于單片機的電子琴設(shè)計論文.doc_第3頁
基于單片機的電子琴設(shè)計論文.doc_第4頁
基于單片機的電子琴設(shè)計論文.doc_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

電子琴設(shè)計目錄摘要2abstract21. 總體方案任務(wù)及要求3電子琴系統(tǒng)的組成4系統(tǒng)框圖52. 方案論證與比較 61. 控制器部分 62. 顯示部分 63. 鍵盤部分 74. 音頻部分 75. 供電部分 83. 系統(tǒng)的具體設(shè)計及實現(xiàn)105. 硬件設(shè)計 101. 1602液晶屏顯示設(shè)計112. 鍵盤設(shè)計 143. 音頻功放設(shè)計156. 軟件設(shè)計201. 主程序流程142. 音頻與鍵盤程序流程213. lcd1602流程254. 測試、結(jié)果及分析257. 基本功能268. 發(fā)揮功能部分269. 其他發(fā)揮部分26參考文獻27附錄一、系統(tǒng)原理圖28附錄二、系統(tǒng)源代碼28摘 要電子琴是現(xiàn)代電子科技與音樂結(jié)合的產(chǎn)物,是一種新型的鍵盤樂器。它在現(xiàn)代音樂扮演著重要的角色,單片機具有強大的控制功能和靈活的編程實現(xiàn)特性,它已經(jīng)溶入現(xiàn)代人們的生活中,成為不可替代的一部分。本文的主要內(nèi)容是用at89c51單片機為核心控制元件,設(shè)計一個電子琴。以單片機作為主控核心,與鍵盤、揚聲器等模塊組成核心主控制模塊,在主控模塊上設(shè)有16個按鍵和揚聲器。本系統(tǒng)運行穩(wěn)定,其優(yōu)點是硬件電路簡單,軟件功能完善,控制系統(tǒng)可靠,性價比較高等,具有一定的實用和參考價值。abstract 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 functions and flexible programming characteristics. it has converged with modern peoples lives, become an irreplaceable part. the main content is at89c51 control of the core components, design of a electronic organ. scm as a host to the core, with the keyboard, speaker and other core modules. in the main control module has 16 keys and a speaker. the system is steady, its simple hardware circuits, software functions, reliability of control system and high cost performance is its advantages. it also has certain practical and reference value.設(shè)計任務(wù)與要求1.任務(wù)設(shè)計制作一個電子琴2要求1.基本要求:1)可以通過按鍵控制發(fā)音,能夠發(fā)出1、2、3、4、5、6、7、i等八個音符;2)可以播放已存儲的音樂;3)能夠自動演奏多首(兩首以上)樂曲,且演奏方式可選擇(如重復(fù)播放或者順序播放等)。2.擴展要求:1)可以發(fā)出八個以上的音符;2)進行音調(diào)、音量的選擇;3)可以對編奏樂曲進行錄音,在按下放音鍵時能演奏出來;4)其他。 電子琴系統(tǒng)的組成單片機因體積小、功能強、價格低廉而得到廣泛應(yīng)用。at89c51單片機設(shè)計微型電子琴的方法,僅需at89c51最小系統(tǒng),擴展一組矩陣鍵盤,再接一組發(fā)光二極管用來指示電子琴的工作狀態(tài)。本系統(tǒng)分為兩個部分,一個是音樂另一個就是電子琴。音樂播放部分:樂音實際上是有固定周期的信號。本文介紹用at89c51的兩個定時器(如t0,t1)控制,在p3.7腳上輸出方波周期信號,產(chǎn)生樂音,通過矩陣鍵盤按鍵產(chǎn)生不同的音符,由此操作人員可以隨心所欲的彈奏自己所喜愛的樂曲,當(dāng)不想彈奏時通過按放歌鍵可以演奏事先存放在單片機中的幾首動聽的曲子供消遣。當(dāng)歌曲演奏完時,通過按復(fù)位鍵便可回到初始狀態(tài),這樣就做出了一臺微型電子琴。由于一首音樂是許多不同的音階組成的,而每個音階對應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂了,當(dāng)然對于單片機來產(chǎn)生不同的頻率非常方便,我們可以利用單片機的定時/計數(shù)器t0來產(chǎn)生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應(yīng)頻率關(guān)系弄正確即可。樂曲中,每一音符對應(yīng)著確定的頻率,我們將每一音符的時間常數(shù)和其相應(yīng)的節(jié)拍常數(shù)作為一組,按順序?qū)非械乃谐?shù)排列成一個表,然后由查表程序依次取出,產(chǎn)生音符并控制節(jié)奏,就可以實現(xiàn)演奏效果。電子琴彈奏部分:實際上就是把每個按鍵所對應(yīng)的值經(jīng)過處理后發(fā)給單片機,再在單片機內(nèi)把數(shù)字當(dāng)作指針指向所對應(yīng)的音符。系統(tǒng)框圖該系統(tǒng)通過電子琴按鍵隨意鍵入所要表達的音符,作為電平送給主體電路,中央處理器通過識別,解碼輸出音符,在揚聲器中發(fā)出有效的聲音。通過這樣可以不斷的彈奏音樂。嵌入式電路,按鍵電路,led顯示電路和兩個功能鍵組成,通過功能鍵可以選擇播放音樂。其主要模塊由五個部分組成,具體關(guān)系如圖3-1所示:功能選擇 (彈奏/播放,還可給矩陣鍵盤賦第二功能)4x4矩陣式鍵盤音頻51單片機at89c51led顯示圖3-1 帶存儲的電子琴框圖上圖即為此次設(shè)計中的電子琴的硬件結(jié)構(gòu)圖,我們運用單片機的最小系統(tǒng),用p2口的高四位和p2口的低四位作4x4矩陣式按鍵的接口,用p1口作lcd1602的接口。二.方案論證與比較1控制器 采用stc89c52單片機作為主控芯片。優(yōu)點:stc89c52作為一種比較成熟的單片機型號,廣范應(yīng)用于各領(lǐng)域技術(shù)比較熟練,價格相對便宜。并且與51有相同的內(nèi)核,熟悉程度深,操作快捷方便,可以直接用窗口下載程序,便于程序下載調(diào)試。2.顯示部分方案一:led流水燈。優(yōu)點:價格低廉,操作方便,控制容易,布板省時,使用得當(dāng)非常地引人注目。缺點:顯示的信息不大直觀,往往只能起到單純裝飾的作用。方案二:lcd1602。優(yōu)點:可以較好的顯示所要表達的內(nèi)容,直觀明了。缺點:接線比較復(fù)雜,需要驅(qū)動多,需要輸入比較多的內(nèi)容來生成字符,增加了難度,花費較多的時間。論證:為了比較好的顯示內(nèi)容,達到要求效果,使用方案二。3.鍵盤 方案一 :獨立式鍵盤。優(yōu)點: 利用i/o口直接連接的獨立式鍵盤,每鍵都有相應(yīng)的i/o口對應(yīng),編程容易控制,實現(xiàn)方便;缺點:但io口有限,能接的按鍵不能太多,而本系統(tǒng)需用戶根據(jù)需要調(diào)整的參數(shù)較多,用獨立按鍵會使操作變得復(fù)雜。方案二 :利用pa口接成4*4鍵盤。(用附加鍵增加原放音鍵的功能)優(yōu)點:利用8個io口得到16個按鍵,可使操作界面變得簡單,接線也相對短,經(jīng)過精心設(shè)計,不但不用擔(dān)心飛線,還能減少空間。操作也方便,并且因為給了同一個鍵雙重定義,是在不增加按鍵的情況下使功能更多,節(jié)省了大量資源。缺點:軟件處理比獨立按鍵復(fù)雜。論證:通過比較,方案二為最佳方案。3.音頻部分 方案一:蜂鳴器。優(yōu)點:簡便,價格低廉。缺點:聲音有些難聽。 方案二:三極管+喇叭。 優(yōu)點:相對而言接線也不太復(fù)雜,便于調(diào)試,音質(zhì)相對較好。 缺點:二極管容易設(shè)計出問題,并且不是很穩(wěn)定。 方案三:lm386+喇叭 優(yōu)點:音質(zhì)比較好,用了比較專門的音頻功放,穩(wěn)定性也比較好。 缺點:必須學(xué)習(xí)功放的相關(guān)知識,接線復(fù)雜,由于對元件較陌生成功率會低一些。論證:本著學(xué)習(xí),與挑戰(zhàn)自我,并追求完美的想法,嘗試使用新的東西,用以完成更好的效果。5.供電端口方案一:電池+二極管降壓 優(yōu)點:非常容易實現(xiàn) 缺點:穩(wěn)定性不高,電壓比標(biāo)準(zhǔn)值大一些。方案二:usb供電 優(yōu)點:穩(wěn)定性好 缺點:帶負載能力不強 方案三:穩(wěn)壓電源 優(yōu)點:帶負載能力強,電壓穩(wěn)定論證:使用方案三。三.系統(tǒng)設(shè)計與實現(xiàn) 1.硬件設(shè)計1.1 1602液晶顯示的設(shè)計在日常生活中,我們對液晶顯示器并不陌生。液晶顯示模塊已作為很多電子產(chǎn)品的通過器件,如在計算器、萬用表、電子表及很多家用電子產(chǎn)品中都可以看到,顯示的主要是數(shù)字、專用符號和圖形。在單片機的人機交流界面中,一般的輸出方式有以下幾種:發(fā)光管、led數(shù)碼管、液晶顯示器。發(fā)光管和led數(shù)碼管比較常用,軟硬件都比較簡單,在前面章節(jié)已經(jīng)介紹過,在此不作介紹,本章重點介紹字符型液晶顯示器的應(yīng)用。在單片機系統(tǒng)中應(yīng)用晶液顯示器作為輸出器件有以下幾個優(yōu)點:由于液晶顯示器每一個點在收到信號后就一直保持那種色彩和亮度,恒定發(fā)光,而不像陰極射線管顯示器(crt)那樣需要不斷刷新新亮點。因此,液晶顯示器畫質(zhì)高且不會閃爍。液晶顯示器都是數(shù)字式的,和單片機系統(tǒng)的接口更加簡單可靠,操作更加方便。液晶顯示器通過顯示屏上的電極控制液晶分子狀態(tài)來達到顯示的目的,在重量上比相同顯示面積的傳統(tǒng)顯示器要輕得多。相對而言,液晶顯示器的功耗主要消耗在其內(nèi)部的電極和驅(qū)動ic上,因而耗電量比其它顯示器要少得多。1)液晶顯示簡介液晶顯示原理液晶顯示的原理是利用液晶的物理特性, 通過電壓對其顯示區(qū)域進行控制,有電就有顯示,這樣即可以顯示出圖形。液晶顯示器具有厚度薄、適用于大規(guī)模集成電路直接驅(qū)動、易于實現(xiàn)全彩色顯示的特點,目前已經(jīng)被廣泛應(yīng)用在便攜式電腦、數(shù)字?jǐn)z像機、pda移動通信工具等眾多領(lǐng)域。液晶顯示器的分類液晶顯示的分類方法有很多種,通??砂雌滹@示方式分為段式、字符式、點陣式等。除了黑白顯示外,液晶顯示器還有多灰度有彩色顯示等。如果根據(jù)驅(qū)動方式來分,可以分為靜態(tài)驅(qū)動(static)、單純矩陣驅(qū)動(simple matrix)和主動矩陣驅(qū)動(active matrix)三種。液晶顯示器各種圖形的顯示原理:點陣圖形式液晶由mn個顯示單元組成,假設(shè)lcd顯示屏有64行,每行有128列,每8列對應(yīng)1字節(jié)的8位,即每行由16字節(jié),共168=128個點組成,屏上6416個顯示單元與顯示ram區(qū)1024字節(jié)相對應(yīng),每一字節(jié)的內(nèi)容和顯示屏上相應(yīng)位置的亮暗對應(yīng)。例如屏的第一行的亮暗由ram區(qū)的000h00fh的16字節(jié)的內(nèi)容決定,當(dāng)(000h)=ffh時,則屏幕的左上角顯示一條短亮線,長度為8個點;當(dāng)(3ffh)=ffh時,則屏幕的右下角顯示一條短亮線;當(dāng)(000h)=ffh,(001h)=00h,(002h)=00h,(00eh)=00h,(00fh)=00h時,則在屏幕的頂部顯示一條由8段亮線和8條暗線組成的虛線。這就是lcd顯示的基本原理。用lcd顯示一個字符時比較復(fù)雜,因為一個字符由68或88點陣組成,既要找到和顯示屏幕上某幾個位置對應(yīng)的顯示ram區(qū)的8字節(jié),還要使每字節(jié)的不同位為“1”,其它的為“0”,為“1”的點亮,為“0”的不亮。這樣一來就組成某個字符。但由于內(nèi)帶字符發(fā)生器的控制器來說,顯示字符就比較簡單了,可以讓控制器工作在文本方式,根據(jù)在lcd上開始顯示的行列號及每行的列數(shù)找出顯示ram對應(yīng)的地址,設(shè)立光標(biāo),在此送上該字符對應(yīng)的代碼即可。2)1602lcd主要技術(shù)參數(shù):顯示容量:162個字符芯片工作電壓:4.55.5v工作電流:2.0ma(5.0v)模塊最佳工作電壓:5.0v字符尺寸:2.954.35(wh)mm3)引腳功能說明1602lcd采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表10-13所示:編號符號引腳說明編號符號引腳說明1vss電源地9d2數(shù)據(jù)2vdd電源正極10d3數(shù)據(jù)3vl液晶顯示偏壓11d4數(shù)據(jù)4rs數(shù)據(jù)/命令選擇12d5數(shù)據(jù)5r/w讀/寫選擇13d6數(shù)據(jù)6e使能信號14d7數(shù)據(jù)7d0數(shù)據(jù)15bla背光源正極8d1數(shù)據(jù)16blk背光源負極4)電路原理圖2.2矩陣鍵盤 在本系統(tǒng)中,針對用戶調(diào)整各項參數(shù)時的需要,我們采用了4*4鍵盤,只占用8個io口(p1口)就實現(xiàn)了16個按鍵,使操作界面更加人性化,操作過程更加簡單、方便。鍵盤的原理圖如下圖所示。pcb設(shè)計3. lm386及喇叭lm386是美國國家半導(dǎo)體公司生產(chǎn)的音頻功率放大 器,主要應(yīng)用于低電壓消費類產(chǎn)品。為使外圍元件最少,電壓增益內(nèi)置為20。但在1腳和8腳之間增加一只外接電阻和電容,便可將電壓增益調(diào)為任意值,直至 200。輸入端以地位參考,同時輸出端被自動偏置到電源電壓的一半,在6v電源電壓下,它的靜態(tài)功耗僅為24mw,使得lm386特別適用于電池供電的場 合。lm386是一種音頻集成功放,具有自身功耗低、電壓增益可調(diào)整、電源電壓范圍大、外接元件少和總諧波失真小等優(yōu)點,廣泛應(yīng)用于錄音機和收音機之中。1)lm386內(nèi)部電路lm386內(nèi)部電路原理圖如圖所示。與通用型集成運放相類似,它是一個三級放大電路。第一級為差分放大電路,t1和t3、t2和t4分別構(gòu)成復(fù)合管,作為差分放大電路的放大管;t5和t6組成鏡像電流源作為t1和t2的有源負載;t3和t4信號從管的基極輸入,從t2管的集電極輸出,為雙端輸入單端輸出差分電路。使用鏡像電流源作為差分放大電路有源負載,可使單端輸出電路的增益近似等于雙端輸出電容的增益。第二級為共射放大電路,t7為放大管,恒流源作有源負載,以增大放大倍數(shù)。第三級中的t8和t9管復(fù)合成pnp型管,與npn型管t10構(gòu)成準(zhǔn)互補輸出級。二極管d1和d2為輸出級提供合適的偏置電壓,可以消除交越失真。引腳2為反相輸入端,引腳3為同相輸入端。電路由單電源供電,故為otl電路。輸出端(引腳5)應(yīng)外接輸出電容后再接負載。電阻r7從輸出端連接到t2的發(fā)射極,形成反饋通路,并與r5和r6構(gòu)成反饋網(wǎng)絡(luò),從而引入了深度電壓串聯(lián)負反饋,使整個電路具有穩(wěn)定的電壓增益。2)lm386的引腳圖lm386的外形和引腳的排列如右圖所示。引腳2為反相輸入端,3為同相輸入端;引腳5為輸出端;引腳6和4分別為電源和地;引腳1和8為電壓增益設(shè)定端;使用時在引腳7和地之間接旁路電容,通常取10f。lm386的封裝形式有塑封8引線雙列直插式和貼片式。3)特性(features): 靜態(tài)功耗低,約為4ma,可用于電池供電。 工作電壓范圍寬,4-12v or 5-18v。 外圍元件少。 電壓增益可調(diào),20-200。 低失真度4)電路設(shè)計原理圖5)pcb設(shè)計圖三.軟件設(shè)計1.主程序流程圖掃描主按鍵開始按下?有鍵接n進入子菜單執(zhí)行 主體程序流程圖2.音頻按鍵控制流程2.1變音調(diào)在彈奏的基礎(chǔ)上設(shè)計偏移量,實現(xiàn)同一按鍵的不同聲調(diào)值(彈奏同圖1)進進入相應(yīng)的子目錄執(zhí)行進開始n退出有無主按鍵按下2.2彈奏播音流程 掃描矩陣鍵盤彈奏音符、顯示音高開始有鍵接下?有無主按鍵按下n退出2.3播放音樂流程進入子菜單目錄執(zhí)行相應(yīng)操作開始掃描子菜單按鍵掃描主控制鍵掃描鍵盤有鍵接下?有無主按鍵按下ny退出2.4錄音控制流程 按順序播放彈奏的音樂開始檢查數(shù)組是否為空退出有無主按鍵按下ny 3. lcd1602運行流程四.測試結(jié)果與分析1.基本功能要求功能實現(xiàn)情況可以通過按鍵控制發(fā)音,能夠發(fā)出1、2、3、4、5、6、7、i等八個音符;實現(xiàn)的比較好,音效也比較好可以播放已存儲的音樂;可流暢播放多首歌曲能夠自動演奏多首(兩首以上)樂曲,且演奏方式可選擇(如重復(fù)播放或者順序播放等)。實現(xiàn)此功能,可以自動播放,同時擴展了彈奏鍵的功能,效果更好2.擴展功能要求功能實現(xiàn)功能可以發(fā)出八個以上的音符實行此功能,由彈奏鍵擴展了更多的音調(diào),聲音豐富進行音調(diào)、音量的選擇在比較大范圍內(nèi)調(diào),音效也比較好可以對編奏樂曲進行錄音,在按下放音鍵時能演奏出來可以,但是是從單片機內(nèi)部存儲,效果不是很好,能存的量也比較小,播放不很順暢其他增加一塊液晶用以顯示歌名音量等,可以實現(xiàn),當(dāng)播放略有延遲。參考文獻8051單片機實踐與應(yīng)用沈慶明 清華大學(xué)出版社c語言程序設(shè)計譚浩強 清華大學(xué)出版社c51單片機及應(yīng)用系統(tǒng)設(shè)計徐煜明 電子工業(yè)出版社新概念51單片機c語言教程郭天祥 哈爾濱工業(yè)大學(xué)出版社十天學(xué)會單片機教程 郭天祥單片機原理及接口技術(shù)梅麗 清華大學(xué)出版社altium designer 6 設(shè)計教程北京工業(yè)大學(xué)出版社protues入門仿真與實例人民郵電出版社altium designer6.9 pcb設(shè)計教程郭天祥附錄一完整原理圖附錄二系統(tǒng)源代碼#include#include#define mk p3 /定義p3口為主控鍵#define key_port p2 、/矩陣鍵盤接口#define lcd_date p1/液晶接口sbit lcdrs=p32;sbit lcdrw=p31;sbit lcden=p30;unsigned char temp,temp1,tem,num;unsigned char sth0,stl0;sbit spk =p00; 、/蜂鳴器unsigned char ni10=0,0,0,0;unsigned char code str0=welcome!;unsigned char code str1=lanhuacao;unsigned char code str2=edlewaiss;unsigned char code str3=childhood;unsigned char code str4=do re mi fa so la si;unsigned char code song55=6,10,10,10,10,10,9,8,9,8,7,6,6,13,13,13,13,13,13,12,3,12,12,11,10,10,10,13,13,12,10,10,9,8,9,8,7,6,6,3,3,8,8,7,6,6,10,9,8,7,5,13,13,-1, 8,9,10,8,8,9,10,8,10,11,12,10,11,12, 12,13,12,11,10,8,12,13,12,11,10,8,8,12,8,8,5,8,-1, 5,5,8,9,10,10,11,10,8,9,8,6,8,5,8,9,10,10,11,12,8, 11,11,10,12,9,10,10,9,9,10,12,14,14,14,13,13,12,12,13,14,13,12,10,-1;unsigned char code len55=1,1,1,1,2,1,1,1,1,1,2,2,1,1,1,1,1,2,1,1,1,1,1,1,2,2,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,-1, 2,2,2,2,2,2,2,2,2,2,4,2,2,4,1,1,1,1,2,2,1,1,1,1,2,2,2,2,4,2,2,4,-1, 2,2,2,2,2,1,1,2,2,4,2,2,8,4,2,2,2,1,1,2,2, 2,1,1,2,1,1,1,1,6,4,2,2,2,1,1,4,2,1,1,2,1,1,8,-1; 、/音符對應(yīng)的t值表 unsigned int code tab=0,63628,63835,64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178,65217,65252,65283;void delay(unsigned int z) /延時zms unsigned int x,y;for(x=z;x0;x-)for(y=110;y0;y-); /tr0=0; void time0(void) interrupt 1 using 0 /定時器0中斷 th0=sth0; tl0=stl0; spk=!spk; unsigned char mkey() /檢查主控制按鈕,并返回按鍵值 unsigned char m1=0;mk=0xff;tem=mk;tem=tem&0xff;while(tem!=0xff)&(m1=0) delay(5); tem=mk; tem=tem&0xff; if(tem!=0xff) m1=1; return tem; void write_com(unsigned char com)lcdrs=0;/根據(jù)lcd1602的時序圖在數(shù)據(jù)線不同的高低電平狀態(tài)下寫入數(shù)據(jù),從而區(qū)分是命令還是數(shù)據(jù)lcd_date =com;delay(5);lcden=1;delay(5);lcden=0; /*函數(shù)名稱: write_dat 函數(shù)參數(shù):uchar dat函數(shù)功能: 向lcd芯片寫入要顯示的數(shù)據(jù)(dat)函數(shù)入口:uchar dat*/void write_dat(unsigned char dat)lcdrs=1;/根據(jù)lcd1602的時序圖在數(shù)據(jù)線不同的高低電平狀態(tài)下寫入數(shù)據(jù),從而區(qū)分是命令還是數(shù)據(jù)lcd_date =dat;delay(5);lcden=1;delay(5);lcden=0; /*函數(shù)名稱:lcd1602_init 函數(shù)參數(shù): 無函數(shù)功能: 初始化lcd1602,完成一系列的命令寫入函數(shù)入口:無*/void lcd1602_init ()lcden=0;lcdrw=0;write_com(0x38);/初始化write_com(0x0f);/ 顯示和開關(guān)設(shè)置write_com(0x06);/ 顯示和開關(guān)設(shè)置write_com(0x01);/清屏write_com(0x80);/初始數(shù)據(jù)指針void gsh(unsigned char a) /顯示歌曲名 unsigned int i; / lcd1602_init(); for(i=0;i9;i+) write_dat(ai); delay(2); / write_com(0x01);void ysh(unsigned char a) /顯示音高 unsigned int i; / lcd1602_init(); write_com(0x80+0x40); for(i=0;ia;i+) write_dat(|); delay(8); /write_com(0x01);unsigned char keyscan(unsigned char offset) /掃描矩陣鍵盤,并加上偏移量實現(xiàn)音調(diào)的可調(diào) lcd1602_init ();num=99; key_port=0x7f;/掃描第一行 temp=key_port; / 如果第一行有鍵按下,則值發(fā)生變化 temp=temp&0x0f; while(temp!=0x0f)/如何有鍵按下再掃描值,有鍵按下了temp值就不為0xf0了 delay(5) ; temp=key_port; /延遲5毫秒之后再掃描按鍵 temp=temp&0x0f; while(temp!=0x0f)/temp值真的發(fā)生變化則說明有鍵按下temp=key_port;switch(temp)case 0x77: num=0;break;case 0x7b: num=1;break;case 0x7d: num=2;break;case 0x7e : num=3;/對鍵賦值,定義用戶想要的值break;num=(num+offset)%21;spk=!spk;sth0=tabnum/256;stl0=tabnum%256;tr0=1;while(temp!=0x0f)temp=key_port;temp=temp&0x0f; /松手檢測,對temp賦新值,使跳出掃描循環(huán) tr0=0;ysh(num+1); key_port=0xbf; /掃描第二行 temp=key_port; temp=temp&0x0f; while(temp!=0x0f)/如何有鍵按下再掃描值,有鍵按下了temp值就不為0xf0了 delay(5) ; temp=key_port; temp=temp&0x0f; while(temp!=0x0f)temp=key_port;switch(temp)case 0xb7: num=4;break;case 0xbb: num=5;break;case 0xbd: num=6;break;case 0xbe: num=7;/對鍵賦值,定義用戶想要的值break;num=(num+offset)%21; spk=!spk;sth0=tabnum/256;stl0=tabnum%256;tr0=1;while(temp!=0x0f)temp=key_port;temp=temp&0x0f; /松手檢測,對temp賦新值,使跳出掃描循環(huán)tr0=0;ysh(num+1); key_port=0xdf;/掃描第三行 temp=key_port; temp=temp&0x0f; while(temp!=0x0f)/如何有鍵按下再掃描值,有鍵按下了temp值就不為0xf0了 delay(5) ; temp=key_port; temp=temp&0x0f; while(temp!=0x0f)temp=key_port;switch(temp)case 0xd7 : num=8;break;case 0xdb : num=9;break;case 0xdd : num=10;break;case 0xde: num=11;/對鍵賦值,定義用戶想要的值break;num=(num+offset)%21; spk=!spk;sth0=tabnum/256;stl0=tabnum%256;tr0=1;while(temp!=0x0f)temp=key_port;temp=temp&0x0f; /松手檢測,對temp賦新值,使跳出掃描循環(huán) tr0=0;ysh(num+1); key_port=0xef;/掃描第四行 temp=key_port; temp=temp&0x0f; while(temp!=0x0f)/如何有鍵按下再掃描值,有鍵按下了temp值就不為0xf0了 delay(5) ; temp=key_port; temp=temp&0x0f; while(temp!=0x0f)temp=key_port;switch(temp)case 0xe7 : num=12;break;case 0xeb: num=13;break;case 0xed : num=14;break;case 0xee: num=15;/對鍵賦值,定義用戶想要的值break;num=(num+offset)%21;spk=!spk;sth0=tabnum/256;stl0=tabnum%256;tr0=1;while(temp!=0x0f)temp=key_port;temp=temp&0x0f; /松手檢測,對temp賦新值,使跳出掃描循環(huán) tr0=0;ysh(num+1); return num; unsigned char play() /彈奏音樂 unsigned char hi, i,t,m=0; while(m=0) hi=keyscan(8); if(hi!=99) nii=hi; i+; t=mkey();if(t!=0xff) m=1;return t; unsigned char fg(unsigned char k) /放第k首歌曲 unsigned char b, t,j=0,m=0;unsigned char *pe;lcd1602_init ();switch(k) case 0:gsh(str1); pe=str1;break; case 1:gsh(str2); pe=str2;break; case 2:gsh(str3);pe=str3;break;while(songkj!=-1) &(m=0) b=songkj ; sth0=(tabb)/256; stl0=(tabb)%256; tr0=1; lcd1602_init (); gsh(pe); write_com(0x80+0x40); ysh(b); delay(120*lenkj); tr0=0; t=mkey(); if(t!=0xff) m=1;key_port=0xfe;/掃描第一行temp=key_port; / 如果第一行有鍵按下,則值發(fā)生變化 temp=temp&0xf0; while(temp!=0xf0)&(m=0)/如何有鍵按下再掃描值,有鍵按下了temp值就不為0xf0了 delay(5) ; temp=key_port; /延遲5毫秒之后再掃描按鍵 temp=temp&0xf0; while(temp!=0xf0)&(m=0)/temp值真的發(fā)生變化則說明有鍵按下/temp=key_port; m=1;t=temp; j+;if(m!=1) t=0xf0;return t;unsigned char shxu() /順序播放音樂 unsigned char p,q=0; p=fg(q); while(p=0xf0) &q3) q+; p=fg(q); return p;unsigned char danqu(unsigned char k) /單曲播放音樂 unsigned char p; p=fg(k); while(p=0xf0) p=fg(k); return p; unsigned char msong() /放音樂的主函數(shù) unsigned char m=0,i=0;while(m=0) /temp=mkey(); /if(temp!=0xf0) /m=1; /else/ key_port=0xfe;/掃描第一

溫馨提示

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

最新文檔

評論

0/150

提交評論