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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求一個單片機的音樂播放器

[復制鏈接]
跳轉到指定樓層
樓主
ID:263430 發(fā)表于 2017-12-19 00:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1、能播放5首以上的歌
2、用獨立按鍵控制不同歌曲的切換,歌曲的播放與暫停
3、用數(shù)碼管顯示當前歌曲的號碼
用AT89C51芯片制作,簡單點,不要太復雜,滿足上面的要求就行,謝謝大家。

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

使用道具 舉報

沙發(fā)
ID:96682 發(fā)表于 2017-12-19 11:59 | 只看該作者
網(wǎng)店這貨應該有,數(shù)碼管,液晶屏隨便選
回復

使用道具 舉報

板凳
ID:160834 發(fā)表于 2017-12-20 12:52 | 只看該作者
給你個資料參考。內含C51代碼和Proteus仿真。

C51音樂盒.rar

122.21 KB, 下載次數(shù): 178

回復

使用道具 舉報

地板
ID:264442 發(fā)表于 2017-12-20 19:44 | 只看該作者
可以先把PCB圖畫出來在寫程序
回復

使用道具 舉報

5#
ID:472242 發(fā)表于 2019-2-5 21:41 | 只看該作者
網(wǎng)上有播放音樂的,下下來修修改改就行

評分

參與人數(shù) 1黑幣 +35 收起 理由
刀刀見紅 + 35

查看全部評分

回復

使用道具 舉報

