久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 單片機音樂編程實驗 [打印本頁]

作者: admin    時間: 2010-6-26 02:10
標題: 單片機音樂編程實驗
 在很多兒童玩具或一些需要音樂提示(如報警儀、定時鬧鐘、電子寵物等)的場合,需要用到單片機音樂編程的功能。原理就是利用單片機的引腳發出某一定頻率的信號驅動外部發聲設備發出聲音,或者放出美妙的音樂。
  在這個例程中,音樂曲調的原始編碼已做好,只要按照曲譜給定參數即可實現播放不同的樂曲,使實驗生動有趣。參數兩個:前一個按照曲譜對照編碼表給定,第二個,為節拍數,8->1拍,4->半拍。
 

           Beep equ P2.2         ;板子上的蜂鳴器是接的P2.2
          musich equ 40h         ;音樂定時高位數據 
           musicl equ 41h         ;音樂定時低位數據
           musicstart equ 42h     ;音樂開始首地址
; ************************ 預定義結束 *******************

            org 00h                ;程序開始
            jmp main               ;跳轉到主程序

            org 1bh                ;定時器T1中斷入口地址
            jmp timer1             ;定時器服務程序 

            org 030h               ;主程序代碼開始 
       main:mov sp,#30h            ;設置堆棧
            lcall music            ;調用音樂程序
            jmp main               ;重新開始

   musdelay:mov r0,#20             ;短時間延時
          d:djnz r0,d              ;延時時間 20uS
            ret                    ;返回
; ************ 定時器 服務程序 *******************
     timer1:clr tr1                ;停止定時器工作
            mov th1,musich         ;重新設置定時初值 
            mov tl1,musicl         ;
            cpl beep               ;從蜂鳴器輸出聲音 
            setb tr1               ;開始定時工作 
            reti                   ;中斷返回
;**************************************************** 
;************ 音樂播放程序 ********************* 
      music:mov tmod,#10h          ;設置定時器T1工作方式1 
            setb ea                ;總的中斷
            setb et1               ;定時器T1中斷允許
            mov musicstart,#00h    ;音樂開始地址
            mov musich,#0ffh       ;音樂定時常數高位 
            mov musicl,#0ffh       ;音樂定時常數低位
      loopm:mov dptr,#mu_tab       ;得到音符表頭
            mov a,musicstart       ;開始查表 
            movc a,@a+dptr         ;獲得音樂數據
            jz musend              ;結束符 00H,返回 
            rl a ;A*2
            mov b,a                ;暫存地址
            mov dptr,#mustab       ;獲得音符表頭
            movc a,@a+dptr         ;根據音樂數據查得定時常數
            mov musich,a           ;保存定時常數高位 
            mov th1,a              ;設置定時器高位常數 
            mov a,b                ;開始找低位數據 
            inc a                  ;指向下一個數據
            mov dptr,#mustab       ;得到音符表頭
            movc a,@a+dptr         ;查得低位數據 
            mov musicl,a           ;保存數據
            mov tl1,a              ;設置定時低位常數 
            setb tr1               ;定時器T1開始工作 
            mov dptr,#mu_tab       ;得到音樂表 
            inc musicstart         ;指向下一個單元(音符節拍)
            mov a,musicstart       ;開始查找
            movc a,@a+dptr         ;找到數據
            lcall delay1           ;根據參數延時,發出持續音樂
            inc musicstart         ;指向下一個音 
            clr tr1                ;停止發聲
            lcall delay 
            jmp loopm              ;重復,直到遇到結束符號 00H.
     musend:clr tr1                ;樂曲播放完畢,關閉定時器 
            clr ea                 ;禁止中斷
            clr et1                ;關閉定時器T1中斷
            clr beep               ;禁止蜂鳴器 
            mov a,#20 
            lcall delay1
            ret                   
;********************* 
;************ 節拍發生器 ,產生音樂節拍 ********************************* 
     delay1:mov r0,#00h            ;節拍發生器,用來發生節拍
            mov r1,#00h            ;
            mov r2,a               ;這是節拍發生器的參數,當它為8
      dlay1:djnz r0,dlay1          ;表示1拍 
            mov r0,#00h 
            djnz r1,dlay1
            mov r0,#00h 
            mov r1,#00h
            djnz r2,dlay1
            ret 
