新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機音樂盒DIY—生日快樂歌程序

        單片機音樂盒DIY—生日快樂歌程序

        作者: 時間:2011-12-01 來源:網絡 收藏

          基于STC89C52單片機的七彩迷你音樂盒。在單片機最小系統的基礎上,對其他兩個I/O口連接硬件電路。P1.0接一個七彩快閃LED燈。P1.5口接一個NPN型三極管的放大電路,再連接一個無源蜂鳴器(用來播放樂曲)。

          這樣一個迷你音樂盒就完成了。硬件電路非常簡單,其中單片機任意一個I/O口都可以作為樂曲的輸出,信號經過NPN三極管放大驅動蜂鳴器發出電子樂曲。

          緊接著就是為單片機設計運行的程序了,這里我用匯編寫了一段《生日快樂》的程序。大家可以仿照,我的思路修改樂曲。

          DIY手記:用C52這么大塊頭的單片機,確實很浪費。因為一共有32個I/O引腳,設計音樂盒只用了其中的兩個,非常的浪費。大家可以用其他的單片機代替,例如16引腳的單片機。價格相對會便宜一點。

          單片機匯編源代碼分享:

          org 0000h

          ajmp main

          org 000bh

          jmp tim0

          org 0030h

          main: ;主程序

          setb p1.1

          clr p1.4

          setb p3.0

          mov tmod,#01h ;設定時方式

          mov ie,#82h ;開中斷

          start0:

          mov 30h,#00h ;

          next:mov a,30h

          mov dptr,#table

          movc a,@a+dptr ;查表取音調和節拍

          mov r2,a

          jz end0 ;為零,不進行處理.

          anl a,#0fh

          mov r5,a ;將節拍存入R5

          mov a,r2

          swap a

          anl a,#0fh

          jnz sing ;根據音調決定是否演奏.

          clr tr0

          jmp d1

          sing:dec a

          mov 22h,a ;將音調存入22H.

          rl a

          mov dptr,#table1

          movc a,@a+dptr ;根據音調決定定時器初值.

          mov th0,a ;放入TH0

          mov 21h,a

          mov a,22h

          rl a

          inc a

          movc a,@a+dptr

          mov tl0,a ;放入TL0

          mov 20h,a

          setb tr0 ;啟動定時

          d1: call delay

          inc 30h

          jmp next

          end0:clr tr0

          jmp start0

          tim0: ;定時器中斷服務程序

          push acc

          push psw

          mov tl0,20h ;重賦初值.

          mov th0,21h

          cpl p1.7

          pop psw

          pop acc

          retidelay:mov r7,#02h ;延時子程序

          d2: mov r4,#130

          d3: mov r3,#248

          djnz r3,$

          djnz r4,d3

          djnz r7,d2

          djnz r5,delay

          ret

          table1: ;決定音調的定時初值.

          dw 64260,64400,64524,64580

          dw 64684,64777,64820,64898

          dw 64968,65030,65058,65110

          dw 65157,65178,65217

          table: ;決定音調和節拍的表格,不同的歌曲只是此表不同

          ;1

          db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h

          ;2

          db 82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h

          ;3

          db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h

          ;4

          db 82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h,00

          end



        關鍵詞: 單片機音樂盒

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 宝丰县| 堆龙德庆县| 仲巴县| 临清市| 榆树市| 上饶市| 宁波市| 沁阳市| 富阳市| 德惠市| 彭阳县| 内江市| 长沙县| 清徐县| 吴堡县| 新郑市| 库尔勒市| 咸丰县| 酒泉市| 永安市| 渑池县| 蒲城县| 天祝| 吉林省| 龙岩市| 固始县| 嘉禾县| 武定县| 子长县| 和政县| 武功县| 丹巴县| 科技| 潼关县| 巴中市| 三台县| 永城市| 镶黄旗| 富蕴县| 安仁县| 保定市|