6#
ID:475984 發(fā)表于 2019-2-12 18:03 | 只看該作者
我用stc12c5a60s2單片機做的 和你要求的功能差不多基本上改改晶振值就行 了


  1. /****************************
  2. 表白神器  音樂盒
  3. ****************************
  4. 晶振值33.1776MHz
  5. 功能簡介:K16控制暫停與繼續(xù)
  6.           K4 上一曲
  7.                                         K12下一曲
  8.     數(shù)碼管顯示當前歌曲序號
  9. ****************************
  10. 歌曲分別是:
  11. 紙短情長
  12. 兩只老虎
  13. 祝你生日快樂歌
  14. 小星星
  15. ****************************/
  16. #include <stc12c5a60s2.h>
  17. #define Xtal 33177600  //賦晶振值
  18. #define All 4          //歌曲總數(shù)


  19. sbit BUZZ = P1^3;  //蜂鳴器控制引腳
  20. sbit KEY = P2^4;   //按鍵定義
  21. sbit KEY4 = P2^7;
  22. sbit KEY12 = P2^5;
  23. sbit ADDR0 = P2^0; //數(shù)碼管顯示控制
  24. sbit ADDR1 = P2^1;
  25. sbit ADDR2 = P2^2;
  26. sbit ENLED = P1^1; //總線收發(fā)器

  27. bit KeySta = 1;  //當前按鍵狀態(tài)
  28. bit KeySta4 = 1;  
  29. bit KeySta12 = 1;
  30. bit backup = 1;  //默認彈起時時一
  31. bit backup4 = 1;
  32. bit backup12 = 1;
  33. bit cntkey = 0;  //判斷暫停還是播放
  34. bit breakflage = 0;//用按鍵改變歌曲標志

  35. unsigned char keybuf = 0xFF;
  36. unsigned char keybuf4 = 0xFF;
  37. unsigned char keybuf12 = 0xFF;
  38. unsigned char Num = 1; //第幾首歌
  39. unsigned char sizeofNote;//節(jié)拍的多少
  40.                
  41. extern void Delay_ms(unsigned int ms);//延時函數(shù)

  42. void PlayControl(unsigned char Num);//歌曲選擇函數(shù)
  43. void Play();//演奏函數(shù)

  44. unsigned char code LedChar[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};//數(shù)碼管顯示字符轉換表
  45. unsigned int code NoteFrequ[] = {  //中音1-7低音1-7和高音1-7對應頻率列表
  46.     523,  587,  659,  698,  784,  880,  988,  //中音1-7
  47.     1047, 1175, 1319, 1397, 1568, 1760, 1976,  //高音1-7
  48.           262, 294, 330, 349, 392, 440, 494,300//低音1-7  最后一個純屬湊數(shù)
  49. };
  50. unsigned int code NoteReload[] = { //中音1-7和高音1-7對應的定時器重載值
  51.     65536 - (Xtal/12) / (523*2),  //中音1
  52.     65536 - (Xtal/12) / (587*2),  //2
  53.     65536 - (Xtal/12) / (659*2),  //3
  54.     65536 - (Xtal/12) / (698*2),  //4
  55.     65536 - (Xtal/12) / (784*2),  //5
  56.     65536 - (Xtal/12) / (880*2),  //6
  57.     65536 - (Xtal/12) / (988*2),  //7
  58.     65536 - (Xtal/12) / (1047*2), //高音1
  59.     65536 - (Xtal/12) / (1175*2), //2
  60.     65536 - (Xtal/12) / (1319*2), //3
  61.     65536 - (Xtal/12) / (1397*2), //4
  62.     65536 - (Xtal/12) / (1568*2), //5
  63.     65536 - (Xtal/12) / (1760*2), //6
  64.     65536 - (Xtal/12) / (1976*2), //7
  65.           65536 - (Xtal/12) / (262*2), //低音1
  66.     65536 - (Xtal/12) / (294*2), //2
  67.     65536 - (Xtal/12) / (330*2), //3
  68.     65536 - (Xtal/12) / (349*2), //4
  69.     65536 - (Xtal/12) / (392*2), //5
  70.     65536 - (Xtal/12) / (440*2), //6
  71.     65536 - (Xtal/12) / (494*2), //7
  72.                 65536 - (Xtal/12) / (300*2), //純屬湊數(shù)
  73. };

  74. unsigned char *SongNote, *SongBeat;//指針
  75. unsigned char code XiaoXingXingNote[] = {   //小星星
  76.         1, 1, 5, 5,    6, 6, 5,    4, 4, 3, 3,    2, 2, 1,  
  77.         5, 5, 4, 4,    3, 3, 2,    5, 5, 4, 4,    3, 3, 2 ,
  78.         1, 1, 5, 5,    6, 6, 5,    4, 4, 3, 3,    2, 2, 1, 0xff    };

  79. unsigned char code XiaoXingXingBeat[] = {
  80.         4, 4, 4, 4,    4, 4, 8,    4, 4, 4, 4,    4, 4, 8,
  81.         4, 4, 4, 4,    4, 4, 8,    4, 4, 4, 4,    4, 4, 8,
  82.         4, 4, 4, 4,    4, 4, 8,    4, 4, 4, 4,    4, 4, 8,};
  83. unsigned char code TwoTigerNote[] = {    //兩只老虎音符表
  84.         1,   2,   3, 1,    1,   2,   3, 1,   3, 4, 5,   3, 4, 5,
  85.         5,6, 5,4, 3, 1,    5,6, 5,4, 3, 1,   1, 5, 1,   1, 5, 1,0xff};

  86. unsigned char code TwoTigerBeat[] = {    //兩只老虎節(jié)拍表,4表示一拍,1就是1/4拍,8就是2拍
  87.         4,   4,   4, 4,    4,   4,   4, 4,   4, 4, 8,   4, 4, 8,
  88.         3,1, 3,1, 4, 4,    3,1, 3,1, 4, 4,   4, 4, 8,   4, 4, 8,
  89.     };
  90. unsigned char code HappybirthdayNote[] = {  //生日快樂歌
  91.         5, 5, 6, 5, 8, 7, 22, 5, 5, 6, 5, 9, 8, 5, 5, 12, 10, 8, 7, 6, 11, 11,  10, 8, 9, 8,0xff };
  92. unsigned char code HappybirthdayBeat[] = {
  93.         2, 2, 4, 4, 4, 4, 4, 2, 2,  4, 4, 4, 8, 2, 2, 4, 4, 4, 4, 8, 2, 2, 4, 4, 4, 8};       
  94. unsigned char code         ZhiduanqingchangNote[] = { //紙短情長
  95.               //8, 9, 10, 9, 8, 6, 22, 11, 10, 9, 22, 7, 8, 9, 7, 7, 5, 22, 7, 9, 8, 8, 3, 4, 2, 3, 1, 1, 5, 2,  //前奏
  96.         19, 3, 3, 3, 2, 3, 1, 2, 2, 2, 1, 2, 5, 1, 1, 1, 20, 1, 20, 19,     2, 2, 2, 3, 20, 19, 4, 4, 4, 3, 4, 1, 2, 2, 2, 1, 2, 5,
  97.                1, 1, 1, 20, 1, 20, 3, 2, 2, 1, 1, 22, 22, 22, 1, 1, 2,             3, 3, 3, 22, 3, 2, 1, 21, 6, 5, 22, 5, 6, 7, 8, 3, 3, 22, 8, 7, 8,
  98.               7, 3, 5, 5, 6, 8, 5, 6, 22, 6, 5, 4,5, 3, 2, 1, 20, 1,               3, 2, 2, 1, 2, 5, 1, 2, 5, 22, 22, 22, 1, 1, 2,
  99.         3, 3, 2, 3, 22, 3, 2, 1, 5, 5, 3, 5, 22, 5, 6, 7,                   8, 8, 8, 8, 8, 7, 6, 7, 6, 3, 5, 5, 5, 6, 8, 5, 6, 22, 6, 5, 4,
  100.         5, 3, 2, 1, 6, 1, 3, 2, 2, 1, 2, 1, 20, 1, 22,                      22, 20, 1, 3, 2, 2, 22, 2, 1, 2, 1, 1, 22, 20, 1, 1, 0xff};       
  101. unsigned char code ZhiduanqingchangBeat[] = {
  102.               //2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 8, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 8, 8, 12, 4, 5, 4, 8, 8, 4,   //前奏
  103.         8, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 4, 2,       2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 4, 5, 2, 2, 2, 2, 2, 5,
  104.         2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 8, 4, 4, 2, 2, 2, 2,                4, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2,
  105.         4, 2, 5, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 4, 2, 5, 1, 1,             2, 2, 2, 2, 2, 4, 2, 16, 16,4, 4, 2, 2, 2, 2,
  106.         2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,                   2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 4, 2, 2, 2, 4, 2, 2, 2, 2, 2,
  107.         2, 4, 2, 5, 1, 1, 2, 2, 2, 2, 2, 4, 1, 12, 4,                     2, 1, 1, 2, 2, 8, 2, 1, 1, 2, 2, 8, 2, 2, 12, 16};
  108. bit enable = 1;   //蜂鳴器發(fā)聲使能標志
  109. bit tmrflag = 0;  //定時器中斷完成標志
  110. unsigned char T0RH = 0xFF;  //T0重載值的高字節(jié)
  111. unsigned char T0RL = 0x00;  //T0重載值的低字節(jié)


  112. void main()
  113. {
  114.    
  115.     EA = 1;       //使能全局中斷
  116.     TMOD = 0x11;  //配置T0,T1工作在模式1
  117.     TH0 = T0RH;   
  118.     TL0 = T0RL;
  119.     ET0 = 1;      //使能T0中斷
  120.           ET1 = 1;      //使能T1中斷
  121.           TR1 = 1;      //啟動T1
  122.           ENLED = 0x00; //使能總線收發(fā)器
  123.           ADDR2=1; ADDR1=0; ADDR0=1;//選擇最右邊的數(shù)碼管
  124.           P23 = 0;      //啟用KEY
  125.    
  126.     while (1)
  127.     {
  128.                         P0 = LedChar[Num]; //數(shù)碼管顯示當前歌曲序號
  129.       PlayControl(Num);                       
  130.                         if(breakflage == 1)
  131.                                 breakflage = 0;
  132.                         else
  133.                                 Delay_ms(500);
  134.     }
  135. }

  136. void PlayControl(unsigned char Num)
  137. {
  138.         switch(Num)
  139.         {
  140.                 case 4:SongNote = XiaoXingXingNote;    SongBeat =  XiaoXingXingBeat;  sizeofNote = sizeof(XiaoXingXingNote);   Play();break;
  141.     case 2:SongNote = TwoTigerNote;        SongBeat =TwoTigerBeat;        sizeofNote = sizeof(TwoTigerNote);       Play();break;
  142.                 case 3:SongNote = HappybirthdayNote;   SongBeat =HappybirthdayBeat;   sizeofNote = sizeof(HappybirthdayNote);  Play();break;
  143.                 case 1:SongNote = ZhiduanqingchangNote;SongBeat =ZhiduanqingchangBeat;sizeofNote = sizeof(ZhiduanqingchangNote);Play();break;               
  144.                 default:break;
  145.         }
  146. }
  147. /* 演奏函數(shù) */
  148. void Play()//演奏函數(shù)
  149. {
  150.     unsigned char beat;   //當前節(jié)拍索引
  151.     unsigned char note;   //當前節(jié)拍對應的音符
  152.     unsigned int time = 0;      //當前節(jié)拍計時
  153.     unsigned int beatTime = 0;  //當前節(jié)拍總時間
  154.     unsigned int soundTime = 0; //當前節(jié)拍需發(fā)聲時間

  155.     for (beat=0; beat<sizeofNote; )  //用節(jié)拍索引作為循環(huán)變量
  156.     {
  157.                                 if(breakflage == 1)
  158.                                         break;
  159.         while (!tmrflag);  //每次定時器中斷完成后,檢測并處理節(jié)拍
  160.         tmrflag = 0;
  161.         if (time == 0)  //當前節(jié)拍播完則啟動一個新節(jié)拍
  162.         {
  163.                                         if(breakflage == 1)
  164.                                                 break;
  165.             note = SongNote[beat] - 1;
  166.                                           if(note == 0xfe)
  167.                                                 {
  168.                                                         if(Num == All)
  169.                                                                 Num = 1;
  170.                                                         else
  171.                                                         Num++;
  172.                                                         break;
  173.                                                 }
  174.             T0RH = NoteReload[note] >> 8;
  175.             T0RL = NoteReload[note];
  176.             beatTime = (SongBeat[beat] * NoteFrequ[note]) >> 2;//計算節(jié)拍總時間,右移2位相當于除4,移位代替除法可以加快執(zhí)行速度
  177.             soundTime = beatTime - (beatTime >> 2);//計算發(fā)聲時間,
  178.             enable = 1;  //指示蜂鳴器開始發(fā)聲
  179.                                                 if (note == 21)//簡譜的0 等待
  180.                                                         enable =0;
  181.             time++;
  182.         }
  183.         else  //當前節(jié)拍未播完則處理當前節(jié)拍
  184.         {
  185.             if (time >= beatTime)  //當前持續(xù)時間到達節(jié)拍總時間時歸零,
  186.             {                      //并遞增節(jié)拍索引,以準備啟動新節(jié)拍
  187.                 time = 0;
  188.                 beat++;
  189.             }
  190.             else  //當前持續(xù)時間未達到總時間時,
  191.             {
  192.                 time++;   //累加時間計數(shù)
  193.                 if (time == soundTime)  //到達發(fā)聲時間后,指示關閉蜂鳴器,
  194.                 {                       //插入0.25*總時間的靜音間隔,
  195.                     enable = 0;         //用以區(qū)分連續(xù)的兩個節(jié)拍
  196.                 }
  197.             }
  198.         }
  199.     }
  200. }
  201. /*控制蜂鳴器發(fā)聲 */
  202. void InterruptTimer0() interrupt 1
  203. {
  204.     TH0 = T0RH;   //重新加載重載值
  205.     TL0 = T0RL;
  206.     tmrflag = 1;
  207.     if (enable)   //使能時反轉蜂鳴器控制電平
  208.         BUZZ = ~BUZZ;
  209.     else          //未使能時關閉蜂鳴器
  210.         BUZZ = 1;
  211. }
  212. /*按鍵掃描*/
  213. void InterruptTimer1() interrupt 3 //按鍵部分參看之前的帖子 帶有計次功能的秒表
  214. {
  215.         TH1 = 0xC9;
  216.         TL1 = 0xEA;
  217.        
  218.           keybuf = (keybuf<<1) | KEY;
  219.     if (keybuf == 0x00)
  220.         KeySta = 0;
  221.     else if (keybuf == 0xFF)
  222.         KeySta = 1;
  223.     else{}
  224.                        
  225.           keybuf4 = (keybuf4<<1) | KEY4;
  226.     if (keybuf4 == 0x00)
  227.         KeySta4 = 0;
  228.     else if (keybuf4 == 0xFF)
  229.         KeySta4 = 1;
  230.     else{}
  231.                        
  232.          keybuf12= (keybuf12<<1) | KEY12;
  233.     if (keybuf12 == 0x00)
  234.         KeySta12 = 0;
  235.     else if (keybuf12 == 0xFF)
  236.         KeySta12 = 1;
  237.     else{}
  238.                        
  239.                               if (KeySta != backup)  
  240.         {
  241.             if (backup == 0)        
  242.                                                 {
  243.                                                         cntkey=~cntkey;
  244.                                                         TR0 = cntkey;
  245.                                                 }
  246.             backup = KeySta;               
  247.         }
  248.                 if (KeySta4 != backup4)
  249.                 {
  250.                         if(backup4 ==0)
  251.                         {
  252.                                 breakflage = 1;
  253.                                 if(Num <All)
  254.                                   Num++;
  255.                           else if(Num == All)
  256.                                         Num =1;
  257.                                 P0 = LedChar[Num];
  258.                         }
  259.                         backup4 = KeySta4;
  260.                 }               
  261.                
  262.                 if (KeySta12 != backup12)
  263.                 {
  264.                         if(backup12 ==0)
  265.                         {
  266.                                 breakflage = 1;
  267.                                 if(Num >1)
  268.                                   Num--;
  269.                           else if(Num == 1)
  270.                                         Num =All;
  271.                                 P0 = LedChar[Num];
  272.                         }
  273.                         backup12 = KeySta12;
  274.                 }                       
  275.                
  276. }
