音樂盒設(shè)計(jì)(單片機(jī)課程設(shè)計(jì))1_第1頁(yè)
音樂盒設(shè)計(jì)(單片機(jī)課程設(shè)計(jì))1_第2頁(yè)
音樂盒設(shè)計(jì)(單片機(jī)課程設(shè)計(jì))1_第3頁(yè)
音樂盒設(shè)計(jì)(單片機(jī)課程設(shè)計(jì))1_第4頁(yè)
音樂盒設(shè)計(jì)(單片機(jī)課程設(shè)計(jì))1_第5頁(yè)
已閱讀5頁(yè),還剩30頁(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)介

1、數(shù)字音樂盒的設(shè)計(jì)各專業(yè)全套優(yōu)秀畢業(yè)設(shè)計(jì)圖紙目錄摘 要i第一章 設(shè)計(jì)方案的對(duì)比1第二章 總體方案設(shè)計(jì)22.1 原理簡(jiǎn)介22.2 方案設(shè)計(jì)思想2第三章 方案實(shí)現(xiàn)33.1、音頻脈沖的產(chǎn)生3 3.2音樂節(jié)拍的生成43.3.建立音樂的步驟4第四章 硬件設(shè)計(jì)54.1 硬件電路54.1.1、at89c51的工作特性54.2 原理說(shuō)明64.3 電路各模塊說(shuō)明64.3.1 鍵盤系統(tǒng)64.3.2 放大電路74.3.3 時(shí)鐘電路84.3.4 復(fù)位電路85.3.5 顯示電路9第五章 軟件設(shè)計(jì)105.1 主模塊的設(shè)計(jì)10第六章 仿真、安裝和調(diào)試12總結(jié)13致謝14參考文獻(xiàn)14附錄15附錄一:音樂程序15附錄二:基于單片

2、機(jī)的數(shù)字音樂盒總電路圖32摘 要本設(shè)計(jì)是基于單片機(jī)的數(shù)字音樂盒設(shè)計(jì),由單片機(jī)at89c51芯片和lcd顯示器為核心,輔以必要的電路,構(gòu)成的一個(gè)單片機(jī)電子數(shù)字音樂盒。要求利用i/o口產(chǎn)生一定頻率的方波,驅(qū)動(dòng)蜂鳴器,發(fā)出不同的音調(diào)并采用lcd顯示信息,從而演奏樂曲(最少三首樂曲,每首不少于30秒),開機(jī)時(shí)有英文歡迎提示字符,播放時(shí)顯示歌曲序號(hào)(或名稱),可通過功能鍵選擇樂曲,暫停,播放。本設(shè)計(jì)采用4*4鍵盤,用protel99來(lái)畫系統(tǒng)硬件圖,采用匯編語(yǔ)言進(jìn)行編程,編程后利用keil c51來(lái)進(jìn)行編譯,再生成的hex文件裝入芯片中,采用proteus軟件來(lái)仿真,檢驗(yàn)功能得以正常實(shí)現(xiàn)。該音樂盒的設(shè)計(jì)可

3、以通過按鍵選擇不同的曲目,播放和暫停,并通過lcd顯示歌曲號(hào)及播放時(shí)間。本設(shè)計(jì)鍵盤采用動(dòng)態(tài)掃描方式。每次掃描一行鍵盤,送此行低電平,讀輸入口的狀態(tài)值,判斷有沒有鍵按下。若有鍵按下,根據(jù)讀入口的值選擇顯示值并送至顯示值寄存單元,判斷鍵值,啟動(dòng)計(jì)數(shù)器t0,根據(jù)次值為偏移地址找到要選擇的音樂的代碼的首地址,根據(jù)代碼產(chǎn)生一定頻率的脈沖,驅(qū)動(dòng)蜂鳴器,放出音。同時(shí)啟動(dòng)定時(shí)器t1,計(jì)算音樂的播放的時(shí)間。關(guān)鍵詞:數(shù)字音樂盒 at89c51 lcd顯示器 proteus軟件 4*4鍵盤 動(dòng)態(tài)掃描 keil c5 第一章 設(shè)計(jì)方案的對(duì)比方案一:本設(shè)計(jì)以89c51為核心,配合鍵盤系統(tǒng),放大電路,時(shí)鐘電路和數(shù)碼管顯示