;  ????????????????????
; ******** 延時 產生休止符 ***************** 

      delay:mov r0,#00h            ;延時 10ms
            mov r1,#100
       dlay:djnz r0,dlay 
            mov r0,#100 
            djnz r1,dlay 
            ret
; ************************
; ************************曲譜編碼,這是定義的曲譜表,對應如下 **************************************************
; 1 低音 DO 2 低音 RE 3 低音ME 4 低音 FA 5 低音 SO 6 低音LA 7 低音SI
mustab: db 'h','j', 0f8h,8bh, 0f9h,5bh, 0fah,14h, 0fah,0ch, 0fbh,03h, 0fbh,8fh, 0fch,0bh
; 8 中音 DO 9 中音 RE 0ah 中音ME 0bh 中音 FA 0ch 中音 SO 0dh 中音LA 0eh 中音SI
db 0fch,43h, 0fch,0abh, 0fdh,08h, 0fdh,33h, 0fdh,81h, 0fdh,0c7h, 0feh,05h 
; 0fh 高音 DO 10h 高音 RE 11h 高音ME 12h 高音 FA 13h 高音 SO 14h 高音LA 15h 高音SI 
db 0feh,21h, 0feh,55h, 0feh,84h, 0fdh,99h, 0feh,0c0h, 0feh,0e3h, 0ffh,02h

;以下為音樂樂譜代碼,前兩位表示曲譜,后一位表示節拍 
;8為 1 拍,4 ->半拍 

mu_tab: db 6,4,8,4,10,4,1,4, 9,8,8,4,7,4,10,8,9,8,6,16
        db 8,4,10,4,12,4,12,4, 13,8,12,4,11,4,10,16
        db 00h
        end 
[此貼子已經被作者于2010-6-26 2:14:01編輯過]

作者: brantyou    時間: 2010-6-26 13:09

好東西,都要支持一下。。。。


作者: kxm2008    時間: 2013-7-21 09:42
支持一下
作者: 我思故我在    時間: 2014-9-15 15:11
謝謝胡老師分享,,

作者: DDK    時間: 2015-5-30 11:56
老師曲譜怎么編碼啊?下面節拍意思是6和4為曲譜,8為節拍是嗎?還有老師,f8h 、8bh代表什么意思啊?
作者: 祝云章    時間: 2019-1-29 09:11
謝謝分享!
作者: crwyp    時間: 2019-3-29 08:46
雖然目前沒看懂,但是感覺很好
作者: bbc699    時間: 2019-4-20 06:45
能詳細解釋就更好了




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产一区二区精品自拍 | 国产日韩欧美精品一区二区 | 黄色大片免费网站 | 免费日本视频 | 天堂在线中文字幕 | 国产资源在线播放 | 草草视频在线免费观看 | 亚洲欧美精品国产一级在线 | 久久久久亚洲 | 一区二区三区亚洲 | 国产高清视频一区 | 婷婷国产一区二区三区 | 国产在线一区观看 | 国产精品国产成人国产三级 | 欧美日韩中文国产一区发布 | 91精品国产一区二区三区 | 欧州一区二区三区 | av黄色免费在线观看 | 日本在线免费观看 | 91免费视频观看 | 欧美日韩精品中文字幕 | 亚洲精品一区二区三区蜜桃久 | 午夜精品久久久久久久久久久久 | 亚洲精品国产偷自在线观看 | 日韩在线免费观看视频 | 日韩精品一区二区三区在线观看 | 成人教育av | 欧美在线一区二区三区 | 日韩精品在线一区 | 精久久| 国产成人精品久久二区二区 | 亚洲一区二区精品视频 | 国产激情自拍视频 | 欧美成人自拍视频 | 五月激情综合 | 久久久99精品免费观看 | 国内精品久久久久久 | 亚洲精品一区二区三区蜜桃久 | 亚洲欧美国产毛片在线 | 亚洲综合在线一区二区 | 国产玖玖|