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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2348|回復: 2
收起左側

音樂盒設計 驅動蜂鳴器

[復制鏈接]
ID:261703 發表于 2017-12-14 20:02 | 顯示全部樓層
  1. 件3:音樂程序
  2.         shuzhi EQU 3fh           ;選曲目的地址
  3.         song EQU p1.2        ;揚聲器播放
  4.         play EQU p3.0               ;播放停止鍵
  5.         addone EQU p3.1           ;曲目加一鍵
  6.         subone EQU p3.2           ;曲目減一鍵
  7.         dul EQU P1           ;段選
  8.         wel EQU P2           ;位選
  9.         ORG 0000H
  10.         LJMP START
  11.         ORG 000BH                    ;定時器0溢出中斷入口地址
  12.         AJMP cont
  13.         ORG 0013H                    ;外部中斷一入口地址
  14.         AJMP pause                    ;指向外部中斷程序
  15.     ORG 0100H
  16. START:
  17.     MOV SP,#50H
  18.         MOV TH0,#0DBH             ;定時器賦初值
  19.         MOV TL0,#0FFH
  20.         MOV TMOD,#01H       ;設定T1工作于方式2
  21.         MOV IE,#86H                    ;開中斷
  22.         MOV TCON,#00H
  23.         MOV R0,#00H
  24.         MOV shuzhi,#00H
  25. (是否順序播放音樂)
  26. MAIN:                    
  27.     JNB play,first           ;判斷P3.0鍵是否按下
  28.         SJMP MAIN

  29. first:
  30.     ACALL del20
  31.         JNB play,first         
  32.         MOV shuzhi,#00H
  33.         MOV dul,#06H           ;共陰數碼管顯示1
  34.         MOV wel,#80H
  35.         MOV DPTR,#dat1         ;dat1首地址賦給DPTR
  36.     ACALL music0
  37.         ACALL next
  38.         RET
  39. next:
  40.     INC shuzhi
  41.         MOV A,shuzhi
  42.         CJNE A,#01,LOOP3                    ;A是否=1,不等就跳轉到LOOP3
  43.     MOV DPTR,#dat2                                 ;表2首地址送DPTR
  44.         MOV dul,#5BH                                 ;顯示數值2
  45.         MOV wel,#80H
  46.         ACALL music0
  47.         INC A
  48. LOOP3:
  49.     CJNE A,#02,LOOP4                   ;A是否=2,不等就跳轉到LOOP4
  50.         MOV DPTR,#dat3                            ;表3首地址送DPTR
  51.         MOV dul,#4FH                            ;顯示數值3
  52.         MOV wel,#80H
  53.         ACALL music0
  54.         INC A
  55. LOOP4:
  56.     CJNE A,#03,next
  57.         ACALL first
  58.         RET
  59. (按鍵播放上一首音樂)
  60. last:
  61.     DEC shuzhi
  62.         MOV        a,shuzhi
  63.         CJNE        a,#02,last1
  64.         MOV        dptr,#dat3
  65.         MOV        dul,#4Fh
  66.         MOV        wel,#80h
  67.         ACALL        music0
  68. last1:        cjne        a,#01,last2
  69.         MOV        dptr,#dat2
  70.         MOV        dul,#5Bh
  71.         MOV        wel,#80h
  72.         ACALL        music0
  73. last2:        cjne        a,#00,last
  74.         MOV        dptr,#dat1
  75.         MOV        dul,#06h
  76.         MOV        wel,#80h
  77.         ACALL        music0
  78.         RET       

  79. music0:               
  80.         MOV        20h,#00h              ;中斷計數單元清0
  81. music1:        clr        a               
  82.         MOVC        a,@a+dptr          ;查表取音階常數
  83.         JZ        end0                       ;累加器判0看是否是結束符
  84.         CJNE        a,#0ffh,music5        ;是休止符?
  85.         LJMP        music3                     ;產生100ms停頓
  86. music5:
  87.         NOP

  88. key:       
  89.     JNB        play,k0                         ;判斷P3.0鍵是否按下
  90.         JNB        addone,k1                 ;判斷P3.2鍵是否按下
  91.         JNB        subone,k2                 ;判斷P3.1鍵是否按下
  92.         MOV        r6,a                         ;音階常數送R6
  93.         INC        dptr                            ;DPTR+1   
  94.         MOV        a,#0
  95.         MOVC        a,@a+dptr              ;取常數送R7
  96.         MOV        r7,a               
  97.         SETB        tr0                           ;啟動定時器T0

  98. music2:        nop
  99.         CJNE        r0,#0,$               
  100.         CPL        song                                  ;輸出電平取反
  101.         MOV        a, r6
  102.         MOV        r3,a                                  ;音階常數送R3
  103.         LCALL        del20
  104.         MOV        a, r7                                       ;節拍常數送A
  105.         CJNE        a,20h,music2              ;節拍時間到否  
  106.         MOV        20h,#00h                             ;為取下一音階作準備
  107.         INC        DPTR               
  108.         LJMP        music1

  109. music3:       
  110.     NOP                                           ;休止100ms
  111.         CLR        tr0                              ;關閉定時器
  112.         MOV        r2, #14h        

  113. music4:        NOP
  114.         MOV        r3, #250                  ;R3=250
  115.         LCALL        del20
  116.         DJNZ        r2, music4
  117.         INC        dptr                          ;為取下一音階作準備  
  118.         LJMP        music1
  119. end0:        MOV        r2, #200               ;歌曲結束后,延時1s后繼續

  120. music6:        MOV        r3, #250
  121.         LCALL        del20
  122.         DJNZ        r2,music6
  123. (按鍵選擇)
  124. k1:        ACALL        del20                       ;調用延時子程序
  125.         JNB        addone,k1                  ;判斷P3.2鍵是否釋放
  126.         ACALL        next
  127. k2:        ACALL        del20
  128.         JNB        subone,k2                  ;判斷P3.1鍵是否釋放
  129.         ACALL        last
  130. k0:        ACALL        del20
  131.         JNB        play,k0             ;判斷3.0鍵是否釋放
  132.         LJMP        start
  133.         RET
  134. del20:        MOV        r4,#05h           ;延時子程序
  135. del4:        NOP
  136.         DJNZ        r4,del4
  137.         DJNZ        r3,del20
  138.         RET
  139. cont:        INC        20h                               ;計數單元+1
  140.         MOV        th0,#0dbh               ;重新10ms定時初值
  141.         MOV        tl0,#0ffh
  142.         RETI                             ;跳出中斷      
  143. (停止播放)
  144. pause:        ACALL        del20
  145.         JNB        p3.0,pause                 ;判斷P3.0鍵是否有釋放
  146.         MOV        a,r0                         ;把R0的值給A
  147.         CPL        a                          ;A值取反   
  148.         MOV        r0,a
  149.         RETI
  150. dat1:
  151. db 3bh,20h,3bh,20h,30h,20h,33h,20h,3bh,80h,0ffh
  152. db 3bh,20h,3bh,20h,26h,20h,2bh,20h,26h,80h,0ffh
  153. db 26h,20h,26h,20h,20h,20h,26h,20h,2bh,20h,2bh,20h,30h,20h,33h,10h,33h,10h
  154. db 3bh,60h,40h,20h,4ch,80h,0ffh
  155. db 3bh,20h,3bh,20h,30h,20h,33h,20h,3bh,80h,0ffh
  156. db 3bh,20h,3bh,20h,26h,20h,2bh,20h,26h,80h,0ffh
  157. db 26h,20h,26h,20h,20h,20h,26h,20h,2bh,20h,2bh,20h,2bh,20h,30h,20h
  158. db 33h,20h,3bh,20h,3bh,20h,40h,2bh,3bh,80h,0ffh
  159. db 19h,20h,1ch,40h,26h,20h,19h,20h,1ch,40h,26h,20h,0ffh
  160. db 20h,20h,1ch,20h,1ch,20h,20h,20h,26h,80h,0ffh
  161. db 19h,20h,1ch,40h,26h,20h,19h,20h,1ch,40h,26h,20h,0ffh
  162. db 20h,20h,1ch,20h,1ch,20h,20h,20h,26h,80h,0ffh
  163. db 2bh,20h,2bh,40h,3bh,20h,2bh,20h,2bh,40h,2bh,20h,0ffh
  164. db 26h,20h,2bh,20h,2bh,20h,30h,20h,2bh,80h,0ffh
  165. db 2bh,20h,2bh,40h,3bh,20h,30h,20h,30h,40h,2bh,20h,0ffh
  166. db 33h,20h,3bh,20h,3bh,20h,40h,20h,3bh,80h,0ffh,0ffh
  167. dat2:
  168. db 18h,30h,1ch,10h,20h,40h,1ch,10h
  169. db 18h,10h,20h,10h,1ch,10h,18h,40h
  170. db 1ch,20h,20h,20h,1ch,20h,18h,20h
  171. db 20h,80h,0ffh,20h,30h,1ch,10h,18h
  172. db 20h,15h,20h,1ch,20h,20h,20h,26h
  173. db 40h,20h,20h,2bh,20h,26h,20h,20h
  174. db 20h,30h,80h,0ffh,20h,20h,1ch,10h
  175. db 18h,10h,20h,20h,26h,20h,2bh,20h
  176. db 30h,20h,2bh,40h,20h,20h,1ch,10h
  177. db 18h,10h,20h,20h,26h,20h,2bh,20h
  178. db 30h,20h,2bh,40h,20h,30h,1ch,10h
  179. db 18h,20h,15h,20h,1ch,20h,20h,20h
  180. db 26h,40h,20h,20h,2bh,20h,26h,20h
  181. db 20h,20h,30h,80h,20h,30h,1ch,10h
  182. db 20h,10h,1ch,10h,20h,20h,26h,20h
  183. db 2bh,20h,30h,20h,2bh,40h,20h,15h
  184. db 1fh,05h,20h,10h,1ch,10h,20h,20h
  185. db 26h,20h,2bh,20h,30h,20h,2bh,40h       
  186. db 20h,30h,1ch,10h,18h,20h,15h,20h
  187. db 1ch,20h,20h,20h,26h,40h,20h,20h
  188. db 2bh,20h,26h,20h,20h,20h,30h,30h
  189. db 20h,30h,1ch,10h,18h,40h,1ch,20h
  190. db 20h,20h,26h,40h,13h,60h,18h,20h
  191. db 15h,40h,13h,40h,18h,80h,00h
  192. dat3:
  193. db 26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20h       
  194. db 30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20h       
  195. db 20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20h       
  196. db 30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20h       
  197. db 30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10h       
  198. db 2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20h
  199. db 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h
  200. db 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20h
  201. db 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h
  202. db 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h
  203. db 18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h
  204. db 30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20h
  205. db 39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10h
  206. db 20h,10h,2bh,10h,26h,30h,30h,80h,00h
  207. END
