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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2532|回復: 0
打印 上一主題 下一主題
收起左側

單片機音樂盒程序 一個獨立按鍵實現四首歌循壞播放

[復制鏈接]
跳轉到指定樓層
樓主
ID:512872 發表于 2019-10-3 10:50 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
一個獨立按鍵實現四首歌循壞播放

單片機源程序如下:
  1. /************************************************************************  
  2. [文件名]  C51音樂程序(八月桂花)  
  3. [功能]    通過單片機演奏音樂  
  4.   
  5. /**********************************************************************/   
  6. #include <REG52.H>   
  7. #include <INTRINS.H>   
  8. //本例采用89C52, 晶振為12MHZ   
  9. //關于如何編制音樂代碼, 其實十分簡單,各位可以看以下代碼.   
  10. //頻率常數即音樂術語中的音調,而節拍常數即音樂術語中的多少拍;   
  11. //所以拿出譜子, 試探編吧!   
  12. #define uint unsigned int
  13. #define uchar unsigned char
  14. sbit Beep =  P3^1;
  15. sbit s1=P1^0;  //流水燈順時針流水
  16. uchar code discode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};        //送段碼0-9和"-"   
  17. unsigned char n=0;  //n為節拍常數變量
  18. void ini(void)                               
  19. {
  20.   TMOD&=0x0f;   
  21.   TMOD|=0x01;   
  22.   TH0=0xd8;TL0=0xef;   
  23.   IE=0x82;
  24. }
  25. void delay (unsigned char m)   //控制頻率延時   
  26. {   
  27. unsigned i=3*m;   
  28. while(--i);   
  29. }   
  30. void delay1(unsigned char yj)
  31.     {
  32.       uchar yj2=2;
  33.        while(yj!=0)
  34.          {      
  35.                while(yj2!=0)
  36.                   {
  37.                      yj2--;
  38.                      }
  39.                   yj2=2;
  40.              yj--;  
  41.        }
  42.    
  43.      }   
  44. void delayms(unsigned char a)  //豪秒延時子程序   
  45. {   
  46.   while(--a);                  //采用while(--a) 不要采用while(a--); 各位可編譯一下看看匯編結果就知道了!   
  47. }
  48. void shuma()
  49. {  
  50.            while(s1==1)
  51.         {
  52.         P0=0X8C;
  53.         P2=0X01;
  54.         }
  55. }   
  56. uchar code music_tab[] ={   
  57. 0x18, 0x30, 0x1C , 0x10, //格式為: 頻率常數, 節拍常數, 頻率常數, 節拍常數,   
  58. 0x20, 0x40, 0x1C , 0x10,   
  59. 0x18, 0x10, 0x20 , 0x10,   
  60. 0x1C, 0x10, 0x18 , 0x40,   
  61. 0x1C, 0x20, 0x20 , 0x20,   
  62. 0x1C, 0x20, 0x18 , 0x20,   
  63. 0x20, 0x80, 0xFF , 0x20,   
  64. 0x30, 0x1C, 0x10 , 0x18,   
  65. 0x20, 0x15, 0x20 , 0x1C,   
  66. 0x20, 0x20, 0x20 , 0x26,   
  67. 0x40, 0x20, 0x20 , 0x2B,   
  68. 0x20, 0x26, 0x20 , 0x20,   
  69. 0x20, 0x30, 0x80 , 0xFF,   
  70. 0x20, 0x20, 0x1C , 0x10,   
  71. 0x18, 0x10, 0x20 , 0x20,   
  72. 0x26, 0x20, 0x2B , 0x20,   
  73. 0x30, 0x20, 0x2B , 0x40,   
  74. 0x20, 0x20, 0x1C , 0x10,   
  75. 0x18, 0x10, 0x20 , 0x20,   
  76. 0x26, 0x20, 0x2B , 0x20,   
  77. 0x30, 0x20, 0x2B , 0x40,   
  78. 0x20, 0x30, 0x1C , 0x10,   
  79. 0x18, 0x20, 0x15 , 0x20,   
  80. 0x1C, 0x20, 0x20 , 0x20,   
  81. 0x26, 0x40, 0x20 , 0x20,   
  82. 0x2B, 0x20, 0x26 , 0x20,   
  83. 0x20, 0x20, 0x30 , 0x80,   
  84. 0x20, 0x30, 0x1C , 0x10,   
  85. 0x20, 0x10, 0x1C , 0x10,   
  86. 0x20, 0x20, 0x26 , 0x20,   
  87. 0x2B, 0x20, 0x30 , 0x20,   
  88. 0x2B, 0x40, 0x20 , 0x15,   
  89. 0x1F, 0x05, 0x20 , 0x10,   
  90. 0x1C, 0x10, 0x20 , 0x20,   
  91. 0x26, 0x20, 0x2B , 0x20,   
  92. 0x30, 0x20, 0x2B , 0x40,   
  93. 0x20, 0x30, 0x1C , 0x10,   
  94. 0x18, 0x20, 0x15 , 0x20,   
  95. 0x1C, 0x20, 0x20 , 0x20,   
  96. 0x26, 0x40, 0x20 , 0x20,   
  97. 0x2B, 0x20, 0x26 , 0x20,   
  98. 0x20, 0x20, 0x30 , 0x30,   
  99. 0x20, 0x30, 0x1C , 0x10,   
  100. 0x18, 0x40, 0x1C , 0x20,   
  101. 0x20, 0x20, 0x26 , 0x40,   
  102. 0x13, 0x60, 0x18 , 0x20,   
  103. 0x15, 0x40, 0x13 , 0x40,   
  104. 0x18, 0x80, 0x00 , 0x00  
  105. };
  106. //揮著翅膀的女孩
  107. uchar code music_tab1[]={ 0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,

  108. 0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,

  109. 0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,

  110. 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,

  111. 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,

  112. 0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,

  113. 0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,

  114. 0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,

  115. 0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,

  116. 0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,

  117. 0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,

  118. 0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,

  119. 0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,

  120. 0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00
  121.                                                                   };

  122. //兩只蝴蝶                                 
  123. uchar code music_tab2[] ={ 0x26,0x10,0x1c,0x10,0x1c,0x10,0x26,0x10,0x20,0x10,0x1c,0x10,0x20,0x10,
  124.                     0x1c,0x10,0x26,0x10,0x20,0x10,0x1c,0x10,0x20,0x10,0x26,0x10,0x0e,0x10,
  125.                     0x2b,0x10,0x2b,0x10,0x0e,0x10,0x30,0x10,0x2b,0x10,0x30,0x10,0x2b,0x10,
  126.                     0x2b,0x10,0x0e,0x10,0x30,0x10,0x2b,0x10,0x30,0x10,0x0e,0x10,0x26,0x10,
  127.                     0x1c,0x10,0x1c,0x10,0x26,0x10,0x20,0x10,0x1c,0x10,0x20,0x10,0x1c,0x10,
  128.                     0x1c,0x10,0x26,0x10,0x20,0x10,0x1c,0x10,0x20,0x10,0x26,0x10,0x0e,0x10,
  129.                     0x2b,0x10,0x2b,0x10,0x0e,0x10,0x30,0x10,0x2b,0x10,0x30,0x10,0x2b,0x10,
  130.                     0x30,0x10,0x2b,0x10,0x26,0x10,0x1c,0x10,0x19,0x10,0x1c,0x10,0x20,0x10,
  131.                     0x1c,0x10,0x1c,0x10,0x19,0x10,0x00
  132.                    };  
  133. /******************生日·快樂***************/
  134. unsigned char code music_tab3[]={
  135.                    0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x20,0x60,0x20,0x19,0x20,0x20,0x20,
  136.                     0x20,0x20,0x1c,0x20,0x20,0x20,0x55,0x20,0x60,0x20,0x20,0x20,0x20,0x20,
  137.                     0x40,0x20,0x4c,0x20,0x60,0x20,0x19,0x20,0x1c,0x20,0x48,0x20,0x48,0x20,
  138.                     0x4c,0x20,0x60,0x20,0x55,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x00};
  139. //電影音樂僵尸中音樂盒的歌在單片機中的編碼
  140. unsigned char code music_tab4[]={
  141.                     0x40,0x20,0x39,0x20,0x40,0x20,0x48,0x20,0x4c,0x20,0x48,0x20,0x40,0x20,
  142.                     0x55,0x20,0x4c,0x20,0x48,0x20,0x4c,0x20,0x48,0x20,0x40,0x20,0x40,0x20,
  143.                     0x39,0x20,0x40,0x20,0x48,0x20,0x4c,0x20,0x48,0x20,0x40,0x20,0x55,0x20,
  144.                     0x40,0x20,0x4c,0x20,0x60,0x20,0x00,
  145.                    };
  146.   
  147. void gequ1()
  148. {
  149.   uchar p,m;   //m為頻率常數變量   
  150.   uchar i=0;
  151.   s1=P1^0;
  152. play:   
  153.    while(s1==1)   
  154.     {   
  155.     a: p=music_tab[i];   
  156.        if(p==0x00)       { i=0; delayms(1000); goto play;}     //如果碰到結束符,延時1秒,回到開始再來一遍   
  157.        else if(p==0xff)  { i=i+1;delayms(100),TR0=0; goto a;}  //若碰到休止符,延時100ms,繼續取下一音符   
  158.             else         {m=music_tab[i++], n=music_tab[i++];}  //取頻率常數 和 節拍常數   
  159.              TR0=1;                                             //開定時器1   
  160.            while(n!=0) Beep=~Beep,delay(m);                         //等待節拍完成, 通過P1口輸出音頻(可多聲道哦!)   
  161.        TR0=0;                                             //關定時器1   
  162.     }
  163. }
  164. void gequ2()
  165. {
  166.   uchar p,yj;   //m為頻率常數變量   
  167.   uchar i=0;
  168.   s1=P1^0;
  169. play1:   
  170.    while(s1==1)   
  171.     {   
  172.     a1: p=music_tab1[i];   
  173.        if(p==0x00)       { i=0, delayms(1000); goto play1;}     //如果碰到結束符,延時1秒,回到開始再來一遍   
  174.        else if(p==0xff)  { i=i+1;delayms(100),TR0=0; goto a1;}  //若碰到休止符,延時100ms,繼續取下一音符   
  175.             yj=music_tab1[i++], n=music_tab1[i++];  //取頻率常數 和 節拍常數   
  176.             TR0=1;                                             //開定時器1   
  177.            while(n!=0) Beep=~Beep,delay1(yj);                         //等待節拍完成, 通過P1口輸出音頻(可多聲道哦!)   
  178.        TR0=0;                                             //關定時器1   
  179.     }
  180. }
  181. void gequ3()
  182. {
  183.   uchar p,yj;   //m為頻率常數變量   
  184.   uchar i=0;
  185.   s1=P1^0;
  186. play2:   
  187.    while(s1==1)   
  188.     {   
  189.     a2: p=music_tab2[i];   
  190.        if(p==0x00)       { i=0, delayms(1000); goto play2;}     //如果碰到結束符,延時1秒,回到開始再來一遍   
  191.        else if(p==0xff)  { i=i+1;delayms(100),TR0=0; goto a2;}  //若碰到休止符,延時100ms,繼續取下一音符   
  192.             else         {yj=music_tab2[i++], n=music_tab2[i++];}  //取頻率常數 和 節拍常數   
  193.              TR0=1;                                             //開定時器1   
  194.            while(n!=0) Beep=~Beep,delay1(yj);                         //等待節拍完成, 通過P1口輸出音頻(可多聲道哦!)   
  195.        TR0=0;                                             //關定時器1   
  196.     }
  197. }  
  198. void gequ4()
  199. {
  200.   uchar p,yj;   //m為頻率常數變量   
  201.   uchar i=0;
  202.   s1=P1^0;
  203. play3:   
  204.    while(s1==1)   
  205.     {   
  206.     a3: p=music_tab3[i];   
  207.        if(p==0x00)       { i=0, delayms(1000); goto play3;}     //如果碰到結束符,延時1秒,回到開始再來一遍   
  208.        else if(p==0xff)  { i=i+1;delayms(100),TR0=0; goto a3;}  //若碰到休止符,延時100ms,繼續取下一音符   
  209.             else         {yj=music_tab3[i++], n=music_tab3[i++];}  //取頻率常數 和 節拍常數   
  210.              TR0=1;                                             //開定時器1   
  211.            while(n!=0) Beep=~Beep,delay1(yj);                         //等待節拍完成, 通過P1口輸出音頻(可多聲道哦!)   
  212.        TR0=0;                                             //關定時器1   
  213.     }
  214. }
  215. void gequ5()
  216. {
  217.   uchar p,yj;   //m為頻率常數變量   
  218.   uchar i=0;
  219.   s1=P1^0;
  220. play4:   
  221.    while(s1==1)   
  222.     {   
  223.     a4: p=music_tab4[i];   
  224.        if(p==0x00)       { i=0, delayms(1000); goto play4;}     //如果碰到結束符,延時1秒,回到開始再來一遍   
  225.        else if(p==0xff)  { i=i+1;delayms(100),TR0=0; goto a4;}  //若碰到休止符,延時100ms,繼續取下一音符   
  226.             else         {yj=music_tab4[i++], n=music_tab4[i++];}  //取頻率常數 和 節拍常數   
  227.             TR0=1;                                             //開定時器1   
  228.            while(n!=0) Beep=~Beep,delay1(yj);                         //等待節拍完成, 通過P1口輸出音頻(可多聲道哦!)   
  229.        TR0=0;                                             //關定時器1   
  230.     }
  231. }
  232. void int0()  interrupt 1   //采用中斷0 控制節拍   
  233. {  TH0=0xd8;   
  234.    TL0=0xef;   
  235.    n--;   
  236. }        
  237.    
  238. void main()   
  239. {
  240.   uchar num,i;
  241.   ini();
  242.   shuma();
  243.   while(1)
  244. {
  245.              if(s1==0)
  246.   {
  247.   delay(500);
  248.     if(s1==0)
  249.         {
  250.           num++;
  251.           if(num>5)
  252.           {
  253.             num=1;
  254.           }
  255.           while((i<50)&&(s1==0))
  256.           {
  257.           delay(200);
  258.           i++;
  259.           }
  260.           i=0;
  261.         }
  262.   }
  263. switch(num)
  264.    {
  265. case 1:
  266.         P0=discode[1];
  267.                 P2=0x01;
  268.             gequ1();
  269.                 break;
  270. case 2:
  271.         P0=discode[2];
  272.                 P2=0x01;
  273.             gequ2();
  274.                 break;
  275. case 3:
  276.         P0=discode[3];
  277.                 P2=0x01;
  278.             gequ3();
  279.                 break;
  280. case 4:
  281.         P0=discode[4];
  282.                 P2=0x01;
  283.             gequ4();
  284.                 break;
  285. case 5:
  286.         P0=discode[5];
  287.                 P2=0x01;
  288.             gequ5();
  289.                 break;
  290.   }  
  291. }
  292. }
