新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 單片機(jī)音樂盒DIY―生日快樂歌程序

        單片機(jī)音樂盒DIY―生日快樂歌程序

        作者: 時間:2011-12-23 來源:網(wǎng)絡(luò) 收藏

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

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

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

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

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

        單片機(jī)匯編源代碼分享:

          org 0000h

          ajmp main

          org 000bh

          jmp tim0

          org 0030h

          main: ;主

          setb p1.1

          clr p1.4

          setb p3.0

          mov tmod,#01h ;設(shè)定時方式

          mov ie,#82h ;開中斷

          start0:

          mov 30h,#00h ;

          next:mov a,30h

          mov dptr,#table

          movc a,@a+dptr ;查表取音調(diào)和節(jié)拍

          mov r2,a

          jz end0 ;為零,不進(jìn)行處理.

          anl a,#0fh

          mov r5,a ;將節(jié)拍存入R5

          mov a,r2

          swap a

          anl a,#0fh

          jnz sing ;根據(jù)音調(diào)決定是否演奏.

          clr tr0

          jmp d1

          sing:dec a

          mov 22h,a ;將音調(diào)存入22H.

          rl a

          mov dptr,#table1

          movc a,@a+dptr ;根據(jù)音調(diào)決定定時器初值.

          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: ;定時器中斷服務(wù)程序

          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: ;決定音調(diào)的定時初值.

          dw 64260,64400,64524,64580

          dw 64684,64777,64820,64898

          dw 64968,65030,65058,65110

          dw 65157,65178,65217

          table: ;決定音調(diào)和節(jié)拍的表格,不同的歌曲只是此表不同

          ;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機(jī)械鍵盤相關(guān)社區(qū):機(jī)械鍵盤DIY


        蜂鳴器相關(guān)文章:蜂鳴器原理


        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 台北县| 安阳县| 丰都县| 河南省| 黄浦区| 抚宁县| 鄂州市| 双城市| 隆回县| 双桥区| 遵化市| 山阳县| 抚顺市| 巴青县| 革吉县| 达州市| 同仁县| 田林县| 社旗县| 昌邑市| 赣榆县| 敖汉旗| 娱乐| 安图县| 天峻县| 柳州市| 交城县| 普兰县| 磴口县| 纳雍县| 西丰县| 雅安市| 成安县| 乌拉特前旗| 松阳县| 郯城县| 定陶县| 治县。| 皮山县| 永德县| 贺州市|