復制代碼
回復

使用道具 舉報

7#
ID:476057 發(fā)表于 2019-2-13 00:08 | 只看該作者
某1個寶上買過,質量太差,同求?
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美久久久久久久 | 四虎最新视频 | h视频网站在线观看 | 欧美激情久久久久久 | 99日韩 | a级在线观看 | 婷婷丁香综合网 | 日韩三级电影一区二区 | 国产精品视频在线播放 | 亚洲福利av | 中文字幕高清av | 国产欧美在线视频 | 婷婷综合色 | 粉嫩一区二区三区四区公司1 | 成人激情视频在线播放 | 九九热精品视频在线观看 | 亚洲精品欧洲 | 国产精品久久久久久久岛一牛影视 | 免费亚洲婷婷 | 伊人网伊人网 | 国产高清一区二区三区 | 九热在线| 色橹橹欧美在线观看视频高清 | 亚洲人人 | 国产精品永久免费观看 | 成人国产在线观看 | 91精产国品一二三区 | 欧美精品福利视频 | av天天澡天天爽天天av | av大片在线观看 | 日日噜噜噜夜夜爽爽狠狠视频, | 亚洲欧美一区二区三区国产精品 | 一区中文字幕 | 午夜免费在线电影 | 91看国产| 喷潮网站 | 91精品国产乱码久久久久久 | 久热9| 午夜一区 | 欧美日韩综合 | 人人玩人人添人人澡欧美 |