復制代碼

所有資料51hei提供下載:
我的音樂盒.zip (31.44 KB, 下載次數: 29)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区回区在观看免费视频 | 黄色视频a级毛片 | 一级片成人 | 国产精品一区二区三区久久久 | 一级特黄视频 | 国产美女永久免费无遮挡 | 国产高清在线观看 | 亚洲在线免费 | 亚洲 91| 久久91精品国产一区二区 | 成人国产一区二区三区精品麻豆 | 日韩中文字幕视频在线 | 国产精品久久久久久久久久不蜜臀 | 久久精品99国产精品 | 成人二区 | 国产精品视频专区 | 国产精品免费观看 | 一级毛片,一级毛片 | 成人高清网站 | 国产精品一码二码三码在线 | 91视频在线| 精品欧美一区二区在线观看欧美熟 | www.一区二区| 欧美性生活一区二区三区 | 精品1区2区 | 91社区在线高清 | 国产精品一区二区三级 | 久久av一区二区三区 | 激情a| 成人做爰www免费看 午夜精品久久久久久久久久久久 | 免费在线观看av网址 | 噜久寡妇噜噜久久寡妇 | 91精品国产乱码麻豆白嫩 | 精品国产乱码久久久久久影片 | 手机在线观看av | 成人在线国产 | 日日摸日日添日日躁av | 欧美黄色片 | 欧美二区三区 | 中文字幕一区在线观看视频 | 国产成人精品综合 |