復制代碼
回復

使用道具 舉報

ID:261728 發表于 2017-12-14 20:30 | 顯示全部樓層
/************************************************************************  
[文件名]  C51音樂程序(八月桂花)  
[功能]    通過單片機演奏音樂  
  
/**********************************************************************/   
#include <REG52.H>   
#include <INTRINS.H>   
//本例采用89C52, 晶振為12MHZ   
//關于如何編制音樂代碼, 其實十分簡單,各位可以看以下代碼.   
//頻率常數即音樂術語中的音調,而節拍常數即音樂術語中的多少拍;   
//所以拿出譜子, 試探編吧!   

sbit Beep =  P2^1 ;
   
unsigned char n=0;  //n為節拍常數變量   
unsigned char code music_tab[] ={   
0x18, 0x30, 0x1C , 0x10, //格式為: 頻率常數, 節拍常數, 頻率常數, 節拍常數,   
0x20, 0x40, 0x1C , 0x10,   
0x18, 0x10, 0x20 , 0x10,   
0x1C, 0x10, 0x18 , 0x40,   
0x1C, 0x20, 0x20 , 0x20,   
0x1C, 0x20, 0x18 , 0x20,   
0x20, 0x80, 0xFF , 0x20,   
0x30, 0x1C, 0x10 , 0x18,   
0x20, 0x15, 0x20 , 0x1C,   
0x20, 0x20, 0x20 , 0x26,   
0x40, 0x20, 0x20 , 0x2B,   
0x20, 0x26, 0x20 , 0x20,   
0x20, 0x30, 0x80 , 0xFF,   
0x20, 0x20, 0x1C , 0x10,   
0x18, 0x10, 0x20 , 0x20,   
0x26, 0x20, 0x2B , 0x20,   
0x30, 0x20, 0x2B , 0x40,   
0x20, 0x20, 0x1C , 0x10,   
0x18, 0x10, 0x20 , 0x20,   
0x26, 0x20, 0x2B , 0x20,   
0x30, 0x20, 0x2B , 0x40,   
0x20, 0x30, 0x1C , 0x10,   
0x18, 0x20, 0x15 , 0x20,   
0x1C, 0x20, 0x20 , 0x20,   
0x26, 0x40, 0x20 , 0x20,   
0x2B, 0x20, 0x26 , 0x20,   
0x20, 0x20, 0x30 , 0x80,   
0x20, 0x30, 0x1C , 0x10,   
0x20, 0x10, 0x1C , 0x10,   
0x20, 0x20, 0x26 , 0x20,   
0x2B, 0x20, 0x30 , 0x20,   
0x2B, 0x40, 0x20 , 0x15,   
0x1F, 0x05, 0x20 , 0x10,   
0x1C, 0x10, 0x20 , 0x20,   
0x26, 0x20, 0x2B , 0x20,   
0x30, 0x20, 0x2B , 0x40,   
0x20, 0x30, 0x1C , 0x10,   
0x18, 0x20, 0x15 , 0x20,   
0x1C, 0x20, 0x20 , 0x20,   
0x26, 0x40, 0x20 , 0x20,   
0x2B, 0x20, 0x26 , 0x20,   
0x20, 0x20, 0x30 , 0x30,   
0x20, 0x30, 0x1C , 0x10,   
0x18, 0x40, 0x1C , 0x20,   
0x20, 0x20, 0x26 , 0x40,   
0x13, 0x60, 0x18 , 0x20,   
0x15, 0x40, 0x13 , 0x40,   
0x18, 0x80, 0x00   
};   
   
