在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用單片機實現音樂程序設計的詳細資料說明

Wildesbeast ? 來源:單片機教程網 ? 作者:單片機教程網 ? 2020-04-06 12:37 ? 次閱讀

利用單片機(或單板機)奏樂大概是無線電愛好者感興趣的問題之一。本文從單片機的基本發間實驗出發,談談音樂程序的設計原理,并給出具體實例,以供參考。

單片機的基本發音實驗

我們知道,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制單處機某個口線的“高”電平或低電平,則在該口線上就能產生一定頻率的矩形波,接上喇叭就能發出一定頻率的聲音,若再利用延時程序控制“高”“低”電平的持續時間,就能改變輸出頻率,從而改變音調。

例如,要產生200HZ的音頻信號,按圖1接入喇叭(若屬臨時實驗,也可將喇叭直接接在P1口線上),實驗程序為:

其中子程序DEL為延時子程序,當R3為1時,延時時間約為20us,R3中存放延時常數,對200HZ音頻,其周期為1/200秒,即5ms。這樣,當P1.4的高電平或低電平的持續時間為2.5ms,即R3的時間常數取2500/20=125(7DH)時,就能發出200HZ的音調。將上述程序鍵入學習機,并持續修改R3的常數能感到音調的變化。樂曲中,每一音符對應著確定的頻率,表1給出C調時各音符頻率及其對應的時間常數。讀者能根據表1所供給的常數,將其16進制代碼送入R3,反復練習體會。根據表1能奏出音符。僅這還不夠,要準確奏出一首曲子,必須準確地控制樂曲節奏,即一音符的持續時間。

音符的節拍我們能用定時器T0來控制,送入不一樣的初值,就能產生不一樣的定時時間。便如某歌曲的節奏為每分鐘94拍,即一拍為0.64秒。其它節拍與時間的對應關系見表2。

但時,由于T0的最大定時時間只能為131毫秒,因此不可能直接用改變T0的時間初值來實現不一樣節拍。我們能用T0來產生10毫秒的時間基準,然后設置一個中斷計數器,通過判別中斷計數器的值來控制節拍時間的長短。表2中也給出了各種節拍所對應的時間常數。例如對1/4拍音符,定時時間為0.16秒,對應的時間常數為16(即10H);對3拍音符,定時時間為1.92秒,對應時間長數為192(即C0H)。

我們將每一音符的時間常數和其對應的節拍常數作為一組,按次序將樂曲中的所有常數排列成一個表,然后由查表程序依次取出,產生音符并控制節奏,就能實現演奏效果。此外,結束符和體止符能分別用代碼00H和FFH來表示,若查表結果為00H,則表示曲子終了;若查表結果為FFH,則產生對應的停頓效果。為了產生手彈的節奏感,在某些音符(例如兩個相同音符)音插入一個時間單位的頻率略有不一樣的音符。

下面給出程序序清單,可直接在TD-III型學習機上演奏,對其它不一樣型號的學習機,只需對應地改變一下地址即可。本程序演奏的是民歌“八月桂花遍地開”,C調,節奏為94拍/分。讀者也能自行找出一首歌,按表1和表2給定的常數,將樂曲翻譯成碼表輸入機器,而程序不變。本實驗辦法簡便,即使不懂音樂的人,將一首陌生的曲子翻譯成代碼也是易事,和著機器的演奏學唱一首歌曲,其趣味無窮。

程序清單(略,請參看源程序的說明)。

程序框圖如圖2所示。

硬件連接說明:

隨便找一個仿真機或者什么單片機實驗板,只要能工作的就行,將程序輸入,運行,然后找個音箱(你計算機旁邊應當就有一對吧)撥出插頭,插頭的前端接在P1。0上,后面部分找根線接單片機的地,就應當有聲了,然后怎么改進硬件連接就是你的事了。。。。

音樂程序匯編代碼代碼1 -------------Voice.asm--------------------------

ORG 0000H

LJMP START

ORG 000BH

INC 20H ;中斷服務,中斷計數器加1

MOV TH0,#0D8H

MOV TL0,#0EFH ;12M晶振,形成10毫秒中斷

RETI

START:

MOV SP,#50H

MOV TH0,#0D8H

MOV TL0,#0EFH

MOV TMOD,#01H

MOV IE,#82H

MUSIC0:

NOP

MOV DPTR,#DAT ;表頭地址送DPTR

MOV 20H,#00H ;中斷計數器清0

