<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于A(yíng)T89S52的樂(lè )曲編輯發(fā)生器的設計

基于A(yíng)T89S52的樂(lè )曲編輯發(fā)生器的設計

作者: 時(shí)間:2007-06-11 來(lái)源:網(wǎng)絡(luò ) 收藏
1引言

RTX51的單片機為控制核心,操作者可以通過(guò)44矩陣鍵盤(pán)輸入約定格式的任意,按“播放”鍵后,系統便開(kāi)始播放所,并且音調和節拍都可以由單片機精確控制。為了降低成本,在最小硬件的基礎上,系統的功能盡可能用軟件來(lái)實(shí)現,系統軟件是在面向MCS-51系列單片機的嵌入式實(shí)時(shí)多任務(wù)操作系統RTX51Tiny平臺上,用C51高級語(yǔ)言和MCS-51匯編語(yǔ)言混合編程而開(kāi)發(fā)的。

2 系統硬件

為了今后能夠在線(xiàn)升級用戶(hù)應用程序,采用帶ISP接口的單片機為核心構成樂(lè )曲。具有快速8051內核、8 KB FlashE2PROM、256 B IDATA RAM,完全符合運行RTX51Tiny的硬件要求。筆者已研制了AT89S51/52的目標程序PC機下載軟件,無(wú)需編程器即可完成單片機應用系統的開(kāi)發(fā)。

為了編輯任意樂(lè )曲的人機界面,采用44矩陣鍵盤(pán)作為系統的輸入設備,采用點(diǎn)陣式液晶顯示模塊TC1602A作為系統的輸出設備。為了存儲和讀出任意樂(lè )曲,采用帶I2C串行接口的E2PROM存儲器AT24C02。為了放大單片機AT89S52產(chǎn)生的樂(lè )曲聲音,采用了功率放大器LM386。系統硬件電路原理圖如圖1所示。


3 樂(lè )曲編輯和播放的軟件實(shí)現

3.1 單片機產(chǎn)生音頻矩形脈沖的方法

利用單片機的內部定時(shí)器T1并使其工作在定時(shí)器工作方式1(16 bit定時(shí)),改變T1的計數初值,就可以在單片機的I/O引腳端產(chǎn)生不同頻率的音頻矩形脈沖。

例如,音頻矩形脈沖信號的頻率為523 Hz,則其周期T=1/523=1912μs,因此,只要讓計數器定時(shí)1912μs2=956μs,當定時(shí)956μs到的時(shí)候,將AT89S52的樂(lè )曲輸出引腳P3.7反相,就可得到中音DO(523 Hz)。

單片機定時(shí)器計數初值T與單片機內部機器周期信號頻率Fi和音頻矩形脈沖信號頻率Fr的關(guān)系如下。

為了敘述方便,不妨把定時(shí)器計數初值T稱(chēng)為簡(jiǎn)譜碼。

3.2 樂(lè )曲的音調表示方法

單片機播放樂(lè )曲的過(guò)程,主要是用單片機來(lái)識別所編輯的樂(lè )曲并播放出來(lái)。單片機需要識別樂(lè )曲中的音調和音長(cháng)(音長(cháng)亦稱(chēng)為節拍),本設計用字母A~Z來(lái)代表樂(lè )曲的各個(gè)音調。數字0作為音調的結束標志,如表1所示。

3.3 樂(lè )曲編輯的軟件實(shí)現方法

在系統軟件設計時(shí),已將按鍵處理作為一個(gè)任務(wù)即“按鍵處理任務(wù)”,它的主要功能是編輯樂(lè )曲?!鞍存I處理任務(wù)”的執行需要“鍵盤(pán)掃描任務(wù)”向它發(fā)送信號來(lái)觸發(fā)執行?!鞍存I處理任務(wù)”的C51源程序如下。



3.4 樂(lè )曲播放的軟件實(shí)現方法

在設計“播放任務(wù)”程序時(shí),利用AT89S52內部的定時(shí)器T1定時(shí)溢出中斷來(lái)產(chǎn)生音調的頻率,并利用RTX51操作系統的os_wait2(K_TMO,ticks)函數來(lái)產(chǎn)生音長(cháng)?!安シ湃蝿?wù)”的C51源程序如下:


3.5 系統軟件流程

根據對系統功能的分析,把系統軟件分解為5個(gè)任務(wù),具體如下:

任務(wù)0:系統初始化任務(wù),包括TC1602A的初始化、定時(shí)器T1的初始化、中斷初始化。在啟動(dòng)任務(wù)1~任務(wù)4后,自動(dòng)刪除任務(wù)0,使得任務(wù)0只在系統上電復位時(shí)執行一次。

任務(wù)1:鍵盤(pán)掃描任務(wù)。每隔50 ms執行1次,掃描所得的鍵值存于全局變量keycode,然后向“按鍵處理任務(wù)”發(fā)信號。

任務(wù)2:按鍵處理任務(wù)。等待信號,根據鍵值keycode完成相應處理,實(shí)現的功能包括樂(lè )曲的編輯、樂(lè )曲的保存和讀取等。

任務(wù)3:播放任務(wù)。等待信號,按照音調和音長(cháng)播放樂(lè )曲。

任務(wù)4:顯示刷新任務(wù)。根據光標指針變量的值在液晶屏上顯示樂(lè )曲數據(音調和音長(cháng))。

系統軟件流程圖如圖2所示。

4 結束語(yǔ)

本文給出了以單片機AT89S52為核心構成的任意樂(lè )曲編輯,具有硬件電路簡(jiǎn)單、操作界面友好、使用方便的特點(diǎn)。該系統已投入運行,播放出來(lái)的樂(lè )曲效果良好,音調和節拍都由單片機控制得相當準確。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>