void int0()  interrupt 1   //采用中斷0 控制節拍   
{  TH0=0xd8;   
   TL0=0xef;   
   n--;   
}   
   
void delay (unsigned char m)   //控制頻率延時   
{   
unsigned i=3*m;   
while(--i);   
}   
   
void delayms(unsigned char a)  //豪秒延時子程序   
{   
  while(--a);                  //采用while(--a) 不要采用while(a--); 各位可編譯一下看看匯編結果就知道了!   
}   
   
void main()   
{ unsigned char p,m;   //m為頻率常數變量   
  unsigned char i=0;   
  TMOD&=0x0f;   
  TMOD|=0x01;   
  TH0=0xd8;TL0=0xef;   
  IE=0x82;   
play:   
   while(1)   
    {   
    a: p=music_tab[i];   
       if(p==0x00)       { i=0, delayms(1000); goto play;}     //如果碰到結束符,延時1秒,回到開始再來一遍   
       else if(p==0xff)  { i=i+1;delayms(100),TR0=0; goto a;}  //若碰到休止符,延時100ms,繼續取下一音符   
            else         {m=music_tab[i++], n=music_tab[i++];}  //取頻率常數 和 節拍常數   
             TR0=1;                                             //開定時器1   
           while(n!=0) Beep=~Beep,delay(m);                         //等待節拍完成, 通過P1口輸出音頻(可多聲道哦!)   
       TR0=0;                                             //關定時器1   
    }   
}  
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美中文在线 | 亚洲精品亚洲人成人网 | 国产精品一区在线 | 性色网站| 久久com | 在线视频 欧美日韩 | 久久婷婷国产麻豆91 | 精品国产乱码久久久久久88av | 国产视频久久久 | 国产亚洲精品精品国产亚洲综合 | 亚洲精品中文字幕在线观看 | 国产精品成人国产乱一区 | 亚洲一在线| 亚洲一区二区视频在线观看 | 久久国产精品网 | 97av视频| 91免费在线视频 | 国产一区二区三区四区 | 日本三级网址 | 亚洲一区中文 | 欧美成人一区二区三区片免费 | h视频免费观看 | 日日爱夜夜操 | 久久成人一区 | 久久久精品 | 国产aaaaav久久久一区二区 | 日本不卡一区二区三区 | 亚洲天堂成人在线视频 | 久久久久久免费毛片精品 | 一区二区免费在线 | 国产91在线视频 | 亚洲一区二区 | 毛片久久久 | 亚洲激情一区二区三区 | 色女人天堂 | 日韩中出| 国产欧美精品一区二区三区 | 一二区成人影院电影网 | 国产一二三区精品视频 | 国产精品一区二区三区四区五区 | 国产精品成人国产乱一区 |