4、電路實(shí)現(xiàn)音樂的演奏。音樂盒設(shè)計(jì)采用獨(dú)立的鍵盤做為音符的輸入以89c51為核心。本設(shè)計(jì)中用到了89c51單片機(jī),4*4矩陣式鍵盤,蜂鳴器,14引腳的lcd,可以通過以下原理框圖(圖1.1)來(lái)實(shí)現(xiàn)該音樂盒的設(shè)計(jì)。放大電路p3.7p0.0|p0.7琴鍵電路顯示電路單片機(jī)89c51復(fù)位電路時(shí)鐘電路路圖1.1 系統(tǒng)結(jié)構(gòu)框圖方案二:該方案以at89s52單片機(jī)為核心,主要設(shè)計(jì)模塊包括數(shù)碼管顯示部分,功能鍵盤部分,蜂鳴器發(fā)聲部分,彩燈部分。數(shù)碼管采用共陽(yáng)極數(shù)碼管,通過單片機(jī)p1口控制,實(shí)現(xiàn)歌曲序號(hào)的顯示;功能鍵盤采用1*8鍵盤按鍵開關(guān),通過單片機(jī)p3口控制,實(shí)現(xiàn)歌曲播放順序的調(diào)換和暫停播放功能;蜂鳴器由單片

5、機(jī)的p2口控制,實(shí)現(xiàn)歌曲播放;彩燈是由普通發(fā)光二極管代替,能實(shí)現(xiàn)單色長(zhǎng)亮和閃爍效。綜上所述:由于方案一的琴鍵輸入是通過獨(dú)立式鍵盤來(lái)完成的,這樣便于控制且直觀。且本方案是采用我們所熟知的單片機(jī)類型和顯示電路,便于我們理解。而方案二中其他電路部分與方案一相差不大,但系統(tǒng)實(shí)現(xiàn)比較困難。且主控芯片采用的是我們少用的at89s51,所以我們選擇方案一。第二章 總體方案設(shè)計(jì) 2.1 原理簡(jiǎn)介當(dāng)鍵盤有鍵按下時(shí),判斷鍵值,啟動(dòng)計(jì)數(shù)器t0,產(chǎn)生一定頻率的脈沖,驅(qū)動(dòng)蜂鳴器,放出樂曲。同時(shí)啟動(dòng)定時(shí)器t1,顯示樂曲播放的時(shí)間,并驅(qū)動(dòng)lcd,顯示歌曲號(hào)。2.2 方案設(shè)計(jì)思想(1)要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(

6、1/音頻),然后將此周期除以2,即為半周期的時(shí)間,利用定時(shí)器計(jì)時(shí)這個(gè)半周期時(shí)間,每當(dāng)計(jì)時(shí)到后就將輸出脈沖的i/o反相,然后重復(fù)計(jì)時(shí)此半周期時(shí)間再對(duì)i/o口反相,就可在i/o腳上得到此頻率的脈沖(2)利用8951的內(nèi)部定時(shí)器使其工作在計(jì)數(shù)器模式mode1下,改變記數(shù)值th0及tl0以產(chǎn)生不同頻率的方法。例如頻率為523hz,其周期t=1/523=1912微秒,因此只要令計(jì)數(shù)器定時(shí)956/1=956在每記數(shù)9次時(shí)將i/o口反相,就可得到中音d0(523hz)。記數(shù)脈沖值與頻率的關(guān)系公式如下:n=fi/2/fr n:記數(shù)值fi:內(nèi)部計(jì)時(shí)一次為1微秒故其頻率為1mhz fr;要產(chǎn)生的頻率(3):起記數(shù)

7、值的求法如下:t65536n65536fi2fr例如:設(shè)k65536,f1000000fi1mhz,求低音d0(523hz),高音的d0(1046hz)的記數(shù)值。t65536n65536fi2fr6553610000002fr65536500000fr低音d0的t6553650000026263627中音d0的t6553650000052364580低音d0的t65536500000104765059 第三章 方案實(shí)現(xiàn)3.1、音頻脈沖的產(chǎn)生 對(duì)于音樂盒而言發(fā)出悅耳的音樂是其最主要的功能,那么對(duì)于使用單片機(jī)來(lái)制作出來(lái)的音樂盒怎么實(shí)現(xiàn)音符的發(fā)聲呢?通過查看資料我們知道音符的發(fā)音主要靠不同的音頻脈沖

8、。利用單片機(jī)的內(nèi)部定時(shí)器/計(jì)數(shù)器0,使其工作在模式1,定時(shí)中斷,然后控制引腳的輸出音樂(本實(shí)驗(yàn)采用p1.0做為輸出引腳)。只要算出某一音頻的周期(1/頻率),然后將此周期除以2,即為半周期的時(shí)間,利用定時(shí)器計(jì)時(shí)這個(gè)半周期時(shí)間,每當(dāng)計(jì)時(shí)到后就將輸出脈沖的i/o反相,然后重復(fù)計(jì)時(shí)此半周期時(shí)間再對(duì)i/o反相,就可在i/o腳上得到此頻率的脈沖。具體做法如下所示(以中音do為例):例如:中音1(do)的音頻= 523hz,周期t=1/523s=1912定時(shí)器/計(jì)數(shù)器0的定時(shí)時(shí)間為:t/2=1912/2=956定時(shí)器956的計(jì)數(shù)值=定時(shí)時(shí)間/機(jī)器周期=956/1=956(時(shí)鐘頻率=12mhz)裝入t0計(jì)數(shù)

