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

下載本文檔

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

文檔簡(jiǎn)介

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論