MOV B,#00H ;表序號清0

MUSIC1:

NOP

CLR A

MOVC A,@A+DPTR ;查表取代碼

JZ END0 ;是00H,則結束

CJNE A,#0FFH,MUSIC5

LJMP MUSIC3

MUSIC5:

NOP

MOV R6,A

INC DPTR

MOV A,B

MOVC A,@A+DPTR ;取節拍代碼送R7

MOV R7,A

SETB TR0 ;啟動計數

MUSIC2:

NOP

CPL P1.0

MOV A,R6

MOV R3,A

LCALL DEL

MOV A,R7

CJNE A,20H,MUSIC2 ;中斷計數器(20H)=R7否?

;不等,則繼續循環

MOV 20H,#00H ;等于,則取下一代碼

INC DPTR

; INC B

LJMP MUSIC1

MUSIC3:

NOP

CLR TR0 ;休止100毫秒

MOV R2,#0DH

MUSIC4:

NOP

MOV R3,#0FFH

LCALL DEL

DJNZ R2,MUSIC4

INC DPTR

LJMP MUSIC1

END0:

NOP

MOV R2,#64H ;歌曲結束,延時1秒后繼續

MUSIC6:

MOV R3,#00H

LCALL DEL

DJNZ R2,MUSIC6

LJMP MUSIC0

DEL:

NOP

DEL3:

MOV R4,#02H

DEL4:

NOP

DJNZ R4,DEL4

NOP

DJNZ R3,DEL3

RET

NOP

DAT:

db 26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20h

db 30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20h

db 20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20h

db 30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20h

db 30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10h

db 2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20h

db 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h

db 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20h

db 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h

db 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h

db 18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h

db 30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20h

db 39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10h

db 20h,10h,2bh,10h,26h,30h,30h,80h,00H

END

音樂程序匯編代碼代碼2 -------------Voice1.asm--------------------------

;標題 ‘八月桂花香’發聲程序

;摘要 詳見‘無線電’92年3期

;作者 周振安

ORG 0000H

LJMP START

ORG 000BH

INC 20H ;中斷服務,中斷計數器加1

MOV TH0,#0D8H

MOV TL0,#0EFH ;12M晶振,形成10毫秒中斷

RETI

START:

MOV SP,#50H

MOV TH0,#0D8H

MOV TL0,#0EFH

MOV TMOD,#01H

MOV IE,#82H

MUSIC0:

NOP

MOV DPTR,#DAT ;表頭地址送DPTR

MOV 20H,#00H ;中斷計數器清0

MOV B,#00H ;表序號清0

MUSIC1:

NOP

CLR A

MOVC A,@A+DPTR ;查表取代碼

JZ END0 ;是00H,則結束

CJNE A,#0FFH,MUSIC5

LJMP MUSIC3

MUSIC5:

NOP

MOV R6,A

INC DPTR

MOV A,B

MOVC A,@A+DPTR ;取節拍代碼送R7

MOV R7,A

SETB TR0 ;啟動計數

MUSIC2:

NOP

CPL P1.0

MOV A,R6

MOV R3,A

LCALL DEL

MOV A,R7

CJNE A,20H,MUSIC2 ;中斷計數器(20H)=R7否?

;不等,則繼續循環

MOV 20H,#00H ;等于,則取下一代碼

INC DPTR

; INC B

LJMP MUSIC1

MUSIC3:

NOP

CLR TR0 ;休止100毫秒

MOV R2,#0DH

MUSIC4:

NOP

MOV R3,#0FFH

LCALL DEL

DJNZ R2,MUSIC4

INC DPTR

LJMP MUSIC1

END0:

NOP

MOV R2,#64H ;歌曲結束,延時1秒后繼續

MUSIC6:

MOV R3,#00H

LCALL DEL

DJNZ R2,MUSIC6

LJMP MUSIC0

DEL:

NOP

DEL3:

MOV R4,#02H

DEL4:

NOP

DJNZ R4,DEL4

NOP

DJNZ R3,DEL3

RET

NOP

DAT:

DB 18H, 30H, 1CH, 10H

DB 20H, 40H, 1CH, 10H

DB 18H, 10H, 20H, 10H

DB 1CH, 10H, 18H, 40H

DB 1CH, 20H, 20H, 20H

DB 1CH, 20H, 18H, 20H

DB 20H, 80H, 0FFH, 20H

DB 30H, 1CH, 10H , 18H

DB 20H, 15H, 20H , 1CH