9、器初值為65536-956=64580將64580裝入t0寄存器中,啟動(dòng)t0工作后,每計(jì)數(shù)956次時(shí)將產(chǎn)生溢出中斷,進(jìn)入中斷服務(wù)時(shí),每次對(duì)p1.0引腳的輸出值進(jìn)行取反,就可得到中音do(523hz)的音符音頻。將51單片機(jī)內(nèi)部定時(shí)器工作在計(jì)數(shù)器模式1下,改變計(jì)數(shù)初值th0,tl0以產(chǎn)生不同的頻率。下表3-1是c調(diào)各音符頻率與計(jì)數(shù)初值t的對(duì)照表: 表3-1 c調(diào)各音符頻率與計(jì)數(shù)初值t的對(duì)照表音符頻率(hz)/初值()音符頻率(hz)/初值()低1do262/63627中1do 523/64580高1do 1042/65056低2re 294/63835中2re589/64687 高2re 124

10、5/65134低3m 330/64021中3m 661/64780高3m 1318/65157低4fa 350/64107中4fa700/64822高4fa 1397/65178低5so 393/64264中5so 786/64900高5so 1568/65217 低6la 441/64402中6la882/64969高6la1760/65252低7si495/64526 中7si990/65031高7si1967/652823.2音樂節(jié)拍的生成 要唱出一首歌,只產(chǎn)生出音頻脈沖還不夠,還要考慮節(jié)拍。 定義:每個(gè)音符占用一個(gè)字節(jié),字節(jié)的高4位代表音符的高低,低4位表示該音符的節(jié)拍,如果一拍為0.

11、4秒,則1/4拍是0.1秒,只要設(shè)定延遲時(shí)間就可獲得節(jié)拍的時(shí)間。我們也可以設(shè)1/4拍為1個(gè)delay,則1拍應(yīng)該是4個(gè)delay,只要求得1/4拍的delay時(shí)間,其余的節(jié)拍就是它的倍數(shù)。(見表3-2)表3-2節(jié)拍數(shù)1/4節(jié)拍2/4節(jié)拍3/4節(jié)拍1拍1又1/4拍節(jié)拍碼12345節(jié)拍數(shù)1又1/2拍2拍2又1/2拍3拍3又3/4拍節(jié)拍碼68acf3.3.建立音樂的步驟先把譜的音符找出,然后由上表建立時(shí)間常數(shù)初值t的順序表,標(biāo)號(hào)為table1。建立音符和節(jié)拍表,標(biāo)號(hào)為table,將構(gòu)成發(fā)音符的計(jì)數(shù)值放在其中。table表的結(jié)構(gòu)為:簡(jiǎn)譜碼(代表音符)為高4位,節(jié)拍碼(表示節(jié)拍數(shù))為低4位,在唱歌程序中

12、對(duì)每一個(gè)有節(jié)拍的音符能通過設(shè)計(jì)共同生成音符節(jié)拍碼,本程序的音符節(jié)拍碼表見表3-2。第四章 硬件設(shè)計(jì)4.1 硬件電路 本設(shè)計(jì)中用到了89c51單片機(jī),其引腳圖如右圖4-1-1所示,矩陣式鍵盤模塊,蜂鳴器,16*2 lcd,揚(yáng)聲器、led數(shù)碼管顯示器等。( 數(shù)字音樂盒總硬件圖如附錄一所示) 圖4-1-1 89c51引腳圖4.1.1、at89c51的工作特性內(nèi)含4kb的flash存儲(chǔ)器檫寫次數(shù)1000次; 內(nèi)含128字節(jié)的ram;具有32根可編程i/o線;具有2個(gè)16位編程定時(shí)器 具有6個(gè)中斷源,5個(gè)中斷矢量,2級(jí)優(yōu)先權(quán)的中 斷結(jié)構(gòu);具有1個(gè)全雙工的可編程串行通信接口;具有1個(gè)數(shù)據(jù)指針dptr;具有

13、可編程3級(jí)程序鎖定位;at89c51的工作電源為5(10.2)v且典型值為5v;at89c51最高工作頻率為24mhz;at89c51的編程頻率為324mhz,編程啟動(dòng)電流和啟動(dòng)電壓 分別為1ma、5或12v。 4.2 原理說(shuō)明當(dāng)鍵盤有鍵按下時(shí),判斷鍵值,啟動(dòng)計(jì)數(shù)器t0,產(chǎn)生一定頻率的脈沖,驅(qū)動(dòng)蜂鳴器,放出樂曲。同時(shí)啟動(dòng)定時(shí)器t1,顯示歌曲號(hào)。(1)硬件電路中用、分別接s1、s2作為上、下一曲的功能鍵(2)用p1.0-p1.6控制七段碼a,b,c,d,e,f。(3)用p2.0口控制喇叭。(4)電路為12mhz晶振頻率工作,起振電路中c1,c2均為30pf。4.3 電路各模塊說(shuō)明4.3.1 鍵盤

