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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2611|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

單片機按鍵音樂隨機播放程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:292103 發(fā)表于 2018-8-20 12:31 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
按鍵音樂隨機播放


單片機源程序如下:
  1. #include  <reg52.h>

  2. sbit  buzzer = P2^5;   // 聲明輸出端
  3. unsigned char  keys,i;   // 聲明按鈕及播放譜變量
  4. unsigned char  tone_H, tone_L; // 聲明計時量變量
  5. #define uint unsigned int
  6. #define uchar unsigned char
  7. uchar timeh,timel;//用于存放定時器的高8
  8. void  beat_125(unsigned char); // 聲明節(jié)拍函數(shù)
  9. void play6(void);
  10. sbit key=P3^4;
  11. uchar code zbjbxf[]=
  12.    {  
  13.    0x64,0xA3,0xC1,0xA2,0x62,0x84,0x61,0x81,0x61,0xA4,
  14.    0xA1,0x91,0xA1,0x81,0x64,0xA3,0xC1,0xD2,0xD2,0xD2,
  15.    0xA2,0xC4,0xA1,0xC1,0xA1,0xC1,0xD2,0xD2,0xD2,0xA2,
  16.    0x25,0xC2,0x62,0xC2,0x62,0xA2,0xA2,0x84,0x94,0x94,
  17.    0x92,0x81,0x91, 0xA2,0xC2,0xD4,0xE4,0xA4,0xE4,0xA2,
  18.    0xE2,0xA2,0xE2,0xA2, 0xA2,0x84,0x94,0x94,0x92,0x81,
  19.    0x91,0xA2,0xC2,0xD8
  20.    };

  21. uchar code chuzhi[]=
  22.    {
  23.    0xff,0xff,0xFC,0x8E,0xFC, 0xED,0xFD,0x43,0xFD,0x6A,
  24.    0xFD,0xB3,0xFD,0xF3,0xFE,0x2D,0xFE, 0x47,0xFE,0x76,
  25.    0xFE,0xA1,0xFE,0xC7,0xFE,0xD9,0xFE,0xF9,0xFF,0x16
  26.    };

  27. void delay(uint z)
  28. {        uint y;
  29.     for(z;z>0;z--)
  30.         for(y=19000;y>0;y--);
  31. }

  32. void delay1(uint z)
  33. {        uint y;
  34.     for(z;z>0;z--)
  35.         for(y=112;y>0;y--);
  36. }


  37. unsigned char code song1[]={ 1, 1, 2, 1,  4, 3,  1, 1, 2, 1,  5, 4,
  38.         1, 1, 8, 6,  4, 3, 2,  11, 11, 6, 4,  5, 4,  15 };
  39. unsigned char code beat1[]={ 4, 4, 8, 8,  8, 16,  4, 4, 8, 8,  8, 16,
  40.         4, 4, 8, 8,  8, 8, 8,  4, 4, 8, 8,  8, 16 };
  41. unsigned char code song2[]={ 1, 1, 1,  3, 2, 1,  3, 3, 3,  5, 4, 3,  5, 4, 3,  2,
  42.         2, 1, 0,  1, 2, 3,  4, 3, 2,  3, 4, 5,  5, 4, 3, 2,  1, 15};
  43. unsigned char code beat2[]={ 4, 4, 4,  6, 2, 4,  4, 4, 4,  6, 2, 4,  4, 4, 4,  12 ,
  44.           8, 2, 2,  4, 4, 4,  8, 2, 2,  4, 4, 4,  2, 2, 4, 4,  12 };
  45. unsigned char code song3[]={ 8, 7, 6, 5, 5,  6, 8, 5,  6, 5, 3, 2, 5,  3, 12,
  46.           8, 7, 6, 5, 5,  6, 8, 5,  6, 5, 3, 2, 5,  1, 12,
  47.           2, 3, 2, 5,   6, 5, 6, 8,   9, 8, 7, 6, 9,  5, 12,
  48.           6, 8, 5, 6,  3, 5, 6, 5, 3,  2, 3, 5, 3, 2,  1, 0,  15 };
  49. unsigned char code beat3[]={ 8, 4, 4, 8, 8,  8, 8, 16,  8, 4, 4, 8, 8,  24, 8,
  50.         8, 4, 4, 8, 8,  8, 8, 16,  8, 4, 4, 8, 8,  24, 8,
  51.         8, 4, 4, 16,  8, 4, 4, 16,  8, 4, 4, 8, 8,  24, 8,
  52.         8, 8, 8, 8,  8, 4, 4, 8, 8,  8, 4, 4, 8, 8,  32 };
  53. unsigned char code song4[]={ 2, 2, 3, 5,  6, 5, 6, 7,  9, 7, 7, 6, 5,  6,
  54.         7, 9, 9, 7, 9,  5, 6, 6,  2, 7, 7, 6, 5,  5,
  55.         6, 6, 7, 6, 5,  3, 2, 3, 5,  3, 5, 6, 7,  9,
  56.         9, 9, 10, 9, 7,  7, 6, 5, 3,  2, 7, 7, 6, 5,  5,  15};
  57. unsigned char code beat4[]={ 12, 4, 8, 8,  8, 4, 4, 16,  12, 4, 4, 4, 8,  32,
  58.         12, 4, 8, 4, 4,  12, 4, 16,  12, 4, 8, 4, 4,  32,
  59.         12, 4, 8, 4, 4,  8, 4, 4, 16,  12, 8, 8, 8,  32,
  60.         12, 4, 8, 4, 4,  8, 4, 4, 16,  12, 4, 8, 4, 4,  32  };

  61. unsigned char code song5[]={    6,2,3,      5,2,1,      3,2,2,    5,2,2,    1,3,2,   6,2,1,    5,2,1,
  62.                                 6,2,4,      3,2,2,      5,2,1,    6,2,1,         5,2,2,          3,2,2,    1,2,1,
  63.                                 6,1,1,      5,2,1,      3,2,1,           2,2,4,         2,2,3,          3,2,1,    5,2,2,
  64.                                 5,2,1,      6,2,1,      3,2,2,           2,2,2,    1,2,4,          5,2,3,    3,2,1,
  65.                                 2,2,1,      1,2,1,      6,1,1,           1,2,1,         5,1,6,          0,0,0  };

  66. unsigned int code tone[]={ 1012, 956, 852, 759, 716, 638, 568, 506, 478, 426, 379,531, 10 };//音階定義
  67. void play1(void);     // 聲明play1函數(shù)
  68. void play2(void);     // 聲明play2函數(shù)
  69. void play3(void);     // 聲明play3函數(shù)
  70. void play4(void);
  71. void play5(void);    // 聲明play5函數(shù)
  72. void beat_125(unsigned char); // 聲明節(jié)拍函數(shù)

  73. //================================================

  74. //==第一首歌=================================


  75. void play1(void)
  76. { i=0;
  77. while(song1[i]!=15)   // while循環(huán)開始
  78. { tone_H=(65536-tone[song1[i]])/256;// 讀取音階計數(shù)量之高八位元
  79.   tone_L=(65536-tone[song1[i]])%256;// 讀取音階計數(shù)量之低八位元
  80.   TH0=tone_H;    // 填入音階計數(shù)量之高八位元
  81.   TL0=tone_L;    // 填入音階計數(shù)量之低八位元
  82.   TR0=1;     // 啟動TImer 0
  83.   beat_125(beat1[i]);  // 指定節(jié)拍
  84.   i++;     // 下一個音
  85.   TR0=0;     // 關(guān)閉TImer 0
  86. }       // 結(jié)束播放
  87. }     
  88. //==第二首歌=================================
  89. void play2(void)
  90. { i=0;
  91. while(song2[i]!=15)   // while循環(huán)開始
  92. { tone_H=(65536-tone[song2[i]])/256;// 讀取音階計數(shù)量之高八位元
  93.   tone_L=(65536-tone[song2[i]])%256;// 讀取音階計數(shù)量之低八位元
  94.   TH0=tone_H;    // 填入音階計數(shù)量之高八位元
  95.   TL0=tone_L;    // 填入音階計數(shù)量之低八位元
  96.   TR0=1;     // 啟動TImer 0
  97.   beat_125(beat2[i]);  // 指定節(jié)拍
  98.   i++;     // 下一個音
  99.   TR0=0;     // 關(guān)閉Timer 0
  100. }   
  101. }        // 結(jié)束播放
  102. //==第三首歌=================================
  103. void play3(void)
  104. { i=0;
  105. while(song3[i]!=15)   // while循環(huán)開始
  106. { tone_H=(65536-tone[song3[i]])/256;// 讀取音階計數(shù)量之高八位元
  107.   tone_L=(65536-tone[song3[i]])%256;// 讀取音階計數(shù)量之低八位元
  108.   TH0=tone_H;    // 填入音階計數(shù)量之高八位元
  109.   TL0=tone_L;    // 填入音階計數(shù)量之低八位元
  110.   TR0=1;     // 啟動Timer 0
  111.   beat_125(beat3[i]);  // 指定節(jié)拍
  112.   i++;     // 下一個音
  113.   TR0=0;     // 關(guān)閉Timer 0
  114. }   
  115. }        // 結(jié)束播放
  116. //==第四首歌=================================
  117. void play4(void)
  118. { i=0;
  119. while(song4[i]!=15)   // while循環(huán)開始
  120. { tone_H=(65536-tone[song4[i]])/256;// 讀取音階計數(shù)量之高八位元
  121.   tone_L=(65536-tone[song4[i]])%256;// 讀取音階計數(shù)量之低八位元
  122.   TH0=tone_H;    // 填入音階計數(shù)量之高八位元
  123.   TL0=tone_L;    // 填入音階計數(shù)量之低八位元
  124.   TR0=1;     // 啟動Timer 0
  125.   beat_125(beat4[i]);  // 指定節(jié)拍
  126.   i++;     // 下一個音
  127.   TR0=0;     // 關(guān)閉Timer 0
  128. }   
  129. }        // 結(jié)束播放

  130. void play5(void)
  131. { i=0;
  132. while(song5[i]!=15)   // while循環(huán)開始
  133. { tone_H=(65536-tone[song5[i]])/256;// 讀取音階計數(shù)量之高八位元
  134.   tone_L=(65536-tone[song5[i]])%256;// 讀取音階計數(shù)量之低八位元
  135. TH0=tone_H;    // 填入音階計數(shù)量之高八位元
  136. TL0=tone_L;    // 填入音階計數(shù)量之低八位元
  137.   TR0=1;     // 啟動Timer 0
  138.   beat_125(beat4[i]);  // 指定節(jié)拍
  139. i++;     // 下一個音
  140. TR0=0;     // 關(guān)閉Timer 0
  141. }   
  142. }
  143. void play6()
  144. {
  145. uint temp; //存放簡譜數(shù)組中的每一個音符的臨時變量
  146.   uchar jp; //jp 用于取出temp
  147.   uchar i=0;
  148.    while(1)
  149.    {
  150.            temp=zbjbxf[i];
  151.     if(temp==0xff) break;
  152.     jp=temp/16;
  153.             if(jp!=0)
  154.          {
  155.            tone_H=chuzhi[jp*2];
  156.            tone_L=chuzhi[jp*2+1];
  157.            TR0=1;//開定時器
  158.          }
  159.          else {TR0=0;buzzer=1;}
  160.         delay(temp%16);TR0=0;buzzer=1; delay1(5); TR0=1;i++;//關(guān)定時器
  161.    }
  162.     TR0=0;//關(guān)定時器
  163.     buzzer=1; //關(guān)蜂鳴器
  164. }

  165. //====Timer 0中斷子程序==================
  166. void tone_timer(void) interrupt 1 // Timer 0中斷子程序開始
  167. { TH0=tone_H;     // 填入計時量之高八位元
  168. TL0=tone_L;     // 填入計時量之低八位元  
  169. buzzer=~buzzer;    // 蜂 器反相輸出
  170. }        // 結(jié)束中斷子程序
  171. //====節(jié)拍函數(shù)==================
  172. void beat_125(unsigned char x) // 節(jié)拍函數(shù)開始
  173. { unsigned char i,j,k;  // 聲明變量
  174. for (i=0;i<x;i++)   // i循環(huán)
  175.   for (j=0;j<125;j++)  // j循環(huán)
  176.    for (k=0;k<120;k++);// k循環(huán)  
  177. }        // 結(jié)束節(jié)拍函數(shù)

  178. void delay3(unsigned int x)
  179. {
  180.         unsigned int i;
  181.         while(x--)
  182.         {
  183.                 for(i=0;i<113;i++);

  184.         }
  185. }
  186. void suiji()
  187. {

  188. uint num;
  189. num=rand();
  190. if(key==0)
  191.   {delay(1);if(key==0)
  192.   {         switch (num%10){
  193.      case 0x01 : delay3(800);play1();break; // 按下S1,播放第一首歌
  194.      case 0x02 : delay3(800);play2(); break; // 按下S2,播放第二首歌
  195.      case 0x03 : delay3(800);play3(); break; // 按下S3,播放第三首歌
  196.      case 0x04 : delay3(800);play4(); break; // 按下S4,播放第四首歌
  197.          case 0x05: delay3(800);play5(); break; //
  198.          case 0x06: delay3(800);play6();break;
  199.          case 0x07: delay3(800);play1();break;
  200.          case 0x08: delay3(800);play3();break;
  201.          case 0x09: delay3(800);play2();break;
  202.          case 0x00: delay3(800);play6();break;
  203.           }
  204.   }
  205. }

  206. }
  207. main()
  208. {
  209. TMOD=0x01;         // 設(shè)定MODE1   

  210. //buzzer=1;     // 蜂 器初始值
  211. IE=0x82;      // 啟用TImer 0
  212. while (1)     // while循環(huán)
  213. { suiji();
  214. // P3=0xff;    // 將Port2規(guī)劃為輸入埠
  215.   //keys=~P2;    // 讀取按鈕
  216. // switch (keys)   // 判讀
  217. // { case 0x01: play1(); break; // 按下S1,播放第一首歌
  218.    // case 0x02: play2(); break; // 按下S2,播放第二首歌
  219.    // case 0x04: play3(); break; // 按下S3,播放第三首歌
  220.    // case 0x08: play4(); break; // 按下S4,播放第四首歌
  221. //        case 0x12: play5(); break; //
  222. //        case 0x10: play6(); break;
  223.        
  224. // }  buzzer=1;   // 蜂 器不動作
  225.   
  226. }       // while循環(huán)結(jié)束
  227. }        // 主程序結(jié)束  