DB 20H, 20H, 20H , 26H

DB 40H, 20H , 20H , 2BH

DB 20H, 26H, 20H , 20H

DB 20H, 30H , 80H , 0FFH

DB 20H, 20H, 1CH , 10H

DB 18H, 10H, 20H , 20H

DB 26H, 20H , 2BH , 20H

DB 30H, 20H , 2BH , 40H

DB 20H, 20H , 1CH , 10H

DB 18H, 10H, 20H, 20H

DB 26H, 20H , 2BH, 20H

DB 30H, 20H, 2BH , 40H

DB 20H, 30H, 1CH , 10H

DB 18H, 20H , 15H , 20H

DB 1CH, 20H , 20H , 20H

DB 26H, 40H, 20H , 20H

DB 2BH, 20H, 26H , 20H

DB 20H, 20H, 30H , 80H

DB 20H, 30H, 1CH , 10H

DB 20H, 10H, 1CH , 10H

DB 20H, 20H, 26H , 20H

DB 2BH, 20H, 30H , 20H

DB 2BH, 40H, 20H , 15H

DB 1FH, 05H, 20H , 10H

DB 1CH, 10H, 20H , 20H

DB 26H, 20H, 2BH , 20H

DB 30H, 20H, 2BH , 40H

DB 20H, 30H, 1CH , 10H

DB 18H, 20H , 15H , 20H

DB 1CH, 20H , 20H , 20H

DB 26H, 40H, 20H , 20H

DB 2BH, 20H, 26H , 20H

DB 20H, 20H, 30H, 30H

DB 20H, 30H, 1CH, 10H

DB 18H, 40H, 1CH, 20H

DB 20H, 20H, 26H, 40H

DB 13H, 60H, 18H , 20H

DB 15H, 40H, 13H , 40H

DB 18H, 80H, 00H

end

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6044

    文章

    44632

    瀏覽量

    639196
  • 程序
    +關注

    關注

    117

    文章

    3798

    瀏覽量

    81482