14、系統(tǒng)鍵盤模塊采用4*4按鍵模式(s1-s16),接在單片機(jī)的p1口上。鍵盤系統(tǒng)的鏈接電路圖如圖4-3-1所示:當(dāng)用手按下一個(gè)鍵時(shí),往往按鍵在閉合位置和斷開位置之間跳幾下才穩(wěn)定到閉合狀態(tài)的情況;在釋放一個(gè)鍵時(shí),也回會(huì)出現(xiàn)類似的情況。這就是抖動(dòng)。抖動(dòng)的持續(xù)時(shí)間隨鍵盤材料和操作員而異,不過通??偸遣淮笥?0ms。很容易想到,抖動(dòng)問題不解決就會(huì)引起對(duì)閉合鍵的識(shí)別。用軟件方法可以很容易地解決抖動(dòng)問題,這就是通過延遲10ms來(lái)等待抖動(dòng)消失,這之后,在讀入鍵盤碼。具體編碼如下所示:mai: clr tr0 ;關(guān)閉上一次定時(shí),進(jìn)入下一次按鍵判斷mov tmod, #01hmov ie, #82hmov a,

15、p1mov 30h, a ;保存鍵盤狀態(tài)值 lcall d10ms ;延遲10ms消除抖動(dòng)mov a , p1 ;再讀鍵盤狀態(tài)cjne a, 30h, mai ;兩次結(jié)果不同,是抖動(dòng)引起,轉(zhuǎn)mai圖4-3-1 鍵盤模塊電路圖 4.3.2 放大電路 放大電路的分析如下所示,其電路圖如圖4-3-2所示:此部分的放大電路簡(jiǎn)單容易實(shí)現(xiàn)??梢圆捎靡粋€(gè)小功率pnp型硅管2905,利用“分壓 偏置式工作點(diǎn)穩(wěn)定直流通路”,達(dá)到了對(duì)靜態(tài)工作點(diǎn)的穩(wěn)定。分壓電阻分別選擇1k和5.5k。蜂鳴器一端接+5v電壓,一端接晶體管的發(fā)射極。由p1.0輸出預(yù)定的方波,加到晶體管進(jìn)行放大,再輸出到嗡寧器,很好的實(shí)現(xiàn)了頻率、聲音的

16、轉(zhuǎn)換。圖4-3-2 放大電路模塊電路圖4.3.3 時(shí)鐘電路此系統(tǒng)的時(shí)鐘電路設(shè)計(jì)是采用內(nèi)部方式,即是利用芯片內(nèi)部的振蕩電路。mcs-51內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反相放大器。以此系統(tǒng)電路采用12mhz的晶振,起振電路中c1,c2均為30pf。時(shí)鐘電路模塊電路圖如圖4-3-3所示。 圖4-3-3 晶振電路模塊電路圖 4.3.4 復(fù)位電路51單片機(jī)的rst引腳是復(fù)位信號(hào)的輸入端,復(fù)位信號(hào)是高電平有效,其有效時(shí)間應(yīng)持續(xù)24個(gè)振蕩脈沖周期(即二個(gè)機(jī)器周期)以上。一般有兩種復(fù)位方式:上電復(fù)位和手動(dòng)復(fù)位。復(fù)位電路圖如圖4-3-4所示。圖4-3-4 復(fù)位電路模塊電路圖上電復(fù)位上電時(shí),利用電容c1的充電延

17、時(shí)特性,一開始,+5v電壓全部降落在電阻r6上,高電平輸入rst腳,單片機(jī)復(fù)位操作,當(dāng)電容c1充電接近結(jié)束時(shí),電阻r6電壓趨于0,rst腳輸入低電平,結(jié)束復(fù)位操作。手動(dòng)復(fù)位在系統(tǒng)出現(xiàn)操作錯(cuò)誤或程序運(yùn)行出錯(cuò)時(shí)使用。在單片機(jī)系統(tǒng)運(yùn)行過程中,按下復(fù)位鍵k0,高電平輸入rst腳,單片機(jī)被強(qiáng)制執(zhí)行復(fù)位操作,系統(tǒng)可退出錯(cuò)誤運(yùn)行狀態(tài),恢復(fù)正常工作。5.3.5 顯示電路 顯示電路采用lcd模塊,lcd顯示模塊采用14引腳的lcd lm032l,它有八個(gè)數(shù)據(jù)端口,三個(gè)控制口。當(dāng)控制口r/w為低電平時(shí),單片機(jī)向lcd寫入指令,當(dāng)其為高電平時(shí),單片機(jī)讀取lcd的信息。單片機(jī)的p2.0p2.2作為lcd的rs,r/w

