采用AT89S52的樂(lè)曲編輯發(fā)生器的設(shè)計(jì)
1引言
基于RTX51的樂(lè)曲編輯發(fā)生器以AT89S52單片機(jī)為控制核心,操作者可以通過(guò)4×4矩陣鍵盤(pán)輸入約定格式的任意樂(lè)曲,按“播放”鍵后,系統(tǒng)便開(kāi)始播放所編輯的樂(lè)曲,并且音調(diào)和節(jié)拍都可以由單片機(jī)精確控制。為了降低成本,在最小硬件設(shè)計(jì)的基礎(chǔ)上,系統(tǒng)的功能盡可能用軟件來(lái)實(shí)現(xiàn),系統(tǒng)軟件是在面向MCS-51系列單片機(jī)的嵌入式實(shí)時(shí)多任務(wù)操作系統(tǒng)RTX51Tiny平臺(tái)上,用C51高級(jí)語(yǔ)言和MCS-51匯編語(yǔ)言混合編程而開(kāi)發(fā)的。
2 系統(tǒng)硬件設(shè)計(jì)
為了今后能夠在線(xiàn)升級(jí)用戶(hù)應(yīng)用程序,采用帶ISP接口的單片機(jī)AT89S52為核心構(gòu)成樂(lè)曲編輯發(fā)生器。AT89S52具有快速8051內(nèi)核、8 KB FlashE2PROM、256 B IDATA RAM,完全符合運(yùn)行RTX51Tiny的硬件要求。筆者已研制了AT89S51/52的目標(biāo)程序PC機(jī)下載軟件,無(wú)需編程器即可完成單片機(jī)應(yīng)用系統(tǒng)的開(kāi)發(fā)。
為了設(shè)計(jì)編輯任意樂(lè)曲的人機(jī)界面,采用4×4矩陣鍵盤(pán)作為系統(tǒng)的輸入設(shè)備,采用點(diǎn)陣式液晶顯示模塊TC1602A作為系統(tǒng)的輸出設(shè)備。為了存儲(chǔ)和讀出任意樂(lè)曲,采用帶I2C串行接口的E2PROM存儲(chǔ)器AT24C02。為了放大單片機(jī)AT89S52產(chǎn)生的樂(lè)曲聲音,采用了功率放大器LM386。系統(tǒng)硬件電路原理圖如圖1所示。
3 樂(lè)曲編輯和播放的軟件實(shí)現(xiàn)
3.1 單片機(jī)產(chǎn)生音頻矩形脈沖的方法
利用單片機(jī)的內(nèi)部定時(shí)器T1并使其工作在定時(shí)器工作方式1(16 bit定時(shí)),改變T1的計(jì)數(shù)初值,就可以在單片機(jī)的I/O引腳端產(chǎn)生不同頻率的音頻矩形脈沖。
例如,音頻矩形脈沖信號(hào)的頻率為523 Hz,則其周期T=1/523=1912μs,因此,只要讓計(jì)數(shù)器定時(shí)1912μs÷2=956μs,當(dāng)定時(shí)956μs到的時(shí)候,將AT89S52的樂(lè)曲輸出引腳P3.7反相,就可得到中音DO(523 Hz)。
單片機(jī)定時(shí)器計(jì)數(shù)初值T與單片機(jī)內(nèi)部機(jī)器周期信號(hào)頻率Fi和音頻矩形脈沖信號(hào)頻率Fr的關(guān)系如下。
為了敘述方便,不妨把定時(shí)器計(jì)數(shù)初值T稱(chēng)為簡(jiǎn)譜碼。
3.2 樂(lè)曲的音調(diào)表示方法
單片機(jī)播放樂(lè)曲的過(guò)程,主要是用單片機(jī)來(lái)識(shí)別所編輯的樂(lè)曲并播放出來(lái)。單片機(jī)需要識(shí)別樂(lè)曲中的音調(diào)和音長(zhǎng)(音長(zhǎng)亦稱(chēng)為節(jié)拍),本設(shè)計(jì)用字母A~Z來(lái)代表樂(lè)曲的各個(gè)音調(diào)。數(shù)字0作為音調(diào)的結(jié)束標(biāo)志,如表1所示。
3.3 樂(lè)曲編輯的軟件實(shí)現(xiàn)方法
在系統(tǒng)軟件設(shè)計(jì)時(shí),已將按鍵處理作為一個(gè)任務(wù)即“按鍵處理任務(wù)”,它的主要功能是編輯樂(lè)曲?!鞍存I處理任務(wù)”的執(zhí)行需要“鍵盤(pán)掃描任務(wù)”向它發(fā)送信號(hào)來(lái)觸發(fā)執(zhí)行?!鞍存I處理任務(wù)”的C51源程序如下。
評(píng)論