收藏 人收藏

    評論

    相關推薦

    昂寶單片機相關資料

    昂寶單片機相關資料
    發表于 11-25 14:50 ?0次下載

    基于51單片機的手動數字時鐘

    眾多嵌入式控制應用系統提供靈活、高效的解決方案。本設計所使用的芯片可兼容以下所有的51系列單片機(包括AT系列和STC系列)。資料內容仿真實現(protues8.7) 本設計利
    的頭像 發表于 10-22 14:12 ?306次閱讀
    基于51<b class='flag-5'>單片機</b>的手動數字時鐘

    基于51單片機的遙控開關仿真(雙機通信)

    靈活、高效的解決方案。本設計所使用的芯片可兼容以下所有的51系列單片機(包括AT系列和STC系列)。資料內容仿真實現(protues8.7)本設計利用protues8.7軟件實現仿真設
    的頭像 發表于 10-22 14:12 ?400次閱讀
    基于51<b class='flag-5'>單片機</b>的遙控開關仿真(雙機通信)

    基于51單片機的遙控音樂系統仿真

    ”,表示播放,按下接收器的停止按鍵后停止播放音樂;(4)按下復位按鍵后回到初始狀態。仿真演示視頻:基于51單片機的遙控音樂系統仿真-仿真視頻設計介紹51單片機簡介51
    的頭像 發表于 10-22 14:12 ?230次閱讀
    基于51<b class='flag-5'>單片機</b>的遙控<b class='flag-5'>音樂</b>系統仿真

    基于51單片機的LED彩燈控制器設計

    的解決方案。本設計所使用的芯片可兼容以下所有的51系列單片機(包括AT系列和STC系列)。資料內容仿真實現(protues8.7)本設計利用protues8.7軟件實現仿真設計,具體如
    的頭像 發表于 10-22 14:10 ?271次閱讀
    基于51<b class='flag-5'>單片機</b>的LED彩燈控制器設計

    基于51單片機的遠程防盜報警系統

    AT系列和STC系列)。資料內容仿真實現(protues8.7)本設計利用protues8.7軟件實現仿真設計,具體如圖。程序(Keil5)本設計利用KEIL5軟件
    的頭像 發表于 10-22 14:10 ?280次閱讀
    基于51<b class='flag-5'>單片機</b>的遠程防盜報警系統

    單片機怎么寫入程序

    程序通常涉及以下幾個步驟: 選擇單片機和開發環境 : 確定項目需求,選擇合適的單片機型號。 安裝相應的開發環境,如Keil、IAR、MPLAB等。 硬件連接 : 將單片機連接到開發板或
    的頭像 發表于 10-21 11:21 ?999次閱讀

    單片機的中斷機制

    單片機的中斷機制是一種重要的處理方式,它允許單片機在執行主程序的過程中,能夠暫停當前任務,轉而處理外部或內部緊急事件。這種機制極大地提高了系統的響應速度和處理能力,使得單片機在各種應用
    的頭像 發表于 10-17 18:03 ?1045次閱讀

    keil可以讀出單片機程序

    Keil是一款廣泛應用于單片機程序開發的軟件,它提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調試器等在內的完整開發方案。然而,關于Keil是否能直接“讀出”單片機程序
    的頭像 發表于 09-02 10:32 ?1300次閱讀

    單片機燒錄程序用什么軟件

    單片機燒錄程序單片機開發過程中的一個重要環節,涉及到將編寫好的程序代碼通過燒錄器寫入單片機的ROM中,以
    的頭像 發表于 09-02 10:05 ?1732次閱讀

    單片機燒錄程序可以重新燒嗎

    單片機(Microcontroller Unit, MCU)是一種集成電路芯片,它將計算機的CPU、存儲器、輸入/輸出接口等集成在一塊芯片上,用于控制各種電子設備。單片機燒錄程序是指將編寫
    的頭像 發表于 09-02 10:04 ?1613次閱讀

    單片機燒錄程序的線比單片機上的少還能燒錄嗎

    單片機燒錄原理 單片機燒錄是指將編寫好的程序代碼通過一定的方式傳輸到單片機的存儲器中,使其能夠按照程序的指令運行。這個過程通常需要使用燒錄器
    的頭像 發表于 09-02 09:54 ?629次閱讀

    單片機燒錄程序的基本步驟是什么

    單片機燒錄程序單片機開發過程中非常重要的一步,它涉及到將編寫好的程序代碼通過一定的方式傳輸到單片機內部的存儲器中,使
    的頭像 發表于 09-02 09:47 ?1535次閱讀

    藍牙模塊如何實現單片機和手機端數據互傳

    藍牙模塊實現單片機和手機端數據互傳的過程可以分為以下幾個步驟: 硬件準備 : 確保你有一個支持藍牙通信的單片機開發板,如Arduino、Raspberry Pi等。 準備一個兼容的藍牙模塊,如
    的頭像 發表于 07-24 17:59 ?2978次閱讀
    藍牙模塊如何<b class='flag-5'>實現</b><b class='flag-5'>單片機</b>和手機端數據互傳

    基于51單片機矩陣鍵盤音樂電子琴電路圖proteus仿真及程序

    本資源內容概要:? ? ? ?這是基于51單片機矩陣鍵盤音樂電子琴電路圖proteus仿真及程序設計包含了電路圖源文件(Altiumdesigner軟件打開)、C語言程序源代碼(kei
    發表于 06-21 14:32 ?4次下載
    主站蜘蛛池模板: 免费国产黄网站在线观看视频 | 美女网站在线观看视频18 | 日本xxx69hd| 日本吻胸抓胸激烈视频网站 | 亚洲一区在线观看视频 | 在线免费日韩 | 三级精品在线观看 | 五月婷婷 六月丁香 | 国产yw.8825.c免费 | 末发育女一区二区三区 | 四虎院影永久在线观看 | 深爱激情五月婷婷 | 性色在线视频精品 | 乱妇伦小说 | 91久久另类重口变态 | 天天操天天操 | 国产成人精品视频一区二区不卡 | 欧美资源在线 | 亚洲成人黄色网址 | 97人洗澡人人澡人人爽 | 黄色三级录像 | 国产69精品久久久久9牛牛 | 天堂中文资源网 | 狠狠色丁香婷婷综合最新地址 | 免费网站黄成人影院 | 亚洲欧美在线精品一区二区 | 日日天天夜夜 | 亚洲成人观看 | 免费观看在线观看 | 天天躁夜夜躁狠狠躁2018a | 天天干伊人| 怡红院国产 | 久久午夜精品 | 久久综合九色综合欧洲色 | 让她爽的喷水叫爽乱 | 久久久久青草 | 色香视频首页 | 欧美日韩一区二区不卡 | 四虎影院国产 | 97天天做天天爱夜夜爽 | 日日噜噜夜夜狠狠tv视频免费 |