18、,e的控制信號(hào)。用p0.0p0.7作為lcd的d0d7的控制信號(hào)。用lcd來(lái)顯示播放歌曲時(shí)間和歌曲號(hào)。當(dāng)按下開機(jī)鍵時(shí),會(huì)在lcd上顯示英文歡迎字符,按其他鍵可顯示歌曲號(hào)和播放時(shí)間。lcd顯示模塊電路圖分別如圖4-3-5所示。圖4-3-5 lcd顯示模塊電路圖第五章 軟件設(shè)計(jì)5.1 主模塊的設(shè)計(jì) 主模塊是系統(tǒng)軟件的主框架。結(jié)構(gòu)化程序設(shè)計(jì)一般有“自上而下”和“自下而上”兩種方式,“自上而下”法的核心就是主框架的構(gòu)建。它的合理與否關(guān)系到程序最終的功能的多少和性能的好壞。本程序可以實(shí)現(xiàn)課程設(shè)計(jì)的基本要求,并可以通過按鍵播放多首歌曲,主程序流程圖如下所示(圖5-1-1),其中顯示子程序的流程圖如圖5-1

19、-2所示。圖5-1-1 數(shù)字音樂盒主程序流程圖圖5-1-2 顯示子程序流程圖 第六章 仿真、安裝和調(diào)試按照上面設(shè)計(jì)的電路在proteus軟件內(nèi)畫圖, 打開單片機(jī)軟件開發(fā)系統(tǒng)keil,選擇89c51單片機(jī),在其中編寫程序,運(yùn)行生成一個(gè)后綴名為hex的文件,然后將該文件下載到proteus中的at89c51單片機(jī)中進(jìn)行仿真,觀察實(shí)驗(yàn)現(xiàn)象。仿真能實(shí)現(xiàn)播放音樂,按鍵選擇曲目,暫停,播放功能。仿真成功后,安裝好實(shí)驗(yàn)板,然后將音樂程序下載到電路板內(nèi) ,觀察結(jié)果。能實(shí)現(xiàn)播放音樂,按鍵換曲等功能。(其中仿真截圖如圖6-1-1所示)程序調(diào)試中出現(xiàn)的問題及解決的辦法:(1) 有時(shí)會(huì)出現(xiàn)程序一點(diǎn)錯(cuò)誤也沒有,但就是不

20、能正常運(yùn)行的現(xiàn)象,最后我們發(fā)現(xiàn)是因?yàn)槌绦蛑杏械闹噶顣鴮懙貌灰?guī)范導(dǎo)致的,例如有的ret返回指令一定要按正確格式書寫或在兩行指令間最好不要留空行。(2) 程序中的跳轉(zhuǎn)指令的運(yùn)用很重要,為保險(xiǎn)起見,都用ljmp,我們就遇到過跳轉(zhuǎn)指令用錯(cuò)程序無(wú)法正常運(yùn)行的現(xiàn)象。當(dāng)用jnz指令時(shí),跳轉(zhuǎn)范圍比較少,這時(shí)要用一個(gè)標(biāo)號(hào)中轉(zhuǎn)。(3) 編程時(shí)要注意,在程序開始時(shí),要寫入各定時(shí)器中斷的入口地址。(4) 編程過程中要注意加注釋或分割線,否則,在程序過長(zhǎng)時(shí)容易變得很亂,不便于查找或更改。(5) 編程前要加流程圖,這樣會(huì)使思路清晰,例如數(shù)字音樂盒的設(shè)計(jì)思路完全可以按著mp3的工作方式列寫流程圖。(6) lcd計(jì)時(shí)正常顯示

21、的解決辦法:a. 兩個(gè)定時(shí)器同時(shí)工作,存在中斷時(shí)序問題,剛開始時(shí)我們把定時(shí)器1設(shè)定在方式3,計(jì)250us,由于定時(shí)中斷過于頻繁,使cpu負(fù)載過大,導(dǎo)致音樂不能正常播放,時(shí)間不能正常顯示。解決辦法:將定時(shí)器1設(shè)定在工作方式1,16位計(jì)數(shù),計(jì)50ms,效果有很大改觀。但還有問題。b. 當(dāng)音樂為全4拍起始時(shí),此時(shí)音樂節(jié)奏與定時(shí)器t1中斷頻率錯(cuò)開,lcd顯示和音樂播放都會(huì)好一些。c. 另外,在歌曲中,當(dāng)遇到一個(gè)音符發(fā)音為4拍,在編曲中為*ch,因時(shí)間較長(zhǎng),當(dāng)定時(shí)器t1此時(shí)來(lái)中斷時(shí),就會(huì)對(duì)歌曲播放產(chǎn)生影響,若改為發(fā)音一拍,中斷對(duì)歌曲播放影響減弱,但音樂效果變差。改進(jìn)方案:若采用可以定時(shí)時(shí)間更長(zhǎng)的單片機(jī),

