1.1 課題背景 目前,單片機(jī)正朝著高性能和多品種方向發(fā)展,發(fā)展趨勢(shì)將是進(jìn)一步向著CMOS化、低功耗、小體積、大容量、高性能、低價(jià)格和外圍電路內(nèi)裝化等幾個(gè)方面。單片機(jī)應(yīng)用的重要意義還在于它從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計(jì)思想和設(shè)計(jì)方法。從前必須由模擬電路或數(shù)字電路實(shí)現(xiàn)的大部分功能,現(xiàn)在已能用單片機(jī)通過(guò)軟件方法來(lái)實(shí)現(xiàn)了。這種軟件代替硬件的控制技術(shù)也稱為微控制技術(shù),是傳統(tǒng)控制技術(shù)的一次革命。單片機(jī)滲透到我們生活的各個(gè)領(lǐng)域,幾乎很難找到哪個(gè)領(lǐng)域沒(méi)有單片機(jī)的蹤跡。導(dǎo)彈的導(dǎo)航裝置,飛機(jī)上各種儀表的控制,計(jì)算機(jī)的網(wǎng)絡(luò)通訊與數(shù)據(jù)傳輸,工業(yè)自動(dòng)化過(guò)程的實(shí)時(shí)控制和數(shù)據(jù)處理,廣泛使用的各種智能IC卡,民用豪華轎車的安全保障系統(tǒng),錄像機(jī)、攝像機(jī)、全自動(dòng)洗衣機(jī)的控制,以及程控玩具、電子寵物等等,這些都離不開(kāi)單片機(jī)。 本設(shè)計(jì)是以STC89C52芯片的電路為基礎(chǔ),加上蜂鳴器、液晶顯示器等,以此來(lái)實(shí)現(xiàn)音樂(lè)演奏控制器的硬件電路,通過(guò)軟件程序來(lái)控制單片機(jī)內(nèi)部的定時(shí)器使其演奏出優(yōu)美動(dòng)聽(tīng)的音樂(lè)。用戶可以按照自己的喜好選擇音樂(lè)并將其轉(zhuǎn)化成機(jī)器碼存入單片機(jī)的存儲(chǔ)器中。對(duì)于不同型號(hào)的單片機(jī)只需要相應(yīng)的改變一下地址即可。該軟、硬件系統(tǒng)具有很好的通用性,很高的實(shí)際使用價(jià)值。 1.2 單片機(jī)數(shù)字音樂(lè)盒有關(guān)介紹 發(fā)音原理:播放一段音樂(lè)需要的是兩個(gè)元素,一個(gè)是音調(diào),另一個(gè)是音符。首先要了解對(duì)應(yīng)的音調(diào),音調(diào)主要由聲音的頻率決定,同時(shí)也與聲音強(qiáng)度有關(guān)。對(duì)一定強(qiáng)度的純音,音調(diào)隨頻率的升降而升降;對(duì)一定頻率的純音、低頻純音的音調(diào)隨聲強(qiáng)增加而下降,高頻純音的音調(diào)卻隨強(qiáng)度增加而上升。另外,音符的頻率有所不同。 音符的發(fā)音主要靠不同的音頻脈沖。利用單片機(jī)內(nèi)部定時(shí)器/計(jì)數(shù)器0,使其工作在模式1,定時(shí)中斷,然后控制引腳的輸出音樂(lè)。只要算出某一音頻的周期(1/頻率),然后將此周期除以2,即為半周期的時(shí)間,利用定時(shí)器計(jì)時(shí)這個(gè)半周期時(shí)間,每當(dāng)計(jì)時(shí)到后就將輸出脈沖的I/O反相,然后重復(fù)計(jì)時(shí)此半周期時(shí)間再對(duì)I/O反相,就可在I/O腳上得到此頻率的脈沖。 1.2.1 歌曲簡(jiǎn)譜的編碼規(guī)則 do re mi fa so la si分別編碼為1~7。播放長(zhǎng)度以十六分音符為單位(在本程序中為165ms),一拍即四分音符等于4個(gè)十六分音符,編為4,其它的播放時(shí)間以此類推。音調(diào)作為編碼的高4位,而播放時(shí)間作為低4位,如此音調(diào)和節(jié)拍就構(gòu)成了一個(gè)編碼。以0xff作為曲譜的結(jié)束標(biāo)志。 舉例1:音調(diào)do,發(fā)音長(zhǎng)度為兩拍,即二分音符,將其編碼為0x18。 舉例2:音調(diào)re,發(fā)音長(zhǎng)度為半拍,即八分音符,將其編碼為0x22。 歌曲播放的設(shè)計(jì)。先將歌曲的簡(jiǎn)譜進(jìn)行編碼,儲(chǔ)存在一個(gè)數(shù)據(jù)類型為unsigned char 的數(shù)組中。程序從數(shù)組中取出一個(gè)數(shù),然后分離出高4位得到音調(diào),接著找出相應(yīng)的值賦給定時(shí)器0,使之定時(shí)操作蜂鳴器,得出相應(yīng)的音調(diào);接著分離出該數(shù)的低4位,得到延時(shí)時(shí)間,接著調(diào)用軟件延時(shí)。 1.2.2 確定定時(shí)器0對(duì)應(yīng)于音調(diào)的初值 不同的音調(diào)對(duì)應(yīng)著不同的物理頻率,而若要產(chǎn)生一定頻率的聲音,我們只需用一定頻率的方波來(lái)驅(qū)動(dòng)蜂鳴器即可。對(duì)于固定頻率的產(chǎn)生方法,本系統(tǒng)中用定時(shí)器0設(shè)置為工作方式1(TMOD=0x01),對(duì)不同的音調(diào)依據(jù)頻率裝入對(duì)應(yīng)的計(jì)數(shù)初值,定時(shí)器計(jì)數(shù)完時(shí)將輸出端取反(編程中采用異或),進(jìn)而產(chǎn)生對(duì)應(yīng)的方波。具體計(jì)算如下: 如對(duì)于低音SO,其頻率為392HZ,我們實(shí)驗(yàn)中采用的為12M晶振,因此機(jī)器周期為1us,那么該音調(diào)對(duì)應(yīng)的計(jì)數(shù)初值為:65536-1000000/(2*392)=65536-1276=64270 解釋:由于工作方式0中計(jì)數(shù)器的THO和TL0所有位均用于裝載計(jì)數(shù)初值,因此最大計(jì)數(shù)值為256*256=65536,周期為1x 10^6 -s,頻率為392HZ,每定時(shí)一次對(duì) 輸出取反,因此計(jì)數(shù)初值應(yīng)除以2。
|