復(fù)制代碼

所有資料51hei提供下載:
隨機播放.doc (50.5 KB, 下載次數(shù): 12)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2018-8-21 03:25 | 只看該作者
代碼不完整?
回復(fù)

使用道具 舉報

板凳
ID:292103 發(fā)表于 2018-8-21 06:27 來自手機 | 只看該作者
本帖最后由 bulia 于 2018-8-21 10:58 編輯
admin 發(fā)表于 2018-8-21 03:25
代碼不完整?

您好!PLAY5有問題噢!去掉了!

隨機播放.c.doc

44.5 KB, 下載次數(shù): 3, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人免费 | 成人啊啊啊 | 日日骚av| 日日日视频 | 国产日日操 | 精品一二区 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 国产丝袜一区二区三区免费视频 | 久久久久久黄 | 亚洲精品三级 | 亚洲精品精品 | 水蜜桃久久夜色精品一区 | 亚洲一区视频在线 | 国产美女精品视频 | 久久久男人的天堂 | 国产美女久久 | 在线播放一区二区三区 | www国产成人免费观看视频 | 在线视频99 | www.久久久久久久久 | 久久精品国产清自在天天线 | 99亚洲精品 | 一级欧美 | 精品久久久久久红码专区 | 中文二区 | 中文字幕99 | 色婷婷一区二区三区四区 | 伊人久久国产 | 99re视频| 9久久精品 | 国产玖玖 | 日韩成人免费av | 精品粉嫩超白一线天av | 亚洲人成人一区二区在线观看 | 一级毛片免费看 | 波多野结衣一区二区三区在线观看 | 久久国产综合 | 麻豆久久久久久久 | 久久专区 | 嫩草视频在线 | 亚洲欧美视频在线观看 |