22、可以避免所有問題。圖6-1-1 proteus仿真圖 總結(jié)這學(xué)期我們已接觸了單片機(jī)的課,有了一定的基礎(chǔ)知識(shí),這次的單片機(jī)課程設(shè)計(jì)使我有了實(shí)踐和提高能力的機(jī)會(huì),讓我受益良多。在此次單片機(jī)的課程設(shè)計(jì)中,我不但對(duì)單片機(jī)的基礎(chǔ)知識(shí)掌握的更牢固,而且對(duì)其硬件和軟件方面有了更深一層的認(rèn)識(shí)。在做數(shù)字音樂盒的課程設(shè)計(jì)時(shí),我掌握了at89c51單片機(jī)的內(nèi)部振蕩方式及振蕩頻率和單片機(jī)的復(fù)位電路形式。此次設(shè)計(jì)的軟件編程采用的是我們所學(xué)的匯編語(yǔ)言,通過對(duì)數(shù)字音樂盒的編程,我更熟悉了鍵盤掃描和動(dòng)態(tài)顯示的編程以及定時(shí)計(jì)數(shù)器和中斷的編程。鞏固了對(duì)at89c51的內(nèi)部結(jié)構(gòu)和接口擴(kuò)展的知識(shí)。本次設(shè)計(jì)中,我用到了protel99

23、畫圖軟件,keil c51編程軟件和proteus仿真軟件。以前雖然對(duì)protel99有一定的認(rèn)識(shí),能運(yùn)用其畫圖,不缺不熟練,這次設(shè)計(jì)是我對(duì)其的熟練程度提高了不少。在大三上學(xué)期我自學(xué)過一點(diǎn)keil c51軟件,但并不會(huì)用proteus,更不知道怎樣將其結(jié)合起來(lái)使用。在做數(shù)字音樂盒的仿真時(shí),通過向同學(xué)青椒和查找資料,我能夠運(yùn)用它來(lái)畫圖,并和keil c51結(jié)合起來(lái)進(jìn)行仿真,更有幸的是,仿真實(shí)現(xiàn)了。這次課程設(shè)計(jì),讓我收獲到了成功的喜悅,學(xué)會(huì)了做事嚴(yán)謹(jǐn)?shù)膽B(tài)度。希望下次還有這樣學(xué)習(xí)的機(jī)會(huì),并且希望下次能做的更好。 致謝 這次基于單片機(jī)的數(shù)字音樂盒設(shè)計(jì)得以完成,首先要感謝不畏辛辭地知道我們的王南蘭老師,

24、通過王老師的指導(dǎo),是我增漲了單片機(jī)的知識(shí),也使這次課程設(shè)計(jì)得以順利完成。其次,還要感謝我的同學(xué),在這次課程設(shè)計(jì)中,遇到了許多的困難,是通過詢問他們才解決的,所以要感謝他們的賜教。 參考文獻(xiàn)1 許珉.單片機(jī)原理及應(yīng)用m.北京:中國(guó)電力出版社,2007.08 2 三恒星科技.mcs-51單片機(jī)原理與應(yīng)用實(shí)例m. 北京:電子工業(yè)出版社,2008.013 王為青,程國(guó)鋼.單片機(jī)keil cx51應(yīng)用開發(fā)技術(shù)m. 北京:人民郵電出版社,2007.02 4 john markus.電子電路大全m.北京:計(jì)量出版社,19955 閻石.數(shù)字電子技術(shù)基礎(chǔ)m.北京:高等教育出版社,1998.12,第4版6 鄧元慶

25、.數(shù)字電路與邏輯設(shè)計(jì)m.北京:電子工業(yè)出版社,2001 7 高鋒,單片微型計(jì)算機(jī)原理與接口技術(shù).科學(xué)出版社,2003年. 8 李傳軍,單片機(jī)原理及應(yīng)用(第一版).河南科學(xué)技術(shù)出版社,2006年.9 楊志忠.數(shù)字電子技術(shù).高等教育出版社(第二版)m.2003年.10 張友德.單片微型機(jī)原理應(yīng)用與實(shí)驗(yàn).上海復(fù)旦大學(xué)出版社,2000 11 融會(huì)貫通 protel99電路設(shè)計(jì) 弘道工作室 北京 人民交通出版設(shè),2000. 12 單片機(jī)原理及接口技術(shù)實(shí)驗(yàn) 朱定華 北京 北方交通大學(xué)出版社2002.11附錄附錄一:音樂程序rs bit p2.0 rw bit p2.1 e bit p2.2;*l50ms

