新聞中心

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

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

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

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

        本文引用地址:http://www.104case.com/article/172292.htm

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

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

        手記:用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

        DIY機械鍵盤相關社區:機械鍵盤DIY


        蜂鳴器相關文章:蜂鳴器原理


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 巩留县| 乌兰察布市| 乌兰浩特市| 北京市| 突泉县| 印江| 罗江县| 孟津县| 秦皇岛市| 常宁市| 灯塔市| 龙南县| 台中市| 呼和浩特市| 万源市| 措勤县| 苏尼特左旗| 宜丰县| 治县。| 资源县| 同德县| 乌苏市| 梁河县| 永昌县| 固安县| 昂仁县| 交口县| 阿坝| 赤水市| 岐山县| 龙里县| 内乡县| 阜宁县| 思南县| 宁波市| 崇阳县| 阿鲁科尔沁旗| 通江县| 博客| 安陆市| 剑川县|