版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目錄</b></p><p><b> 1引言1</b></p><p><b> 2硬件設(shè)計(jì)2</b></p><p> 2.1硬件電路的設(shè)計(jì)框圖2</p><p> 2.2硬件電路設(shè)計(jì)模塊的選定2</p><
2、p> 2.2.1中心模塊2</p><p> 2.2.2播放模塊3</p><p> 2.2.3顯示模塊4</p><p> 2.2.4電子琴模塊4</p><p> 2.3各硬件電路的具體設(shè)計(jì)5</p><p> 2.3.1 AT89S52控制模塊的設(shè)計(jì)5</p><
3、p> 2.3.2按鍵模塊的設(shè)計(jì)6</p><p> 2.3.3揚(yáng)聲器播放模塊的設(shè)計(jì)7</p><p> 2.3.4 LCD顯示電路的設(shè)計(jì)7</p><p> 2.3.5彩燈伴奏電路的設(shè)計(jì)8</p><p><b> 3軟件設(shè)計(jì)9</b></p><p> 3.1單片機(jī)發(fā)
4、聲的基本原理9</p><p> 3.2設(shè)計(jì)的相關(guān)音樂(lè)說(shuō)明9</p><p> 3.3切換原理10</p><p> 3.4音樂(lè)播放器軟件程序設(shè)計(jì)10</p><p> 3.4.1按鍵掃描子程序設(shè)計(jì)10</p><p> 3.4.2 1ms延時(shí)程序設(shè)計(jì)14</p><p>
5、 3.4.3 LCD顯示子程序設(shè)計(jì)15</p><p> 3.4.4函數(shù)初始化子程序設(shè)計(jì)16</p><p> 3.4.5系統(tǒng)主程序設(shè)計(jì)17</p><p><b> 4結(jié)論19</b></p><p><b> 參考文獻(xiàn)20</b></p><p>
6、附錄一 硬件原理圖21</p><p> 附錄二 軟件主程序22</p><p><b> 致謝32</b></p><p><b> 摘 要</b></p><p> 目前流行的MP3播放器的音質(zhì)已相當(dāng)好,但略感遺憾的是除了選擇歌曲和顯示歌名外,絕大部分播放器沒(méi)有諸如隨意彈奏樂(lè)曲、樂(lè)
7、曲節(jié)奏跳動(dòng)等功能。而隨著人們生活水平的不斷提高,單片機(jī)控制無(wú)疑是人們追求的目標(biāo)之一。要為現(xiàn)代人工作、生活提供更好的更方便的服務(wù)就需要從單片機(jī)技術(shù)著手,一切向著數(shù)字化控制、智能化控制方向發(fā)展。</p><p> 本設(shè)計(jì)是采用單片機(jī)為核心設(shè)計(jì)的數(shù)字音樂(lè)播放器。本設(shè)計(jì)在實(shí)現(xiàn)音樂(lè)的播放及歌曲名顯示等基本功能的基礎(chǔ)上進(jìn)行了擴(kuò)展,添加了彩燈伴奏、按鍵彈奏、顯示音樂(lè)節(jié)拍等功能。</p><p> 本
8、論文給出了系統(tǒng)方案的建立、硬件電路的詳細(xì)設(shè)計(jì)及軟件的程序?qū)崿F(xiàn)。并通過(guò)軟硬件的聯(lián)立調(diào)試,驗(yàn)證了設(shè)計(jì)方案的可行性。</p><p> 關(guān)鍵詞:多功能;MP3音樂(lè)播放器;單片機(jī);按鍵彈奏</p><p><b> Abstract</b></p><p> The current popular MP3 player sound has bee
9、n quite good, but feel regretful slightly is in addition to the choice of songs and display the song name, most players without such as random play music rhythm, music and other functions. But as people living standard r
10、ise ceaselessly, SCM control is one of the goals that people pursue. For the modern life of work, to provide better and more convenient service needs from proceed toward the SCM technology, all digital control, intellige
11、nt control direc</p><p> This design is the use of single-chip microcomputer as the core design of the digital music player. The design in the implementation of music playing and the song name display and o
12、ther basic functions based on the expansion, adding lights accompaniment, play button, display the beat of the music and other functions.</p><p> This paper gives a system scheme, hardware establishment det
13、ailed circuit design and software program. And through the software and hardware of simultaneous debugging, verify the feasibility of the design scheme.</p><p> Key words: multi function; MP3 music player;
14、single chip microcomputer; play button</p><p><b> 1引言</b></p><p> 二十世紀(jì)九十年代以來(lái),計(jì)算機(jī)、信息、電子、控制、通信等技術(shù)得到迅速發(fā)展,促使了社會(huì)生產(chǎn)力的提高,也使人們的生產(chǎn)方式和生活方式產(chǎn)生了日新月異的變化。隨著人們生活水平的提高及對(duì)音樂(lè)的喜愛(ài),對(duì)音樂(lè)播放器的品質(zhì),功能,品種等提出了越來(lái)越
15、多的要求,表現(xiàn)在對(duì)控制系統(tǒng)性能、可靠性等要求越來(lái)越高。而品質(zhì)的提高,功能的更新,可靠性的增強(qiáng),品種的變化無(wú)不與產(chǎn)品的核心控制部分水平的提高密不可分。家用音樂(lè)播放器產(chǎn)品及其它有關(guān)消費(fèi)電器產(chǎn)品都是一些開(kāi)環(huán)或閉環(huán)控制系統(tǒng),都由核心控制部分,執(zhí)行部分與人機(jī)界面三部分組成。而最為重要的控制部分一般是由單片機(jī)來(lái)執(zhí)行完成的,這就必將導(dǎo)致和促進(jìn)單片機(jī)在音樂(lè)領(lǐng)域應(yīng)用的發(fā)展?,F(xiàn)在這些由單片機(jī)實(shí)現(xiàn)的音樂(lè)播放器的功能越來(lái)越強(qiáng)、費(fèi)用越來(lái)越低。例如,就目前市場(chǎng)上的
16、MP3的功能越來(lái)越強(qiáng)大體積卻越來(lái)越小,價(jià)格也逐漸便宜,被大多數(shù)人所能接受。但這些音樂(lè)播放器也或多或少的存在著一些問(wèn)題,解決這些問(wèn)題,非智能化的單片機(jī)莫屬。</p><p> 本設(shè)計(jì)由硬件電路設(shè)計(jì)和軟件程序設(shè)計(jì)兩大部分組成。整個(gè)硬件電路是由中心控制、播放、選曲、顯示、電子琴和彩燈等模塊組成,中心控制模塊采用AT89S52單片機(jī),播放模塊是由8550 NPN三極管和電磁蜂鳴器組成,采用LCD1602顯示模塊,電子琴
17、設(shè)有8個(gè)按鍵,其中7個(gè)作為音符輸入,另外1個(gè)作為模式轉(zhuǎn)換按鍵,實(shí)現(xiàn)用戶自彈作曲。軟件程序運(yùn)用C語(yǔ)言編程實(shí)現(xiàn)。</p><p><b> 2 硬件設(shè)計(jì)</b></p><p> 2.1 硬件電路的設(shè)計(jì)框圖</p><p> 硬件電路如圖1所示由控制模塊、按鍵模塊、LCD顯示模塊、揚(yáng)聲器播放模塊、彩燈伴奏模塊組成。</p>&l
18、t;p> 按鍵模塊共由8個(gè)按鍵組成,其中1個(gè)鍵用于實(shí)現(xiàn)播放器自動(dòng)播放和自行彈奏兩模式間的轉(zhuǎn)換,其余7個(gè)鍵作為音符的輸入或音樂(lè)的播放選擇。LCD顯示模塊利用LCD1602對(duì)當(dāng)前播放的歌曲名稱進(jìn)行顯示。彩燈伴奏模塊則是LED通過(guò)控制模塊的控制伴隨音樂(lè)節(jié)奏閃亮。揚(yáng)聲器播放模塊由三極管及無(wú)源蜂鳴器組成,通過(guò)控制模塊的控制對(duì)當(dāng)前音樂(lè)進(jìn)行播放。</p><p> 2.2 硬件電路設(shè)計(jì)模塊的選定</p>
19、<p> 2.2.1 中心模塊</p><p> 目前應(yīng)用較為流行的單片機(jī)有AVR和51單片機(jī)。</p><p> 51系列的單片機(jī)優(yōu)點(diǎn)之一在于,它從內(nèi)部硬件到軟件有著一套完整的按位操作系統(tǒng),即位處理器,也稱布爾處理器,它的處理對(duì)象不是字或字節(jié),而是位,這就意味著它不僅能對(duì)片內(nèi)某些特殊功能寄存器的某位進(jìn)行處理,例如傳送、置位、清零、測(cè)試等,還能進(jìn)行位的邏輯運(yùn)算,這一點(diǎn)使其
20、他種類單片機(jī)很難實(shí)現(xiàn)的。</p><p> 51系列的單片機(jī)的另一個(gè)優(yōu)點(diǎn)便是具備了乘法和除法指令,其中八位除以八位的除法指令商為八位,精度顯得有些不足,因此在應(yīng)用方面不是很多,但八位乘以八位的乘法指令積為十六位,這樣的精度已經(jīng)足以滿足大部分應(yīng)用的要求了,更為重要的是,直接具備了乘法與除法指令,這就使得在實(shí)際應(yīng)用時(shí),使用者不必額外編寫相應(yīng)的子程序以備調(diào)用,與其他系列單片機(jī)相比,51系列的單片機(jī)在編程操作方面的簡(jiǎn)便
21、與實(shí)用性無(wú)疑上了一個(gè)新臺(tái)階。而同屬指令系統(tǒng)規(guī)范完整這一范疇所帶來(lái)的便利還包括了二進(jìn)制—十進(jìn)制調(diào)整指令DA,可將二進(jìn)制變?yōu)锽CD碼,這使得十進(jìn)制的計(jì)量更為快捷簡(jiǎn)便,省去了其他系列單片機(jī)還需要編寫調(diào)用相應(yīng)子程序的冗余過(guò)程,節(jié)省了大量的勞動(dòng)力和時(shí)間。</p><p> AVR單片機(jī)作為一個(gè)新興起的系列,也具有了大多數(shù)新興事物的特點(diǎn),即在原有系列的基礎(chǔ)上,擁有高性能、高速度、甚至是更低的功耗,但這些優(yōu)化與更新的性能背后
22、,也存在著一些問(wèn)題,例如其價(jià)格相比之下顯得較為昂貴,此外,它的32個(gè)通用寄存器中前16個(gè)寄存器都不能直接與立即數(shù)打交道,而不像51系列的單片機(jī)中所有的通用寄存器均可直接與立即數(shù)打交道,因而AVR系列的單片機(jī)在通用性方面無(wú)疑有所下降。由此可見(jiàn),較高的價(jià)格、較低的適用性,這兩點(diǎn)便是AVR單片機(jī)進(jìn)行市場(chǎng)推廣所存在的最大制約。</p><p> 所以,從本系統(tǒng)設(shè)計(jì)的功能需求及成本考慮,51單片機(jī)性價(jià)比更高,AT89S5
23、2是擁有2個(gè)外部中斷,2個(gè)16位定時(shí)器,2個(gè)可編程串行UART的單片機(jī)。中心控制模塊采用AT89S52單片機(jī)已完全滿足設(shè)計(jì)需要,實(shí)現(xiàn)整個(gè)系統(tǒng)控制。</p><p> 2.2.2 播放模塊</p><p> 播放模塊是由8050 NPN三極管和電磁蜂鳴器組成。AT89S52輸出高電平控制信號(hào),啟動(dòng)8050 NPN三極管使信號(hào)放大,從而啟動(dòng)電磁蜂鳴器。與LM386和喇叭的組合相比較,該播放
24、模塊存在一定噪聲,音響效果較差。但由于所需驅(qū)動(dòng)功率較小,驅(qū)動(dòng)器件要求不高,并能降低設(shè)計(jì)成本。因此,必須選用8050 NPN三極管和電磁蜂鳴器則能滿足系統(tǒng)要求[1]。</p><p> 2.2.3 顯示模塊</p><p> LED數(shù)碼管是一種數(shù)顯器件。我們知道,發(fā)光二極管(英文縮寫為L(zhǎng)ED)是由半導(dǎo)體材料制成的、能將電信號(hào)轉(zhuǎn)換成光信號(hào)的結(jié)型電致發(fā)光器件。如果把發(fā)光二極管制成條狀,再按照
25、一定方式連接,組成數(shù)字“8”,就構(gòu)成LED數(shù)碼管,簡(jiǎn)稱LED。使用時(shí)按規(guī)定使某些筆段上的發(fā)光二極管發(fā)光,即可組成0 ~ 9的一系列數(shù)字。</p><p> 液晶顯示器,簡(jiǎn)稱LCD(Liquid Crystal Display),是一種液晶利用光調(diào)制的受光型顯示器件。LCD的特點(diǎn)是體積小、形狀薄、重量輕、耗能少(1~10微瓦/平方厘米)、低發(fā)熱、工作電壓低(1.5~6伏)、無(wú)污染,無(wú)輻射、無(wú)靜電感應(yīng),尤其是視域?qū)?/p>
26、、顯示信息量大、無(wú)閃爍,并能直接與CMOS集成電路相匹配,同時(shí)還是真正的“平板”式顯示設(shè)備。 </p><p> 常見(jiàn)的基于單片機(jī)設(shè)計(jì)的音樂(lè)播放器基本不能顯示歌曲信息。該音樂(lè)播放系統(tǒng)設(shè)計(jì)上增加液晶顯示器,可為使用者提供曲目信息。由于LED數(shù)碼管只能顯示數(shù)字而無(wú)法顯示其他中英文字符,從設(shè)計(jì)的成本及功能的角度考慮,采用LCD1602顯示模塊,它可以顯示每首曲目的英文名字。LCD1602驅(qū)動(dòng)電路簡(jiǎn)單,可以由單片機(jī)直接
27、輸出命令驅(qū)動(dòng)[2]。</p><p> 2.2.4 電子琴模塊</p><p> 電子琴設(shè)有8個(gè)按鍵,其中7個(gè)作為音符輸入,另外1個(gè)作為模式轉(zhuǎn)換按鍵,實(shí)現(xiàn)用戶自彈作曲。7個(gè)按鍵分別代表7個(gè)音符,包括中音段的全部音符。通過(guò)軟硬件設(shè)計(jì),模式轉(zhuǎn)換按鍵觸發(fā)外部中斷,中斷使程序跳轉(zhuǎn),實(shí)現(xiàn)模式轉(zhuǎn)換,啟動(dòng)電子琴。然后通過(guò)查詢電子琴所按下的按鍵,讀取電子琴輸入狀態(tài),跳轉(zhuǎn)到對(duì)應(yīng)的程序人口,實(shí)現(xiàn)自編歌曲。
28、當(dāng)需要取消電子琴編曲功能時(shí),再次按下模式轉(zhuǎn)換按鍵引起外部中斷.即可退出電子琴功能而返回到原來(lái)音樂(lè)播放處。</p><p> 2.3 各硬件電路的具體設(shè)計(jì)</p><p> 2.3.1 AT89S52控制模塊的設(shè)計(jì)</p><p> AT89S52控制模塊如圖2所示,由核心芯片AT89S52單片機(jī)、單片機(jī)復(fù)位電路及外接晶振組成。</p><p
29、> 如圖2所示,電容C5、C9和12M晶振與單片機(jī)引腳XTAL1和XTAL2相連構(gòu)成外接晶振電路。AT89S51單片機(jī)內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是此放大器的輸入和輸出端。在XTAL1和XTAL2兩端跨接晶體就構(gòu)成了穩(wěn)定的自激振蕩器,其發(fā)出的脈沖直接送入內(nèi)部的時(shí)鐘電路,為單片機(jī)的工作提供時(shí)序。而XTAL1端和XTAL2端將電容C5和C5與內(nèi)部的反相放大器連接起來(lái)組成并聯(lián)諧振電路,C5
30、、C9取31pF,對(duì)頻率有微調(diào)作用。</p><p> AT89S51單片機(jī)有一個(gè)復(fù)位引腳,復(fù)位條件是:在時(shí)鐘電路工作后,當(dāng)外部電路在RST引腳施加持續(xù)2個(gè)機(jī)器周期以上的高電平時(shí),使系統(tǒng)復(fù)位。一般只要保持正脈沖的寬度為10微秒,就可是單片機(jī)安全復(fù)位。本系統(tǒng)采用按鍵手動(dòng)復(fù)位,在上電瞬間,RST引腳電位與VCC相同,隨著電容上充電電壓的增加,RST引腳電位逐漸下降。在單片機(jī)運(yùn)行期間,按下按鍵電容瞬間放電,RST引腳
31、電位與VCC相同,系統(tǒng)復(fù)位;隨著按鍵的斷開(kāi),電容又開(kāi)始充電,RST引腳電位電位逐漸下降,系統(tǒng)開(kāi)始正常工作。</p><p> 2.3.2 按鍵模塊的設(shè)計(jì)</p><p> 鍵盤在系統(tǒng)中作用在于手動(dòng)切換播放器模式、音樂(lè)彈奏時(shí)音符的輸入以及曲目的選擇。因在本系統(tǒng)中需要的按鍵并不多,單片機(jī)的I/O數(shù)完全可以滿足,所以采用了獨(dú)立式鍵盤設(shè)計(jì),如圖3所示。如圖示,按鍵均低電平有效。此外,上拉電阻保
32、證了按鍵斷開(kāi)時(shí),I/O口線有確定的高電平。在設(shè)計(jì)鍵盤的時(shí)候,還要考慮去抖問(wèn)題。常見(jiàn)的去抖的方法有兩種:硬件方法和軟件方法。單片機(jī)中常用軟件法,因此在硬件方面將不做處理。</p><p> 如圖3所示,鍵盤輸入電路中共用到八個(gè)按鍵,S1鍵用于播放器模式的切換,在軟件中計(jì)算S1鍵按下的次數(shù),一次為播放模式,二次為自行彈奏模式;S2~S8鍵在播放器為自動(dòng)播放模式時(shí)為曲目選擇鍵,即七個(gè)按鍵依次對(duì)應(yīng)一首歌曲,按下其中一個(gè)
33、鍵就播放對(duì)應(yīng)的歌曲。而在播放器為自行彈奏模式時(shí),七個(gè)鍵就對(duì)應(yīng)著七個(gè)音符,即按下某一按鍵,播放器就發(fā)出對(duì)應(yīng)音符的節(jié)奏[3]。</p><p> 2.3.3 揚(yáng)聲器播放模塊的設(shè)計(jì)</p><p> 揚(yáng)聲器播放模塊是由8050 NPN三極管和無(wú)源蜂鳴器組成,如圖4所示。無(wú)源蜂鳴器由振蕩器、電磁線圈、磁鐵、振動(dòng)膜片及外殼等組成。無(wú)源蜂鳴器發(fā)聲原理是電流通過(guò)電磁線圈,使電磁線圈產(chǎn)生磁場(chǎng)來(lái)驅(qū)動(dòng)振動(dòng)
34、膜發(fā)聲的,因此需要一定的電流才能驅(qū)動(dòng)它,單片機(jī)IO引腳輸出的電流較小,單片機(jī)輸出的TTL電平基本上驅(qū)動(dòng)不了蜂鳴器,因此設(shè)計(jì)過(guò)程中增加一個(gè)由8050 NPN三極管組成的電流放大電路。如圖所示,蜂鳴器的負(fù)極直接接地,蜂鳴器的正極接到三極管的發(fā)射極E上,三極管的基級(jí)B經(jīng)過(guò)限流電阻R9后由單片機(jī)的P22引腳控制,當(dāng)P22輸出高電平時(shí),三極管Q1截止,沒(méi)有電流流過(guò)線圈,蜂鳴器不發(fā)聲;當(dāng)P22輸出低電平時(shí),三極管導(dǎo)通,這樣蜂鳴器的電流形成回路,發(fā)
35、出聲音。因此,我們可以通過(guò)程序控制P22腳的電平來(lái)使蜂鳴器發(fā)出聲音和關(guān)閉。</p><p> 2.3.4 LCD顯示電路的設(shè)計(jì)</p><p> LCD顯示電路由單片機(jī)P0及P3.0-P3.2端口控制。我們選用的是工業(yè)字符型液晶顯示屏LCD1602,能同時(shí)顯示16*2即32個(gè)字符(16列2行)。硬件連接如圖5所示。其中變位器是為調(diào)節(jié)LCD對(duì)比度而設(shè)計(jì)。LCD的顯示驅(qū)動(dòng)在軟件中完成,硬件
36、中不做處理。</p><p> 2.3.5 彩燈伴奏電路的設(shè)計(jì)</p><p> 根據(jù)設(shè)計(jì)要求,本設(shè)計(jì)中設(shè)計(jì)了彩燈伴奏電路,彩燈采用普通發(fā)光二級(jí)管。播放器工作時(shí),發(fā)光二級(jí)管根據(jù)音樂(lè)節(jié)拍閃亮。當(dāng)播放器發(fā)出duo音時(shí),D1亮;當(dāng)播放器發(fā)出ruai音時(shí),D2亮;當(dāng)播放器發(fā)出mi音時(shí),D3亮;當(dāng)播放器發(fā)出fa音時(shí),D4亮;當(dāng)播放器發(fā)出suo音時(shí),D1、D4亮;當(dāng)播放器發(fā)出la音時(shí),D2、D3亮
37、;當(dāng)播放器發(fā)出xi音時(shí),D3、D4亮。在程序執(zhí)行過(guò)程中,單片機(jī)對(duì)發(fā)出的音符進(jìn)行檢測(cè),再輸出對(duì)應(yīng)的彩燈信號(hào)。硬件電路較簡(jiǎn)單,如圖6所示。</p><p><b> 3 軟件設(shè)計(jì)</b></p><p> 3.1 單片機(jī)發(fā)聲的基本原理</p><p> 我們知道,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來(lái)控制單處機(jī)某個(gè)口線的高電平或低電
38、平,則在該口線上就能產(chǎn)生一定頻率形波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時(shí)程序控制高 、低電平的持續(xù)時(shí)間,就能改變輸出頻率,從而改變音調(diào)。音符的節(jié)拍我們可以用定時(shí)器T0來(lái)控制,送入不同的初值,就可以產(chǎn)生不同的定時(shí)時(shí)間。便如某歌曲的節(jié)奏為每分鐘94拍,即一拍為0.64秒。但是,由于T0的最大定時(shí)時(shí)間只能為131毫秒,因此不可能直接用改變T0的時(shí)間初值來(lái)實(shí)現(xiàn)不同節(jié)拍。我們可以用T0來(lái)產(chǎn)生10毫秒的時(shí)間基準(zhǔn),然后設(shè)置一個(gè)中斷計(jì)數(shù)器,通
39、過(guò)判別中斷計(jì)數(shù)器的值來(lái)控制節(jié)拍時(shí)間的長(zhǎng)短。例如對(duì)1/4拍音符,定時(shí)時(shí)間為0.16秒,相應(yīng)的時(shí)間常數(shù)為16(即10H);對(duì)3拍音符,定時(shí)時(shí)間為1.92秒,相應(yīng)時(shí)間長(zhǎng)數(shù)為192(即C0H)。我們將每一音符的時(shí)間常數(shù)和其相應(yīng)的節(jié)拍常數(shù)作為一組,按順序?qū)?lè)曲中的所有常數(shù)排列成一個(gè)表,然后由查表程序依次取出,產(chǎn)生音符并控制節(jié)奏,就可以實(shí)現(xiàn)演奏效果。此外,結(jié)束符和休止符可以分別用代碼00H和FFH來(lái)表示,若查表結(jié)果為00H,則表示曲子終了;若查表結(jié)
40、果為FFH,則產(chǎn)生相應(yīng)的停頓效</p><p> 3.2 設(shè)計(jì)的相關(guān)音樂(lè)說(shuō)明</p><p> 要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/頻率),然后將此周期除以2,即為半周期時(shí)間。利用半周期時(shí)間定時(shí)這個(gè)半周期時(shí)間,每當(dāng)計(jì)時(shí)到后就將輸出的I/O反向,然后重復(fù)計(jì)時(shí)此半周期再對(duì)I/O反向,就可以在I/O腳上得到此頻率的脈沖。</p><p> 記數(shù)脈沖值與頻率的
41、關(guān)系公式如:N=Fi/2/Fr。N:記數(shù)值;Fi:內(nèi)部計(jì)時(shí)依次為1us,故其頻率為1 MHZ;Fr:要產(chǎn)生的頻率。</p><p> 其記數(shù)值的求法如:T=65536-N=65536-Fi/2/Fr。例:設(shè)K=65536,F(xiàn)=1000000=Fi=1 MHZ。求低音DO(26HZ),中音DO(523HZ),高音DO(1046HZ)的記數(shù)值。</p><p> 每個(gè)音符使用1個(gè)音節(jié),字節(jié)
42、的高四位代表音符的高低,低四位代表音符的節(jié)拍。如果1拍為0.4秒,1/4拍為0.1秒,假設(shè)1/4拍為 DELAY,則1拍為4 DELAY。</p><p><b> 3.3 切換原理</b></p><p> 播放器具有手動(dòng)彈奏和自行播放兩種模式,對(duì)于這兩種模式的切換,本設(shè)計(jì)是通過(guò)軟件判斷模式轉(zhuǎn)換按鍵按下的次數(shù)來(lái)實(shí)現(xiàn)的。當(dāng)模式轉(zhuǎn)換按鍵按下一次時(shí),播放器為自動(dòng)播放模
43、式;當(dāng)按鍵連續(xù)按下兩次時(shí),播放器為手動(dòng)彈奏模式。在軟件中的流程圖大致如圖7所示。</p><p> 3.4 音樂(lè)播放器軟件程序設(shè)計(jì)</p><p> 3.4.1 按鍵掃描子程序設(shè)計(jì)</p><p> 本設(shè)計(jì)中采用的獨(dú)立式鍵盤,按鍵的閉合與否直接反應(yīng)在口線的電平上,即口線的電平是呈現(xiàn)的高電平還是低電平。因此可以通過(guò)口線的電平高、低狀態(tài)檢測(cè),來(lái)確認(rèn)按鍵是否按下。但
44、如果在觸點(diǎn)抖動(dòng)期間檢測(cè)按鍵的通與斷狀態(tài),可能導(dǎo)致判斷出錯(cuò),即按鍵一次按下或釋放被錯(cuò)誤的認(rèn)為是多次操作,為克服按鍵點(diǎn)機(jī)械抖動(dòng)所致的檢測(cè)錯(cuò)誤,確保CPU對(duì)一次按鍵動(dòng)作只確認(rèn)一次按鍵,必須采取去抖動(dòng)的措施。軟件中去抖動(dòng)的措施即在第一次檢測(cè)到有鍵按下時(shí),執(zhí)行一段延時(shí)10ms的子程序,然后再次檢測(cè)該鍵的電平狀態(tài),如果該鍵電平仍保持閉合狀態(tài)電平,則確認(rèn)為真正有鍵按下[5]。</p><p> 一般把按鍵掃描程序設(shè)計(jì)成子程序
45、,以便其他程序調(diào)用[6]。程序流程圖如圖8所示:</p><p><b> 程序如下:</b></p><p> void key_scan()</p><p><b> { </b></p><p> if(key1==0)//---------------key1為模式轉(zhuǎn)換鍵)--
46、------------------</p><p><b> {</b></p><p> delay_ms(9);//延時(shí),用于消抖動(dòng)</p><p> if(key1==0)//延時(shí)后再次確認(rèn)按鍵按下</p><p><b> {</b></p><p> w
47、hile(!key1);</p><p><b> set++;</b></p><p> if(set==3)</p><p> set=1;//模式轉(zhuǎn)換按鍵選擇模式</p><p><b> }}</b></p><p> if(key2==0)//-----
48、----------key2為曲目2或音符duo)--------------------</p><p><b> {</b></p><p> delay_ms(9);//延時(shí),用于消抖動(dòng)</p><p> if(key2==0)//延時(shí)后再次確認(rèn)按鍵按下</p><p><b> { </b
49、></p><p><b> duo=1;</b></p><p> while(!key2);</p><p><b> }</b></p><p><b> }</b></p><p> if(key3==0)//---------
50、------key3為曲目3或ruai)--------------------</p><p><b> {</b></p><p> delay_ms(9);//延時(shí),用于消抖動(dòng)</p><p> if(key3==0)//延時(shí)后再次確認(rèn)按鍵按下</p><p><b> {</b>&l
51、t;/p><p><b> ru=1;</b></p><p> while(!key3);</p><p><b> }</b></p><p><b> }</b></p><p> if(key4==0)//---------------k
52、ey4為曲目4或mi)--------------------</p><p><b> {</b></p><p> delay_ms(9);//延時(shí),用于消抖動(dòng)</p><p> if(key4==0)//延時(shí)后再次確認(rèn)按鍵按下</p><p><b> {</b></p>
53、<p><b> mi=1;</b></p><p> while(!key4);</p><p><b> }</b></p><p><b> }</b></p><p> if(key5==0)//---------------key5為曲目5或f
54、a)--------------------</p><p><b> {</b></p><p> delay_ms(9);//延時(shí),用于消抖動(dòng)</p><p> if(key5==0)//延時(shí)后再次確認(rèn)按鍵按下</p><p><b> {</b></p><p>
55、;<b> fa=1;</b></p><p> while(!key5);</p><p><b> }</b></p><p><b> }</b></p><p> if(key6==0)//---------------key6為曲目6或suo)------
56、--------------</p><p><b> {</b></p><p> delay_ms(9);//延時(shí),用于消抖動(dòng)</p><p> if(key6==0)//延時(shí)后再次確認(rèn)按鍵按下</p><p><b> {</b></p><p><b&g
57、t; suo=1;</b></p><p> while(!key6);</p><p><b> }</b></p><p><b> }</b></p><p> if(key7==0)//---------------key7為曲目7或la)--------------
58、------</p><p><b> {</b></p><p> delay_ms(9);//延時(shí),用于消抖動(dòng)</p><p> if(key7==0)//延時(shí)后再次確認(rèn)按鍵按下</p><p><b> {</b></p><p><b> la=1
59、;</b></p><p> while(!key7);</p><p><b> }</b></p><p><b> }</b></p><p> if(key8==0)//---------------key8為曲目8或xi)--------------------<
60、;/p><p><b> {</b></p><p> delay_ms(9);//延時(shí),用于消抖動(dòng)</p><p> if(key8==0)//延時(shí)后再次確認(rèn)按鍵按下</p><p><b> {</b></p><p><b> xi=1;</b&g
61、t;</p><p> while(!key8);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> 3.4.2 1ms延時(shí)程序設(shè)計(jì)</p>&l
62、t;p> 延時(shí)程序一般是通過(guò)一層或多層循環(huán)實(shí)現(xiàn),整個(gè)過(guò)程延時(shí)的時(shí)間是程序執(zhí)行的指令總條數(shù)乘以執(zhí)行每條指令所用的時(shí)間。由于該系統(tǒng)的晶振選用的是12M,所以執(zhí)行每條指令所所用時(shí)間為2us,程序執(zhí)行流程如圖9所示[7]。</p><p><b> 程序如下:</b></p><p> void delay_ms(uint xms)//延時(shí)函數(shù),有參函數(shù)</
63、p><p><b> {</b></p><p><b> uint x,y;</b></p><p> for(x=xms;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p><b> }</b>
64、;</p><p> 3.4.3 LCD顯示子程序設(shè)計(jì)</p><p> 本設(shè)計(jì)中利用LCD1602顯示當(dāng)前播放曲目名稱以及彈奏時(shí)的音符。LCD開(kāi)始工作是靠軟件來(lái)實(shí)現(xiàn)的[8]。整個(gè)顯示過(guò)程中的程序工作流程圖如圖10所示:</p><p><b> 程序如下:</b></p><p> void lcd_dis
65、play ( )</p><p><b> {</b></p><p> WriteCMD(0x80);</p><p> for(y=0;y<7;y++)</p><p> {WriteData(name[y]); mydelay(5); }</p><p> mydelay(
66、2); </p><p> WriteCMD(0x80+0x40);</p><p> for(z=0;z<12;z++)</p><p> { WriteData(num[z]); mydelay(5); }</p><p> for(x=0;x<19;x++)</p><p> {Write
67、CMD(0x18); mydelay(5);}}</p><p> 3.4.4 函數(shù)初始化子程序設(shè)計(jì)</p><p> 函數(shù)初始化程序即把在主函數(shù)內(nèi)對(duì)某些參數(shù)和標(biāo)記位賦初值編寫成一個(gè)函數(shù),這樣使程序更具有條理化,清晰易懂。由于整個(gè)程序要用到定時(shí)器0和定時(shí)器1,所以初始化程序主要是對(duì)定時(shí)器相關(guān)內(nèi)容作說(shuō)明,程序的簡(jiǎn)單框圖如圖11所示。</p><p><b&g
68、t; 程序如下:</b></p><p> void InitialSound(void)</p><p><b> {</b></p><p> Sound_Temp_TH1 = (65536-(1/1200)*SYSTEM_OSC)/256;// 計(jì)算TL1應(yīng)裝入的初值 (10ms的初裝值)</p>&
69、lt;p> Sound_Temp_TL1 = (65536-(1/1200)*SYSTEM_OSC)%256;// 計(jì)算TH1應(yīng)裝入的初值</p><p> TH1 = Sound_Temp_TH1;</p><p> TL1 = Sound_Temp_TL1;</p><p> TMOD = 0x11;</p><p>
70、ET0 = 1; ET1 = 0; TR0 = 0; TR1= 0; EA = 1;</p><p><b> }</b></p><p> 3.4.5 系統(tǒng)主程序設(shè)計(jì)</p><p> 播放器工作時(shí),程序工作流程圖如圖12所示,先對(duì)在程序過(guò)程中所需的各種標(biāo)記位及參數(shù)進(jìn)行初始化賦值,再執(zhí)行按鍵掃描子程序并計(jì)算及保存鍵值,根據(jù)其中的模式轉(zhuǎn)換
71、鍵的按鍵次數(shù)進(jìn)行模式判斷,按鍵次數(shù)為1時(shí)播放器處于自動(dòng)播放模式,揚(yáng)聲器播放模塊開(kāi)始工作,同時(shí)彩燈伴奏模塊隨著單片機(jī)端口高低電平的變換閃爍達(dá)到伴奏的效果,另一方面顯示模塊進(jìn)入工作狀態(tài)對(duì)當(dāng)前曲目的曲目名進(jìn)行顯示;按鍵次數(shù)為2時(shí)播放器處于手動(dòng)彈奏模式,再次對(duì)按鍵進(jìn)行掃描,對(duì)按下的鍵值進(jìn)行分析,單片機(jī)輸出相應(yīng)的音符,彩燈伴奏模塊也伴隨音符閃亮,同時(shí)LCD顯示模塊對(duì)當(dāng)前音符進(jìn)行顯示。</p><p><b>
72、4 結(jié)論</b></p><p> 本設(shè)計(jì)以MSC-51系列單片機(jī)為核心,充分利用了AT89C51芯片的I/O引腳,以獨(dú)立式鍵盤作為琴鍵輸入及曲目的選擇鍵,采用LCD1602對(duì)當(dāng)前曲目及音符進(jìn)行顯示,并利用發(fā)光二級(jí)管進(jìn)行音樂(lè)伴奏。本文從理論上分析了該設(shè)計(jì)方案的可行性,并預(yù)計(jì)能達(dá)到設(shè)計(jì)要求,主要體現(xiàn)在:</p><p><b> 擁有彩燈伴奏功能;</b>
73、;</p><p> 具有音頻D/A轉(zhuǎn)換功能,可以輸出音頻模擬信號(hào)并能播放音頻文件;</p><p><b> 顯示歌曲信息功能;</b></p><p> 播放器具有手動(dòng)彈奏和自動(dòng)播放兩個(gè)模式。</p><p> 在做此畢業(yè)設(shè)計(jì)中遇到不少的難點(diǎn),有的原理,根本就不知道怎樣去實(shí)現(xiàn)。最后通過(guò)自己仔細(xì)查資料,一點(diǎn)一點(diǎn)
74、的就慢慢懂了。在實(shí)驗(yàn)中發(fā)現(xiàn),其實(shí)再難編寫的程序都是由一些基礎(chǔ)程序模塊構(gòu)成的,很多的基礎(chǔ)模塊前人就已經(jīng)做好了,只要我們拼湊就行了,當(dāng)然拼湊的工作也不是很簡(jiǎn)單,最重要的還是要自己的基礎(chǔ)扎實(shí),同時(shí),自己的思路要非常的清晰。設(shè)計(jì)完后,感覺(jué)到平時(shí)掌握的東西實(shí)在太少了,要真正實(shí)現(xiàn)學(xué)有所成、學(xué)有所用還有很長(zhǎng)的路要走。 現(xiàn)在電子信息技術(shù)發(fā)展迅速,我們現(xiàn)在學(xué)的東西在社會(huì)上也許已經(jīng)或即將被淘汰。因此在學(xué)校要學(xué)的不僅是書本上的東西,更重要的是自學(xué)的能
75、力、獨(dú)立思考的能力和動(dòng)手的能力。要想在競(jìng)爭(zhēng)異常激烈的現(xiàn)代社會(huì)立足,就必須有實(shí)力。在學(xué)校的時(shí)間是最好的學(xué)習(xí)機(jī)會(huì),一定要珍惜好這有限的時(shí)間,多學(xué)知識(shí),盡量充實(shí)自己,為以后進(jìn)入社會(huì)多做準(zhǔn)備。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 張紅梅,王磊杰.AT89S52與LED驅(qū)動(dòng)S6B0724的應(yīng)用[J].電子質(zhì)量,2008(5):13-16.&
76、lt;/p><p> [2] 趙亮.液晶顯示模塊LCD1602應(yīng)用[J],電子制作,2007(3):58-59. </p><p> [3] 張春峰,鄒新杰,余張國(guó).基于ATMEGA16的智能控制器的開(kāi)發(fā)研制[J],微計(jì)算機(jī)信息,2007,,23(8):123-124.</p><p> [4] 侯振鵬.嵌入式C語(yǔ)言程序設(shè)計(jì)-使用MCS-51[M],北京:人民郵電
77、出版社,2006:117,119.</p><p> [5] 李朝青.單片機(jī)原理及接口技術(shù)[M],北京:北京航空航天大學(xué)出版社,2005:374-378.</p><p> [6] 華南農(nóng)業(yè)大學(xué)工程學(xué)院.Lab2000 系列單片機(jī)實(shí)驗(yàn)系統(tǒng)實(shí)驗(yàn)指導(dǎo)[M],廣州:華南農(nóng)業(yè)大學(xué)出版社,2006:19,65.</p><p> [7] Konrad King.SQL編
78、程實(shí)用大全[J].杜大鵬,譯,北京:中國(guó)水利水電出版社,2005,35(257):1-2.</p><p> [8] T.Parsons. The Social System. New York: Free Press, 1961: P36-45.</p><p><b> 附錄一 硬件原理圖</b></p><p><b>
79、附錄二 軟件主程序</b></p><p> #include <AT89S52.H></p><p> #include <intrins.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</
80、p><p> #define LCDPORT P0</p><p> unsigned int code tab[]={64021,64103,64260,64400,</p><p> 64524,64580,64684,64777,</p><p> 64820,64898,64968,65030,</p><p
81、> 65058,65110,65157,65178};</p><p> unsigned char code name[]="1234567" ;</p><p> unsigned char code num[]="200711111111";</p><p> unsigned char code ta
82、b1[]="PLAYING MUSIC IS";</p><p> unsigned char code tab2[]="TWO BUFFER";</p><p> unsigned char code tab3[]="THE TONE IS";</p><p> unsigned char code
83、 tab4[]="LOW SO LOW LA LOW TI MID DO MID RE MIN MI MIN FA MID SO MID LA MID TI HIG DO HIG RE HIG MI HIG FA HIG SO HIG LA";</p><p><b> //兩只蝴蝶</b></p><p> Unsigned char cod
84、e Music_Two[] ={ 0x17,0x03,0x16,0x03,0x17,0x01,0x16,0x03, 0x17,0x03,0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03
85、, 0x16,0x03, 0x17,0x01,0x16,0x03,0x17,0x03,0x16,0x03,0x15,0x01,0x10,0x03,0x15,0x03,0x16,0x02,0x16,0x0D,0x17,0x03,0x16,0x03,0x15,0x03,0x10,0x03,0x15,0x03,0x16,0x01,0x17,0x03,0x16,0x03, 0x17,0x01,0x16,0x03,0x17,0x03,0x16,0
86、x03,0x15,0x01,0x10,0x03,0x15,0x03,0x16,0x02</p><p> //********************************************************************//</p><p> //*********************************************************
87、***********//</p><p> #ifndef __SOUNDPLAY_H_REVISION_FIRST__</p><p> #define __SOUNDPLAY_H_REVISION_FIRST__</p><p> //************************************************************
88、******//</p><p> #define SYSTEM_OSC 12000000</p><p> #define SOUND_SPACE 4/5 </p><p> sbit BeepIO=P3^0;</p><p> unsigned int code FreTab[12] = { 262,277,29
89、4,311,330,349,369,392,415,440,466,494 }; //原始頻率表</p><p> unsigned char code SignTab[7] = { 0,2,4,5,7,9,11 }; //1~7在頻率表中的位置</p><p> unsigned char code LengthTab[7]= { 1,2,4,8,16,32,6
90、4 };</p><p> unsigned char Sound_Temp_TH0,Sound_Temp_TL0;//音符定時(shí)器初值暫存</p><p> unsigned char Sound_Temp_TH1,Sound_Temp_TL1;//音長(zhǎng)定時(shí)器初值暫存</p><p> //*********************************
91、*****************************************//</p><p> void InitialSound(void)</p><p><b> {</b></p><p> BeepIO = 0;</p><p> Sound_Temp_TH1 = (65536-(1/1200
92、)*SYSTEM_OSC)/256;// 計(jì)算TL1應(yīng)裝入的初值 (10ms的初裝值)</p><p> Sound_Temp_TL1 = (65536-(1/1200)*SYSTEM_OSC)%256;// 計(jì)算TH1應(yīng)裝入的初值</p><p> TH1 = Sound_Temp_TH1;</p><p> TL1 = Sound_Temp_TL1;
93、</p><p> TMOD = 0x11;</p><p> ET0 = 1; ET1 = 0; TR0 = 0; TR1= 0; EA = 1;</p><p><b> }</b></p><p> void BeepTimer0(void) interrupt 1//音符發(fā)生中斷</p>
94、<p> {BeepIO = !BeepIO;</p><p> TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0;</p><p><b> }</b></p><p> //****************************************************
95、*****************//</p><p> void Play(unsigned char *Sound;unsigned char Signature;unsigned char Octachord;unsigned int Speed)</p><p> {unsigned int NewFreTab[12];//新的頻率表</p><p
96、> unsigned char i,j;</p><p> int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLengt;</p><p> unsigned char Tone,Length,SL,SH,SM,SLen,XG,FD;</p><p> for(i=0;i<
97、;12;i++) // 根據(jù)調(diào)號(hào)及升降八度來(lái)生成新的頻率表</p><p> {j = i + Signature;</p><p> if(j > 11)</p><p> {j = j-12; NewFreTab[i] = FreTab[j]*2;</p><p><b> }</b></
98、p><p><b> else</b></p><p> NewFreTab[i] = FreTab[j];</p><p> if(Octachord == 1)</p><p> NewFreTab[i]>>=2;</p><p> else if(Octachord ==
99、3)</p><p> NewFreTab[i]<<=2;</p><p><b> }</b></p><p> SoundLength = 0;</p><p> while(Sound[SoundLength] != 0x00)//計(jì)算歌曲長(zhǎng)度</p><p> {S
100、oundLength+=2;}Point = 0; Tone = Sound[Point];</p><p> Length = Sound[Point+1]; // 讀出第一個(gè)音符和它時(shí)時(shí)值</p><p> LDiv0 = 12000/Speed;// 算出1分音符的長(zhǎng)度(幾個(gè)10ms)</p><p> LDiv4 = LDiv0/4;
101、// 算出4分音符的長(zhǎng)度</p><p> LDiv4 = LDiv4-LDiv4*SOUND_SPACE; // 普通音最長(zhǎng)間隔標(biāo)準(zhǔn)</p><p> TR0 = 0;TR1 = 1;</p><p> while(Point < SoundLength)</p><p> {SL=Tone%10;
102、//計(jì)算出音符</p><p> SM=Tone/10%10; //計(jì)算出高低音</p><p> SH=Tone/100; //計(jì)算出是否升半</p><p> CurrentFre = NewFreTab[SignTab[SL-1]+SH]; //查出對(duì)應(yīng)音符的頻率</p><p><b>
103、; if(SL!=0)</b></p><p> {if (SM==1) CurrentFre >>= 2; //低音</p><p> if (SM==3) CurrentFre <<= 2; //高音</p><p> Temp_T = 65536-(50000/CurrentFre)*10/(12000000
104、/SYSTEM_OSC);//計(jì)算計(jì)數(shù)器初值</p><p> Sound_Temp_TH0 = Temp_T/256;Sound_Temp_TL0 = Temp_T%256;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0 + 12; //加12是對(duì)中斷延時(shí)的補(bǔ)償</p><p> }SLen=LengthTab[Length%10]; //算出是
105、幾分音符</p><p> XG=Length/10%10; //算出音符類型(0普通1連音2頓音)</p><p> FD=Length/100;</p><p> LDiv=LDiv0/SLen; //算出連音音符演奏的長(zhǎng)度(多少個(gè)10ms)</p><p> if (FD==1)</p><p&g
106、t; LDiv=LDiv+LDiv/2;</p><p><b> if(XG!=1)</b></p><p> if(XG==0) //算出普通音符的演奏長(zhǎng)度</p><p> if (SLen<=4)</p><p> LDiv1=LDiv-LDiv4;</p><p>
107、;<b> else</b></p><p> LDiv1=LDiv*SOUND_SPACE;</p><p><b> else</b></p><p> LDiv1=LDiv/2; //算出頓音的演奏長(zhǎng)度</p><p><b> else</b></p
108、><p> LDiv1=LDiv;</p><p> if(SL==0) LDiv1=0;</p><p> LDiv2=LDiv-LDiv1; //算出不發(fā)音的長(zhǎng)度</p><p> if (SL!=0)</p><p><b> {</b></p><p>
109、 TR0=1;for(i=LDiv1;i>0;i--) //發(fā)規(guī)定長(zhǎng)度的音</p><p><b> {</b></p><p> while(TF1==0);</p><p> TH1=Sound_Temp_TH1;</p><p> TL1=Sound_Temp_TL1;TF1=0;}</p&g
110、t;<p> }if(LDiv2!=0)</p><p> {TR0=0; BeepIO=0;</p><p> for(i=LDiv2;i>0;i--) //音符間的間隔</p><p><b> {</b></p><p> while(TF1==0);</p><
111、p> TH1=Sound_Temp_TH1;</p><p> TL1 = Sound_Temp_TL1;</p><p><b> TF1=0;</b></p><p><b> }</b></p><p> }Point+=2;</p><p> Ton
112、e=Sound[Point];</p><p> Length=Sound[Point+1];</p><p><b> }</b></p><p> BeepIO = 0;</p><p><b> }</b></p><p> //***************
113、***********液晶函數(shù)************************************//</p><p> //**********************************************************************//</p><p> sbit LCDE=P3^5;</p><p> sbit LCDR
114、W=P3^6;</p><p> sbit LCDRS=P3^7;</p><p> void Delay()</p><p> {uint uiCount;</p><p> for(uiCount=0;uiCount<250;uiCount++);</p><p><b> }</b
115、></p><p> void WriteCMD(uchar Command) </p><p> { Delay(); //先延時(shí)。 LCDE=1; //然后把LCD改為寫入命令狀態(tài)。</p><p> LCDRS=0; LCDRW=0; LCDPORT=Command; //再輸出命令。 Delay(); LCDE=0;
116、 //最后執(zhí)行命令。</p><p><b> }</b></p><p> void WriteData(uchar dat) </p><p> { Delay(); //先延時(shí)。 LCDE=1; //然后把LCD改為寫入數(shù)據(jù)狀態(tài)。</p><p> LCDRS=1; LC
117、DRW=0;LCDPORT=dat; //再輸出數(shù)據(jù)。 LCDE=0; //最后顯示數(shù)據(jù)。</p><p><b> }</b></p><p> void inicry()</p><p> {LCDRW=0;LCDE=0;WriteCMD(0x38);WriteCMD(0x0f);WriteCMD(0x07);Wr
118、iteCMD(0x01);}</p><p> void mydelay(int x)</p><p> { int i,y; for(i=x;i>0;i--) for(y=255;y>0;y--);</p><p><b> }</b></p><p> //********************
119、*************************************************//</p><p><b> #endif</b></p><p><b> main()</b></p><p><b> { </b></p><p> unsign
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機(jī)的mp3播放器設(shè)計(jì)【畢業(yè)論文】
- 基于單片機(jī)的mp3播放器設(shè)計(jì)-畢業(yè)設(shè)計(jì)論文
- 開(kāi)題報(bào)告--基于通用單片機(jī)mp3播放器設(shè)計(jì)
- 基于單片機(jī)的音樂(lè)播放器設(shè)計(jì)畢業(yè)論文
- 基于單片機(jī)的mp3播放器設(shè)計(jì)[任務(wù)書]
- 基于android的mp3音樂(lè)播放器設(shè)計(jì)畢業(yè)設(shè)計(jì)論文
- 基于單片機(jī)的mp3設(shè)計(jì)-畢業(yè)論文
- 基于fpga的mp3音樂(lè)播放器設(shè)計(jì)
- 基于mp3播放器的設(shè)計(jì)
- 基于安卓android的mp3播放器畢業(yè)論文
- 基于-單片機(jī)控制的音樂(lè)播放器的畢業(yè)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于陀螺儀的智能mp3播放器
- 畢業(yè)論文(設(shè)計(jì))基于stm32的mp3播放器設(shè)計(jì)
- 給予android的mp3音樂(lè)播放器設(shè)計(jì)--畢業(yè)設(shè)計(jì)論文
- 基于單片機(jī)的mp3播放器設(shè)計(jì)-東華理工大學(xué)畢業(yè)設(shè)計(jì)(論文)
- 畢業(yè)設(shè)計(jì)---基于單片機(jī)的音樂(lè)播放器
- 畢業(yè)設(shè)計(jì)—基于單片機(jī)的音樂(lè)播放器
- 畢業(yè)設(shè)計(jì)(論文)-單片機(jī)音樂(lè)播放器設(shè)計(jì)
- 基于vs1003的mp3音樂(lè)播放器設(shè)計(jì)
- 基于單片機(jī)的mp3設(shè)計(jì)與實(shí)現(xiàn)--畢業(yè)論文
評(píng)論
0/150
提交評(píng)論