26、equ 60hl1ms equ 61hl250ms equ 62hsec equ 65hmin equ 64hhou equ 63h;*org 0000hljmp mainorg 000bhljmp tt0org 001bhljmp t1intorg 1000hmain: 液晶初始化mov sp,#70h mov p0,#01h ;清屏call enablemov p0,#38h ;8位,2行顯示lcall enablemov p0,#0fh ;屏顯on,光標(biāo)on,閃爍onlcall enablemov p0,#06h ;計(jì)數(shù)地址加1,顯示幕onlcall enable 內(nèi)存初始化lcall

27、initil key1:lcall keylcall modd ljmp key1鍵盤掃描key:nopnoplcall ksjnz k1 有按鍵轉(zhuǎn)到k1lcall kaijilcall sopxn:ljmp keyk1:lcall moddlcall moddlcall ksjnz k2ljmp keyk2:mov r2,#0feh ;讀鍵盤mov r4,#00hk3:mov a,r2mov p1,amov a,p1jb acc.4,l1為1跳轉(zhuǎn),第一行無(wú)按鍵mov a,#00hljmp lkl1:jb acc.5,l2mov a,#04hljmp lkl2:jb acc.6,l3mov a

28、,#08hljmp lkl3:jb acc.7,next1mov a,#0chlk:add a,r4push acck4:lcall delay1 ;若同時(shí)有其他按鍵,則等待lcall ksjnz k4mov r3,#07h clr amov r0,#30hmov r1,#31hmm1:mov a,r1mov r0,ainc r0inc r1djnz r3,mm1pop accmov r0,a retnext1:inc r4 ;列掃描mov a,r2jnb acc.3,n2ljmp n1n2:ljmp keyn1:rl amov r2,aljmp k3ks:mov a,#0f0h ;判斷p1口

29、mov p1,anopnopmov a,p1cpl aanl a,#0f0hretdelay1:setb rs0dl:mov r5,#0ahdl2:mov r6,#63dl3:nop nopdjnz r6,dl3djnz r5,dl2 clr rs0 ret 30h-37h初值為零initil: mov r3,#08hmov r0,#30hm1:mov r0,#00hinc r0djnz r3,m1 retmodd: mov p0,#8ehlcall enable mov a,37hmov dptr,#table3 movc a,a+dptrlcall write2 ret開機(jī)提示字kaiji

30、:mov a,37hcjne a,#0fh,dffmov p0,#80h ;設(shè)光標(biāo)地址 lcall enablemov dptr,#table1;寫數(shù)據(jù)lcall write1 dff:ret按鍵值播放歌曲sop:mov a,37hcjne a,#01h,a11lcall moddmov 52h,#high table10mov 53h,#low table10lcall initile2lcall main0a11:cjne a,#02h,a22lcall moddmov 52h,#high table20mov 53h,#low table20 lcall initile2 lcall m

31、ain0a22:cjne a,#03h,a33lcall moddmov 52h,#high table30mov 53h,#low table30 lcall initile2 lcall main0 a33:cjne a,#04h,a44lcall moddlcall initile2 lcall main0a44:cjne a,#05h,a55lcall modd lcall initile2 lcall main0a55:cjne a,#06h,a66lcall moddlcall initile2 lcall main0 a66:cjne a,#07h,a77lcall modd l

32、call initile2 lcall main0 a77:cjne a,#08h,a88lcall modd lcall initile2 lcall main0a88:90cjne a,#09h,a99lcall moddlcall initile2 lcall main0 a99:cjne a,#0ah,aaalcall moddlcall initile2 lcall main0 aaa:ret initile2:mov l50ms,#20mov l1ms,#00hmov l250ms,#00hmov sec,#00hmov min,#00hmov hou,#00hmov a,houm

33、ov b,#10div abadd a,#30h ;將bcd嗎轉(zhuǎn)化為asiic碼mov p0,#0c8h ;顯示小時(shí)十位call enablecall write2mov a,badd a,#30hmov p0,#0c9h ;顯示小時(shí)個(gè)位call enablecall write2mov a,#3ahmov p0,#0dh ;顯示冒號(hào)call enablecall write2mov a,minmov b,#10div abadd a,#30hmov p0,#0cbh ;顯示分十位call enablecall write2mov a,badd a,#30hmov p0,#0cch ;顯示分個(gè)

34、位call enablecall write2mov a,#3ahmov p0,#0cdh ;顯示冒號(hào)call enablecall write2mov a,secmov b,#10div abadd a,#30h mov p0,#0ceh ;顯示秒十位call enablecall write2mov a,badd a,#30hmov p0,#0cfh ;顯示秒個(gè)位call enablecall write2mov p0,#0c0h ;設(shè)光標(biāo)地址 call enablemov dptr,#table2;寫數(shù)據(jù)call write1 ret寫指令enable: clr rsclr rwclr

