2 系統(tǒng)硬件設計
為了今后能夠在線升級用戶應用程序,采用帶ISP接口的單片機AT89S52為核心構成樂曲編輯發(fā)生器。AT89S52具有快速8051內(nèi)核、8 KB FlashE2PROM、256 B IDATA RAM,完全符合運行RTX51Tiny的硬件要求。筆者已研制了AT89S51/52的目標程序PC機下載軟件,無需編程器即可完成單片機應用系統(tǒng)的開發(fā)。
為了設計編輯任意樂曲的人機界面,采用4×4矩陣鍵盤作為系統(tǒng)的輸入設備,采用點陣式液晶顯示模塊TC1602A作為系統(tǒng)的輸出設備。為了存儲和讀出任意樂曲,采用帶I2C串行接口的E2PROM存儲器AT24C02。為了放大單片機AT89S52產(chǎn)生的樂曲聲音,采用了功率放大器LM386。系統(tǒng)硬件電路原理圖如圖1所示。
3 樂曲編輯和播放的軟件實現(xiàn)
3.1 單片機產(chǎn)生音頻矩形脈沖的方法
利用單片機的內(nèi)部定時器T1并使其工作在定時器工作方式1(16 bit定時),改變T1的計數(shù)初值,就可以在單片機的I/O引腳端產(chǎn)生不同頻率的音頻矩形脈沖。
例如,音頻矩形脈沖信號的頻率為523 Hz,則其周期T=1/523=1912μs,因此,只要讓計數(shù)器定時1912μs÷2=956μs,當定時956μs到的時候,將AT89S52的樂曲輸出引腳P3.7反相,就可得到中音DO(523 Hz)。
單片機定時器計數(shù)初值T與單片機內(nèi)部機器周期信號頻率Fi和音頻矩形脈沖信號頻率Fr的關系如下。![]()
為了敘述方便,不妨把定時器計數(shù)初值T稱為簡譜碼。
3.2 樂曲的音調(diào)表示方法
單片機播放樂曲的過程,主要是用單片機來識別所編輯的樂曲并播放出來。單片機需要識別樂曲中的音調(diào)和音長(音長亦稱為節(jié)拍),本設計用字母A~Z來代表樂曲的各個音調(diào)。數(shù)字0作為音調(diào)的結(jié)束標志,如表1所示。

3.3 樂曲編輯的軟件實現(xiàn)方法
在系統(tǒng)軟件設計時,已將按鍵處理作為一個任務即“按鍵處理任務”,它的主要功能是編輯樂曲?!鞍存I處理任務”的執(zhí)行需要“鍵盤掃描任務”向它發(fā)送信號來觸發(fā)執(zhí)行?!鞍存I處理任務”的C51源程序如下。


3.4 樂曲播放的軟件實現(xiàn)方法
在設計“播放任務”程序時,利用AT89S52內(nèi)部的定時器T1定時溢出中斷來產(chǎn)生音調(diào)的頻率,并利用RTX51操作系統(tǒng)的os_wait2(K_TMO,ticks)函數(shù)來產(chǎn)生音長。“播放任務”的C51源程序如下:

3.5 系統(tǒng)軟件流程
根據(jù)對系統(tǒng)功能的分析,把系統(tǒng)軟件分解為5個任務,具體如下:
任務0:系統(tǒng)初始化任務,包括TC1602A的初始化、定時器T1的初始化、中斷初始化。在啟動任務1~任務4后,自動刪除任務0,使得任務0只在系統(tǒng)上電復位時執(zhí)行一次。
任務1:鍵盤掃描任務。每隔50 ms執(zhí)行1次,掃描所得的鍵值存于全局變量keycode,然后向“按鍵處理任務”發(fā)信號。
任務2:按鍵處理任務。等待信號,根據(jù)鍵值keycode完成相應處理,實現(xiàn)的功能包括樂曲的編輯、樂曲的保存和讀取等。
任務3:播放任務。等待信號,按照音調(diào)和音長播放樂曲。
任務4:顯示刷新任務。根據(jù)光標指針變量的值在液晶屏上顯示樂曲數(shù)據(jù)(音調(diào)和音長)。
系統(tǒng)軟件流程圖如圖2所示。

4 結(jié)束語
本文給出了以單片機AT89S52為核心構成的任意樂曲編輯發(fā)生器,具有硬件電路簡單、操作界面友好、使用方便的特點。該系統(tǒng)已投入運行,播放出來的樂曲效果良好,音調(diào)和節(jié)拍都由單片機控制得相當準確。
北京2022年10月18日 /美通社/ -- 10月14日,國際數(shù)據(jù)公司(IDC)發(fā)布《2022Q2中國軟件定義存儲及超融合市場研究報告》,報告顯示:2022年上半年浪潮超融合銷售額同比增長59.4%,近5倍于...
關鍵字: IDC BSP 數(shù)字化 數(shù)據(jù)中心要問機器人公司哪家強,波士頓動力絕對是其中的佼佼者。近來年該公司在機器人研發(fā)方面獲得的一些成果令人印象深刻,比如其開發(fā)的機器人會后空翻,自主爬樓梯等。這不,波士頓動力又發(fā)布了其機器人組團跳男團舞的新視頻,表演的機器人包括...
關鍵字: 機器人 BSP 工業(yè)機器人 現(xiàn)代汽車