當(dāng)前的很多用單片機(jī)實(shí)現(xiàn)音樂演奏的系統(tǒng)都是利用開發(fā)板結(jié)合仿真器實(shí)現(xiàn)的,這種方法不是很復(fù)雜,實(shí)現(xiàn)也較方便,但是調(diào)試不是很方便,且成本也較高。 本文提出的一種基于Proteus 的單片機(jī)演奏音樂的方法,非常簡單實(shí)用,且該方法基于軟件來實(shí)現(xiàn)的,所以成本非常低,調(diào)試方便,效果也很不錯(cuò),適合于愛好音樂的單片機(jī)學(xué)習(xí)者。 單片機(jī)系統(tǒng)的設(shè)計(jì)分兩大部分:硬件設(shè)計(jì)部分和軟件設(shè)計(jì)部分。
1 硬件設(shè)計(jì)
硬件部分比較簡單,如果在開發(fā)板上做實(shí)驗(yàn)可仿下面圖1 電路連接。
AT89C51 單片機(jī)的P2.5 口控制一個(gè)8550 的三極管,三極管控制電磁蜂鳴器的電源通斷。
如果用Proteus 軟件來仿真的話,電路更加簡單,見圖2。
圖2 在Proteus 環(huán)境下用單片機(jī)控制蜂鳴器發(fā)聲的原理圖。
需要的關(guān)鍵元件:單片機(jī)和蜂鳴器。
為了便于軟件編程,先要了解單片機(jī)唱歌的基本原理。
什么是聲音呢?聲音是空氣的振蕩,不同的振蕩頻率我們就可以聽到不同聲調(diào)的聲音。 音的頻譜范圍約在幾十到幾千赫茲。
其次,如何讓蜂鳴器發(fā)聲?蜂鳴器有很多種類,但大致分為兩類:有源式(直流電就發(fā)聲,但頻率單一);無源式(根據(jù)輸入方波頻率而發(fā)出不同的聲音)。 這里選擇無源式蜂鳴器。
單片機(jī)唱歌的基本原理:利用程序來控制單處機(jī)某個(gè)口線出一定頻率的方波到蜂鳴器,蜂鳴器就可以發(fā)出一定音調(diào)的聲音,若再利用不同的延時(shí)程序改變輸出頻率,就可以改變音調(diào),進(jìn)而就可讓單片機(jī)發(fā)出"1"、"2","3","4","5","6","7"的音樂。
2 軟件設(shè)計(jì)
通過軟件延時(shí)或者定時(shí)器延時(shí)來的方式以不同頻率改變口線的的高低電平狀態(tài)來實(shí)現(xiàn)的。 如果只是讓蜂鳴器發(fā)聲這已經(jīng)夠了。 但是我們要的是唱歌,所以還有一些工作需要作。
2.1 音調(diào)
輸出不同頻率的方波,以實(shí)現(xiàn)1、2、3、4 等的不同音調(diào);比如,發(fā)出200Hz 的音頻,其周期為1/200s,即5ms. 這樣,當(dāng) P2.5 的高電平或低電平的持續(xù)時(shí)間為2.5ms 時(shí),就能發(fā)出200HZ 的音調(diào)。 我們可以寫一個(gè)延時(shí)子程序,用R3 來提供參數(shù),R3=1 時(shí),延時(shí)為20us,那么R3 取2500/20=125(7DH)時(shí),就可以發(fā)出200Hz 的音調(diào),提供不同的R3 常數(shù),可以得到不同的音調(diào)變化。
利用通用發(fā)聲程序可以編寫樂曲演奏程序,樂曲是按照一定的高低,長短和強(qiáng)弱的關(guān)系組成的音調(diào),在一首樂曲中,每音符的音高和音長與頻率和節(jié)拍有關(guān)(如圖3 所示)。
圖3 音符的音高和音長與頻率的關(guān)系
圖3 畫出了兩個(gè)音階(一個(gè)音階是8 個(gè)音符)的鋼琴鍵和每個(gè)鍵的音符名及其頻率(HZ),低音階以低C(130.8Hz)到中C(261.7Hz)高音階以中C 到高C(523.3Hz)黑鍵比它旁邊的白鍵高半個(gè)音或低半個(gè)音。 組成樂曲的每個(gè)音符的頻率和持續(xù)時(shí)間是樂曲程序發(fā)聲所需要的兩個(gè)重要數(shù)據(jù)。 頻率可以從圖中得到,音符的持續(xù)時(shí)間可根據(jù)樂曲速度及每個(gè)音符的節(jié)拍數(shù)來確定,是可以從樂譜中得到的。
2.2 節(jié)拍
控制一個(gè)音符輸出的時(shí)間,比如1 拍、1/4 拍。 在4/4(四四拍)中,四分音符為一拍,每小節(jié)4 拍,全音符持續(xù)4 拍,二分音符持續(xù)2 拍,四分音符持續(xù)1 拍,八分音符持續(xù)半拍。 而全音符需要1s 的時(shí)間,則二分音符持續(xù)時(shí)間為0.5s(50×10ms),四分音符的持續(xù)時(shí)間為0.25s(25×10ms),八分音符持續(xù)時(shí)間為0.125s(12.5×10ms)。
知道了音調(diào)與頻率和時(shí)間的關(guān)系,就可以按照樂曲的曲譜將每個(gè)音符的頻率和持續(xù)時(shí)間定義成兩個(gè)數(shù)據(jù)表,然后編寫程序依次取出表中的時(shí)間值和頻率值。
僅上所敘還不夠,要準(zhǔn)確奏出一首曲子,必須準(zhǔn)確地控制樂曲節(jié)奏,即一音符的持續(xù)時(shí)間。 例如,一首曲子的節(jié)奏為每分種94 拍,那么一拍就為60/94=0.64s.
音樂的節(jié)拍我們可用定時(shí)器來控制,簡單的說,一個(gè)一拍的音符唱0.64s,我們就設(shè)置一個(gè)定時(shí)器定時(shí)0.64s,時(shí)間一到就換下一個(gè)音符。 但是,由于單片機(jī)的T0,在12MHz 晶振下最大定時(shí)時(shí)間只能為65ms,因此不可能直接用改變T0 的時(shí)間初值來實(shí)現(xiàn)不同節(jié)拍。 如何定時(shí)一個(gè)更大的時(shí)間,我們可以用T0 來產(chǎn)生10ms 的時(shí)間基準(zhǔn),然后設(shè)置 一個(gè)中斷計(jì)數(shù)器,通過判別中斷計(jì)數(shù)器的值來控制節(jié)拍時(shí)間的長短。
例如對(duì)1/4 拍音符,定時(shí)時(shí)間為0.16s,相應(yīng)的時(shí)間常數(shù)(中段計(jì)數(shù)器)為16(即10H);對(duì)3 拍音符,定時(shí)時(shí)間為1.92s,相應(yīng)時(shí)間長數(shù)為192(即C0H)。
2.3 電路實(shí)現(xiàn)
因?yàn)橐皇浊硬恢挂粋€(gè)音符,我們不可能對(duì)每一個(gè)音符的音階都去"手工"的提供時(shí)間常數(shù),為了實(shí)現(xiàn)的簡化,我們編制一個(gè)將每一音符的時(shí)間常數(shù)和其相應(yīng)的節(jié)拍常數(shù)作為一組,按順序?qū)非械乃谐?shù)排列成的表格,在程序里用查表指令依次查出每一個(gè)音符的頻率和對(duì)應(yīng)節(jié)拍時(shí)間,產(chǎn)生音符并控制節(jié)奏,就可以實(shí)現(xiàn)演奏效果。
此外,結(jié)束符和體止符可以分別用代碼00H 和FFH 來表示,若查表結(jié)果為00H,則表示曲子終了;若查表結(jié)果為FFH,則產(chǎn)生相應(yīng)的停頓效果。
為了產(chǎn)生手彈的節(jié)奏感,在某些音符(例兩個(gè)相同音符)音插入一個(gè)時(shí)間單位的頻率略有不同的音符。
程序框圖如下圖4. 本程序演奏的是民歌"八月桂花遍地開",C 調(diào),節(jié)奏為94 拍/min。
用Keil 對(duì)程序進(jìn)行編譯,見圖5,具體方法可文獻(xiàn)[5],編譯無誤后生成。hex 文件,然后雙擊Proteus環(huán)境下的原理圖中的AT89C51,找到這個(gè)。 hex 文件,然后點(diǎn)按鈕Play,這時(shí)單片機(jī)控制的蜂鳴器就可以開始播放音樂了。
圖4 程序流程圖
圖5 在Keil 環(huán)境下對(duì)程序進(jìn)行編譯
3 結(jié)論
以上介紹的方法已通過測(cè)試,運(yùn)行良好。 對(duì)初學(xué)單片機(jī)者有一定的啟示作用。 讀者也可以自行找出一首歌,將樂曲翻譯成碼表輸入單片機(jī),而程序不變。 本實(shí)驗(yàn)方法簡便,即使不懂音樂的人,也可方便地將一首陌生的曲子翻譯成代碼。
上一篇:利用AT89C51單片機(jī)控制剪板機(jī)
下一篇:6MHz時(shí)鐘的單片機(jī)AT89C51系統(tǒng)時(shí)鐘中斷的應(yīng)用分析
推薦閱讀
史海拾趣
奧松電子自成立以來,一直致力于MEMS特色半導(dǎo)體芯片的研發(fā)與生產(chǎn)。公司憑借其國內(nèi)領(lǐng)先的生產(chǎn)線技術(shù),成功打造了一條高效、穩(wěn)定的芯片生產(chǎn)線。這不僅提升了公司的生產(chǎn)效率,也為公司在電子行業(yè)中樹立了良好的口碑。隨著技術(shù)的不斷進(jìn)步,奧松電子的芯片性能也得到了顯著提升,滿足了市場對(duì)于高質(zhì)量、高性能芯片的需求。
隨著公司的發(fā)展,Coherent Inc.開始通過收購和整合來增強(qiáng)自身實(shí)力。1998年,公司以6500億美金收購了Palomar Medical Technologies的部分業(yè)務(wù),這一舉措進(jìn)一步拓寬了公司的業(yè)務(wù)范圍和技術(shù)領(lǐng)域。此外,公司還陸續(xù)收購了多家具有技術(shù)優(yōu)勢(shì)的公司,如Positive Light和Lambda Physik,這些收購不僅增強(qiáng)了公司的技術(shù)實(shí)力,也使其在激光技術(shù)領(lǐng)域的地位更加穩(wěn)固。
隨著技術(shù)的不斷進(jìn)步和市場的不斷變化,DUBILIER公司意識(shí)到必須不斷拓展市場以保持競爭力。因此,公司決定采取多元化的市場戰(zhàn)略,進(jìn)入多個(gè)不同的細(xì)分市場。通過與行業(yè)合作伙伴建立緊密的合作關(guān)系,DUBILIER公司成功地將其產(chǎn)品推廣到了更廣泛的領(lǐng)域。同時(shí),公司還積極開拓國際市場,將產(chǎn)品出口到世界各地。這些努力不僅為公司帶來了更多的商業(yè)機(jī)會(huì),還進(jìn)一步鞏固了其在全球電子行業(yè)的地位。
在Micro LED領(lǐng)域,Compound Photonics同樣展現(xiàn)出了強(qiáng)大的實(shí)力。公司曾與Plessey合作開發(fā)Micro LED產(chǎn)品,雙方的合作一度被業(yè)界看好。然而,就在合作即將取得突破時(shí),Meta公司突然出手收購了Plessey的產(chǎn)能,使得Compound Photonics失去了一個(gè)重要的合作伙伴。面對(duì)這一突如其來的競爭壓力,Compound Photonics不得不重新調(diào)整戰(zhàn)略,尋找新的合作伙伴。
Harbour Industries成立于1965年,起初主要專注于電纜的生產(chǎn)與銷售。在20世紀(jì)60年代末和70年代初期,隨著全球航空航天市場的迅速增長,Harbour敏銳地捕捉到了這一機(jī)遇。為了服務(wù)這一市場,公司進(jìn)行了大規(guī)模的工廠擴(kuò)建,并引入了先進(jìn)的生產(chǎn)設(shè)備和技術(shù)。這一舉措不僅提升了公司的產(chǎn)能,還確保了產(chǎn)品質(zhì)量能夠滿足航空領(lǐng)域的高標(biāo)準(zhǔn)。通過不懈努力,Harbour逐漸在航空電纜市場中占據(jù)了一席之地。
CMDS深知技術(shù)創(chuàng)新是企業(yè)持續(xù)發(fā)展的關(guān)鍵。因此,公司不斷加大研發(fā)投入,積極引進(jìn)優(yōu)秀人才和先進(jìn)技術(shù)設(shè)備。通過持續(xù)的研發(fā)投入和人才培養(yǎng),CMDS不斷推出具有創(chuàng)新性和競爭力的新產(chǎn)品和解決方案。這些新產(chǎn)品不僅滿足了客戶不斷變化的需求,也推動(dòng)了整個(gè)行業(yè)的發(fā)展和進(jìn)步。
轉(zhuǎn)自:西郵Linux興趣小組 下面是隨機(jī)產(chǎn)生1--10之間的不同值的一段程序: #include <stdio.h> #include <stdlib.h> #include <time.h> main() { int i, j, n; &nb ...… 查看全部問答∨ |
|
請(qǐng)教:我用EW4.10單步調(diào)試定時(shí)器A時(shí),用view-register觀察TAR中的值沒有變化,點(diǎn)擊GO運(yùn)行后也沒有變化,我知道用IAR進(jìn)行simulate模擬中斷時(shí)要用Forced Interrupt-trigger觸發(fā)中斷,和KEIL IDE 非常不一樣,而且即使中斷后中斷標(biāo)志位也沒有變化,不 ...… 查看全部問答∨ |
剛接觸PCI卡!現(xiàn)在同事已經(jīng)把PCI卡的驅(qū)動(dòng)基本做好了!現(xiàn)要求外界來的數(shù)據(jù)觸發(fā)個(gè)高或低電平,由所觸發(fā)的高低電平來提醒用戶外界數(shù)據(jù)進(jìn)來了!如何實(shí)現(xiàn)?具體是首先是如何觸發(fā)高低電平?如何通知用戶!謝謝!分?jǐn)?shù)不夠了!請(qǐng)大家勿閑分少!… 查看全部問答∨ |
wince5.0 hive 使用,出現(xiàn)問題??? 使用的s3c2440+wince5,想要在flash保存注冊(cè)信息,比如touch信息,新建的連接等等 當(dāng)sysgen后下載運(yùn)行,結(jié)果wince不能啟動(dòng)。當(dāng)去掉“hive_based_registry”又可以啟動(dòng) 請(qǐng)問這是何原因???如何解決??? 1.當(dāng)我在PB中添加了“hive_based_registry ...… 查看全部問答∨ |
為什么下不了啊!!http://focus.ti.com.cn/cn/docs/toolsw/folders/print/grace.html?DCMP=Grace&HQS=Other+EM+grace_em_sw… 查看全部問答∨ |
Keil軟件運(yùn)行出錯(cuò),WIN7 64位 旗艦版 本來幾個(gè)小時(shí)前運(yùn)行還好好的,現(xiàn)在打開就變成這個(gè)樣子了,哪位大哥能幫幫忙啊,重新卸載安裝也不行 … 查看全部問答∨ |
今天第一次在實(shí)驗(yàn)室見到FPGA芯片實(shí)物,Xilinx的,想請(qǐng)教各位一下,那個(gè)FPGA芯片正面有個(gè)金屬蓋,上面寫著品牌名、型號(hào)和一些其他參數(shù),和以往見到的芯片外觀不同。這個(gè)金屬蓋起什么作用,可以取下來嗎,取下來會(huì)有什么影響嗎… 查看全部問答∨ |
matlab2013a的 simulink里沒有Target Preferences 后來我從2011a的matlab里復(fù)制了個(gè)文件夾到2013里面, 但是在建模時(shí)打開雙擊這個(gè)模塊時(shí)彈出這個(gè)。我該怎么決解,求指導(dǎo)… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 英飛凌微控制器:以全新實(shí)惠套件和強(qiáng)大開發(fā)環(huán)境為開發(fā)者提供支持
- iTOP-i.MX6開發(fā)板設(shè)備數(shù)驅(qū)動(dòng)Menuconfig的用法
- 迅為IMX6ULL開發(fā)板Qt for Android搭建開發(fā)環(huán)境
- 迅為i.MX8M mini開發(fā)板Windots QT系統(tǒng)開發(fā)環(huán)境搭建
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)使用Gstarwmra(一)
- 迅為IMX8M mini開發(fā)板Linix系統(tǒng)修改默認(rèn)屏幕
- iTOP-4412開發(fā)板支持4G以上文件系統(tǒng)擴(kuò)展
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)設(shè)置開機(jī)自啟動(dòng)
- 迅為IMX6Q開發(fā)板 Buildroot文件系統(tǒng)mqtt測(cè)試
- 復(fù)旦大學(xué)在集成電路領(lǐng)域獲關(guān)鍵突破!每秒存取25億次,史上最快!
- 星閃強(qiáng)勢(shì)入局,會(huì)給UWB與藍(lán)牙定位帶來哪些沖擊?
- 又兩款旗艦新車搭載星閃車鑰匙!誰在引爆這波汽車連接革命?
- 榜單首發(fā)!域控SerDes處于市場爆發(fā)周期,哪些供應(yīng)商正在領(lǐng)跑市場
- 英特爾? 具身智能大小腦融合方案發(fā)布:構(gòu)建具身智能落地新范式
- 車載UWB雷達(dá)技術(shù):有哪些優(yōu)勢(shì)?
- 嵐圖開啟L3智駕:天元智能架構(gòu)技術(shù)解讀
- 德州儀器如何通過7000多種車規(guī)芯片,引領(lǐng)汽車產(chǎn)業(yè)的創(chuàng)新
- 2025年上海國際車展技術(shù)前瞻 – 智駕安全(環(huán)境感知)
- 史上最嚴(yán)動(dòng)力電池國標(biāo)解讀:爆燃零容忍,倒逼廠家不打嘴炮真研發(fā)
- 【EEWORLD第三十三屆】2011年12月社區(qū)明星人物揭曉!
- PI更懂快速充電需求 下載產(chǎn)品資料贏好禮!
- 有獎(jiǎng)報(bào)名 | 安富利邀您參與2022國際工業(yè)博覽會(huì)!(11月30日-12月4日,上海)
- 有獎(jiǎng)直播 | keysight 如何避免損害示波器
- 平頭哥RVB2601開源應(yīng)用方案征集來啊~100套板卡助陣,天貓精靈智能套裝禮品組等你抱走~
- 我與BeagleBone 有個(gè)約會(huì)!
- 有獎(jiǎng)直播:英飛凌針對(duì)電動(dòng)工具的高功率、高效率以及高可靠性解決方案
- TE戶外照明互連解決方案樣片來襲 免費(fèi)申領(lǐng)進(jìn)行中!
- MDK生成bin文件的方法及bin文件大小對(duì)程序的影響
- stm32F103大容量Flash的啟動(dòng)文件分析理解
- IDE接口驅(qū)動(dòng)程序移植
- SD卡驅(qū)動(dòng)程序移植
- 標(biāo)準(zhǔn)已立!基于場景的智能網(wǎng)聯(lián)汽車測(cè)試認(rèn)證體系建設(shè)
- 英特爾發(fā)布5G全互聯(lián)PC,計(jì)劃于2019年上市
- 英特爾領(lǐng)跑5G,發(fā)布網(wǎng)-端-云的新產(chǎn)品、新合作
- SparkFun 和 Cypress 的無線物聯(lián)網(wǎng)開發(fā)平臺(tái)可通過 Digi-Key 訂購
- 捷多邦科技2018春節(jié)后今日正式上班
- Qualcomm擴(kuò)展嵌入式計(jì)算產(chǎn)品組合將頂級(jí)處理器帶入物聯(lián)網(wǎng)應(yīng)用
- [QQ群]歡迎加入電子工程世界交流群 37061424
- 【問TI】求推薦一款內(nèi)置FLASH的DSP,處理能量相當(dāng)于120M主頻的TMS320VC5509a
- dsPIC33的OC要用到Timer2/Timer3,怎樣接外部晶振?
- 有想搞語音識(shí)別的沒?
- MPU6050控制51單片機(jī)觸發(fā)GSM
- 有沒有哪位知道關(guān)于介紹英國oregan公司產(chǎn)品的網(wǎng)站?謝謝
- 總線中斷和cpu中斷有什么區(qū)別嗎?
- position2Go測(cè)評(píng)1、初識(shí)
- Local 端訪問PCI9054內(nèi)部寄存器只能寫,不能讀
- 請(qǐng)教SIM300的串口問題