35、elcall delaysetb eret寫數(shù)據(jù)write1:mov r1,#00ha1:mov a,r1movc a,a+dptrcall write2inc r1cjne a,#0feh,a1 ;未到字符串末尾繼續(xù)retwrite2:mov p0,asetb rsclr rwclr ecall delaysetb eretdelay:mov r4,#05d1:mov r5,#0ffhdjnz r5,$djnz r4,d1ret tab:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb 80h,90h,88h,83h,0c6h,0a1h,86h,8ehtab

36、1:db 89h,86h,0c7h,0c7h,0c0htab2:db 0c6h,88h,0c0htable1:dbwelcom here,0fehtable2:dbdff wb ,0fehtable4:db cau,0fehtable3:db 30h,31h,32h,33h db 34h,35h,36h,37hdb 38h,39h,41h,42hdb 43h,44h,45h,46h播放歌曲程序main0:mov tmod,#11hmov ie,#8ah mov th1,#3chmov tl1,#0b0h lcall ksjnz ttm12 mov 40h,#00hnext20:mov a,40

37、hmov dph,52hmov dpl,53hmovc a,a+dptrmov r2,ajz stopanl a,#0fhmov r1,amov a,r2swap aanl a,#0fhjnz singclr tr0jmp w1sing:dec amov 22h,arl amov dptr,#table00movc a,a+dptrmov th0,amov 21h,amov a,22hrl ainc amovc a,a+dptrmov tl0,amov 20h,asetb tr0setb tr1w1:lcall delay30inc 40hlcall ks ;有鍵跳出jnz stopljmp

38、next20stop:clr tr0clr tr1ljmp main0 ttm12:lcall k2mov a,37hcjne a,#0eh,ttm13clr tr1lcall delay1ttm120:lcall kslcall delay1jz ttm120lcall k2mov a,37hcjne a,#0eh,ttm120setb tr1ljmp next20ttm13:cjne a,#0ch,ttm14mov a,52hinc amov 52h,amov a,53hinc amov 53h,amov a,36hinc amov 37h,aljmp ttm2ttm14:cjne a,#

39、0dh,ttm2mov a,52hdec amov 52h,amov a,53hdec amov 53h,amov a,36hdec amov 37h,a ttm2:ret定時(shí)器中斷子程序0tt0:push accpush pswmov tl0,20hmov th0,21hcpl p3.7pop pswpop accreti定時(shí)器中斷子程序1t1int: mov th1, #3chmov tl1, #0b0hdjnz l50ms,x4mov l50ms,#20每秒種時(shí)鐘刷新秒顯示一次secset:mov a,secmov b,#10div abadd a,#30h mov p0,#0ceh ;

40、顯示秒十位lcall enablelcall write2mov a,badd a,#30hmov p0,#0cfh ;顯示秒個(gè)位lcall enablelcall write2mov a,secinc amov sec,axrl a,#60x4:jnz outminset:mov sec,#00h mov a,mininc amov min,a mov b,#10div abadd a,#30hmov p0,#0cbh ;顯示分十位lcall enablelcall write2mov a,badd a,#30hmov p0,#0cch ;顯示分個(gè)位lcall enablelcall wri

41、te2mov a,min mov b,#3mul abmov b,#100div abmov r2,amov a,#10xch a,bdiv abmov a,minxrl a,#60jnz outhouset:mov min,#00h mov a,houmov b,#10div abadd a,#30h ;將bcd嗎轉(zhuǎn)化為asiic碼mov p0,#0c8h ;顯示小時(shí)十位call enablecall write2mov a,badd a,#30hmov p0,#0c9h ;顯示小時(shí)個(gè)位call enablecall write2mov a,houinc amov hou,axrl a,#1

42、0jnz outsjmp overflowout:retioverflow:mov l50ms,#20mov l1ms,#00hmov l250ms,#00hmov sec,#00hmov min,#00hmov hou,#00hretidelay30: mov r7,#2w2:mov r4,#125w3:mov r3,#248djnz r3,$djnz r4,w3djnz r7,w2djnz r1,delay30rettable00:dw 64580,64684,64777,64820dw 64898,64968,65030,64260dw 64400,64524,65058,63835,64021第一首精忠報(bào)國(guó)table10: db 66h,52h,36h,22h,12h,12h,22h,32h,98h,84h,82h,92h,14h,12h,22hdb 32h,52h,22h,42h,38h,66h,52h,36h,22h,12h,22h,22h,32h,98hdb 24h,22h,32h,54h,52h,32h,92h,12h,92h,82h,98h,66h,52h,36h,22hdb 12h,12h,22h,32h,98h,8

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論