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

標(biāo)題: 單片機(jī)蜂鳴器音樂播放器+LCD+LED 含keil源碼 [打印本頁(yè)]

作者: zdxfhgvjhbk    時(shí)間: 2025-5-21 23:39
標(biāo)題: 單片機(jī)蜂鳴器音樂播放器+LCD+LED 含keil源碼
通過蜂鳴器實(shí)現(xiàn)播放三首音樂,三個(gè)按鍵分別控制上一首,下一首,暫停與播放,lcd顯示播放音樂名稱,同時(shí)led點(diǎn)陣根據(jù)音樂閃爍(愛心形狀)

制作出來的實(shí)物圖如下:


單片機(jī)源程序如下:
  1. #include <REGX52.H>
  2. #include "LCD1602.h"
  3. #include <intrins.h>
  4. sbit Buzzer = P2^5;
  5. sbit KEY_PREV = P3^0;    // 上一曲
  6. sbit KEY_NEXT = P3^1;    // 下一曲
  7. sbit KEY_PAUSE = P3^2;   // 暫停/繼續(xù)
  8. sbit SCK=P3^6;
  9. sbit RCK=P3^5;
  10. sbit SER=P3^4;
  11. unsigned char Index = 1;
  12. bit updateLED=0;
  13. bit pause = 0;           // 初始開始狀態(tài)
  14. unsigned int FreqSelect;
  15. //--定義要使用的IO口--//
  16. #define Led_Port                P0

  17. //--列選通控制--//
  18. unsigned char code TAB[8]  = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

  19. void Delay(unsigned int xms) {
  20.     while(xms--) {
  21.         unsigned char i = 2, j = 239;
  22.         do { while (--j); } while (--i);
  23.     }
  24. }

  25. void _74HC595_WriteByte(unsigned char Byte)
  26. {
  27.         unsigned char i;
  28.         for(i=0;i<8;i++)
  29.         {
  30.                 SER=Byte&(0x80>>i);    // 取出每一位數(shù)據(jù)
  31.                 SCK=1;        // 下移一位
  32.                 SCK=0;
  33.         }
  34.         RCK=1;        //傳輸數(shù)據(jù)
  35.         RCK=0;
  36. }

  37. void MatrixLED_ShowColumn(unsigned char Column,Data)
  38. {
  39.         _74HC595_WriteByte(Data);
  40.         Led_Port=~(0x80>>Column);    // 將數(shù)據(jù)顯示在相應(yīng)的列上
  41.         Delay(1);        // 消隱操作
  42.         Led_Port=0xFF;
  43. }

  44. void love_display()
  45. {
  46.                 SCK=0;
  47.           RCK=0;
  48.                 MatrixLED_ShowColumn(0,0x30);
  49.                 MatrixLED_ShowColumn(1,0x78);
  50.                 MatrixLED_ShowColumn(2,0x7C);
  51.                 MatrixLED_ShowColumn(3,0x3E);
  52.                 MatrixLED_ShowColumn(4,0x7C);
  53.                 MatrixLED_ShowColumn(5,0x78);
  54.                 MatrixLED_ShowColumn(6,0x30);
  55.                 MatrixLED_ShowColumn(7,0x00);
  56.        
  57. }
  58. #define        P0        0        //休止符
  59. #define        L1        1        //低音L
  60. #define        L1_        2        //'_'表示升半音
  61. #define        L2        3
  62. #define        L2_        4
  63. #define        L3        5
  64. #define        L4        6
  65. #define        L4_        7
  66. #define        L5        8
  67. #define        L5_        9
  68. #define        L6        10
  69. #define        L6_        11
  70. #define        L7        12
  71. #define        M1        13        //中音M
  72. #define        M1_        14
  73. #define        M2        15
  74. #define        M2_        16
  75. #define        M3        17
  76. #define        M4        18
  77. #define        M4_        19
  78. #define        M5        20
  79. #define        M5_        21
  80. #define        M6        22
  81. #define        M6_        23       
  82. #define        M7        24
  83. #define        H1        25        //高音H
  84. #define        H1_        26
  85. #define        H2        27
  86. #define        H2_        28
  87. #define        H3        29
  88. #define        H4        30       
  89. #define        H4_        31
  90. #define        H5        32       
  91. #define        H5_        33
  92. #define        H6        34
  93. #define        H6_        35
  94. #define        H7        36

  95. #define SPEED                500        //宏定義四分音符時(shí)常為500ms

  96. unsigned int code AutoFreq[]={//基于C大調(diào)
  97.     0,//休止符
  98.     63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,//低音
  99.     64582,64633,64686,64732,64778,64820,64860,64898,64934,64968,65000,65032,//中音
  100.     65059,65085,65111,65134,65157,65178,65198,65217,65235,65252,65268,65284 //高音
  101. };
  102. //小星星樂譜
  103. unsigned char code Music1[] = {
  104.         //S1
  105.         M1, 4,
  106.         M1, 4,
  107.         M5, 4,
  108.         M5, 4,
  109.         //S2
  110.         M6, 4,
  111.         M6, 4,
  112.         M5, 4+4,
  113.         //S3
  114.         M4, 4,
  115.         M4, 4,
  116.         M3, 4,
  117.         M3, 4,
  118.         //S4
  119.         M2, 4,
  120.         M2, 4,
  121.         M1, 4+4,
  122.         //S5
  123.         M5, 4,
  124.         M5, 4,
  125.         M4, 4,
  126.         M4, 4,
  127.         //S6
  128.         M3, 4,
  129.         M3, 4,
  130.         M2, 4+4,
  131.         //S7
  132.         M5, 4,
  133.         M5, 4,
  134.         M4, 4,
  135.         M4, 4,
  136.         //S8
  137.         M3, 4,
  138.         M3, 4,
  139.         M2, 4+4,
  140.         //S9
  141.         M1, 4,
  142.         M1, 4,
  143.         M5, 4,
  144.         M5, 4,
  145.         //S10
  146.         M6, 4,
  147.         M6, 4,
  148.         M5, 4+4,
  149.         //S11
  150.         M4, 4,
  151.         M4, 4,
  152.         M3, 4,
  153.         M3, 4,
  154.         //S12
  155.         M2, 4,
  156.         M2, 4,
  157.         M1, 4+4,
  158.         //終止符
  159.         0xFF
  160. };


  161. //Music1《天空之城》
  162. unsigned char code Music2[]={                //(音高,時(shí)長(zhǎng))
  163. //1
  164.                 P0,4,P0,4,P0,4,M6,2,M7,2,                //每一行為一小節(jié),
  165.                 H1,4+2,M7,2,H1,4,H3,4,
  166.                 M7,4+4+4,M3,2,M3,2,       
  167. //2
  168.                 M6,4+2,M5,2,M6,4,H1,4,               
  169.                 M5,4+4+4,M3,4,               
  170.                 M4,4+2,M3,2,M4,4,H1,4,
  171. //3
  172.                 M3,4+4,P0,2,H1,2,H1,2,H1,2,               
  173.                 M7,4+2,M4_,2,M4_,4,M7,4,               
  174.                 M7,4+4,P0,4,M6,2,M7,2,
  175. //4
  176.                 H1,4+2,M7,2,H1,4,H3,4,               
  177.                 M7,4+4+4,M3,2,M3,2,               
  178.                 M6,4+2,M5,2,M6,4,H1,6,
  179. //5
  180.                 M5,4+4+4,M2,2,M3,2,               
  181.                 M4,4,H1,2,M7,2+2,H1,2+4,               
  182.                 H2,2,H2,2,H3,2,H1,2+4+4,
  183. //6
  184.                 H1,2,M7,2,M6,2,M6,2,M7,4,M5_,4,               
  185.                 M6,4+4+4,H1,2,H2,2,               
  186.                 H3,4+2,H2,2,H3,4,H5,4,
  187. //7
  188.                 H2,4+4+4,M5,2,M5,2,               
  189.                 H1,4+2,M7,2,H1,4,H3,4,               
  190.                 H3,4+4+4,
  191. //8
  192.                 M6,2,M7,2,H1,4,M7,4,H2,2,H2,2,               
  193.                 H1,4+2,M5,2+4+4,               
  194.                 H4,4,H3,4,H2,4,H1,4,       
  195. //9
  196.                 H3,4+4+4,H3,4,               
  197.                 H6,4+4,H5,4,H5,4,               
  198.                 H3,2,H2,2,H1,4+4,P0,2,H1,2,
  199. //10
  200.                 H2,4,H1,2,H2,2,H2,4,H5,4,               
  201.                 H3,4+4+4,H3,4,               
  202.                 H6,4+4,H5,4+4,
  203. //11
  204.                 H3,2,H2,2,H1,4+4,P0,2,H1,2,               
  205.                 H2,4,H1,2,H2,2+4,M7,4,               
  206.                 M6,4+4+4,M6,2,M7,2,
  207.        
  208.                 0xff //結(jié)束
  209. };
  210. //Music2
  211. unsigned char code Music3[]={                //(音高,時(shí)長(zhǎng))
  212. //1
  213.                 M1,2,M2,2,L6,2,L5,2,M5,6,M6,2,//每一行為一小節(jié),
  214.                 M3,2,M5,2,H1,2,M6,2,M5,8,
  215.                 M5,4,M6,2,M5,2,M3,2,M2,2,M3,4,
  216.                 M5,2,M3,2,L6,2,M1,2,M2,8,
  217. //2
  218.                 M2,2,M5,2,M3,2,M1,2,L6,4,L5,2,L6,2,
  219.                 M2,2,M6,2,M5,2,M6,2,M3,6,M2,2,
  220.                 M1,2,M2,1,M2,1,M3,2,M5,1,M5,1,H1,2,M6,2,M5,4,
  221. //3
  222.                 M5,2,L6,2,M1,2,M2,2,M4,6,M6,1,M6,1,
  223.                 M5,3,M6,1,M3,2,M2,2,M1,8,
  224.                 M1,8,P0,4,M5,2,M5,2,
  225.                 H1,8,H2,6,H1,2,
  226.                 M6,2,H1,2,M5,2,M7,2,M6,8,
  227. //4
  228.                 M5,4,M3,4,H1,4,M6,3,M6,1,
  229.                 M5,2,M6,2,M1,2,M2,2,M3,8,
  230.                 M3,4,M3,2,M5,2,M6,4,M6,2,H1,2,
  231.                 H2,4,H3,2,H1,2,H2,4+2,H1,2,
  232. //5
  233.                 H2,2,M3,2,M5,2,M6,2,M7,2,H2,1,H2,1,M6,2,M7,2,
  234.                 M5,16,
  235.                 H2,2,M7,2,M6,2,M5,2,M3,2,M5,1,M5,1,M6,2,H2,2,
  236.                 H1,16,
  237.                
  238.                         0xff //結(jié)束
  239. };



  240. void Key_Proc() {
  241.     static bit key_flag = 0;
  242.     static unsigned char MusicSelect = 0;

  243.     // 下一曲檢測(cè)
  244.     if (!KEY_NEXT) {
  245.         Delay(10); // 消抖
  246.         if (!KEY_NEXT && !key_flag) {
  247.             key_flag = 1;
  248.             if (++Index > 3) Index = 1;
  249.             MusicSelect = 0;
  250.         }
  251.     } else if (KEY_NEXT) {
  252.         key_flag = 0;
  253.     }

  254.     // 上一曲檢測(cè)
  255.     if (!KEY_PREV) {
  256.         Delay(10); // 消抖
  257.         if (!KEY_PREV && !key_flag) {
  258.             key_flag = 1;
  259.             if (--Index < 1) Index = 3;
  260.             MusicSelect = 0;
  261.         }
  262.     } else if (KEY_PREV) {
  263.         key_flag = 0;
  264.     }

  265.     // 暫停/繼續(xù)檢測(cè)
  266.     if (!KEY_PAUSE) {
  267.         Delay(10); // 消抖
  268.         if (!KEY_PAUSE) {
  269.             pause = !pause;

  270.             if (pause) {
  271.                 TR0 = 0;
  272.                 Buzzer = 0; // 關(guān)閉蜂鳴器
  273.             } else {
  274.                 TR0 = 1;
  275.             }
  276.         }
  277.         while (!KEY_PAUSE); // 等待按鍵釋放
  278.     }
  279. }
  280. void Autoplay() {
  281.     static unsigned char MusicSelect = 0;
  282.     static unsigned char lastIndex = 0;  // 新增索引跟蹤
  283.     const unsigned char *currentMusic=0;

  284.     // 歌曲切換時(shí)重置播放位置
  285.     if(Index != lastIndex) {
  286.         MusicSelect = 0;
  287.         lastIndex = Index;
  288.     }

  289.     // 選擇當(dāng)前歌曲
  290.     switch(Index) {
  291.         case 1: currentMusic = Music1; break;
  292.         case 2: currentMusic = Music2; break;
  293.         case 3: currentMusic = Music3; break;
  294.         default: return;
  295.     }

  296.     if(!pause) {
  297.         if(currentMusic[MusicSelect] != 0xff) {
  298.             FreqSelect = currentMusic[MusicSelect];
  299.             MusicSelect++;
  300.             Delay(SPEED/4 * currentMusic[MusicSelect]);
  301.             MusicSelect++;
  302.             
  303.             // 音符間隔處理
  304.             TR0 = 0;
  305.             Delay(5);
  306.             TR0 = 1;
  307.         } else {
  308.             MusicSelect = 0;  // 循環(huán)播放
  309.         }
  310.     } else
  311.                 {
  312.         TR0 = 0;
  313.         Buzzer = 0;
  314.     }
  315. }

  316. void Display() {
  317.     static unsigned char lastIndex = 0;
  318.     static bit lastPause = 0;
  319.     static unsigned int refreshCnt = 0;
  320.     if (++refreshCnt >= 1000||pause != lastPause || Index != lastIndex) {
  321.         refreshCnt = 0;
  322.                         EA=0;
  323.                         LCD1602_Clear(); // 清屏(已優(yōu)化延時(shí))
  324.         Delay(5);
  325.         if (pause) {
  326.             LCD1602_DispString(1, 1, "Paused       "); // 填充至16字符
  327.         } else {
  328.             switch(Index) {
  329.                 case 1:
  330.                     // 第1行:"Twinkle Twinkle"(16字符)
  331.                     LCD1602_DispString(1, 1, "Twinkle Twinkle");
  332.                     // 第2行:"Little Star    "(16字符,2個(gè)空格)
  333.                     LCD1602_DispString(2, 1, "Little Star    ");
  334.                     break;
  335.                 case 2:
  336.                     // 第1行:"Castle in the Sky"(16字符,修正空格)
  337.                     LCD1602_DispString(1, 1, "Castle in theSky");
  338.                     // 第2行留空
  339.                     LCD1602_DispString(2, 1, "                ");
  340.                     break;
  341.                 case 3:
  342.                     // 第1行:"My Motherland  "(16字符,2個(gè)空格)
  343.                     LCD1602_DispString(1, 1, "My Motherland  ");
  344.                     // 第2行留空
  345.                     LCD1602_DispString(2, 1, "                ");
  346.                     break;
  347.             }
  348.         }
  349.                                 EA=1;
  350.         lastIndex = Index;
  351.         lastPause = pause;
  352.     }
  353. }

  354. void Timer0Init(void)
  355. {
  356.     TMOD &= 0xF0;
  357.     TMOD |= 0x01;
  358. ……………………

  359. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

Keil5程序51hei附件下載:
大實(shí)驗(yàn).rar (62.76 KB, 下載次數(shù): 0)






歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美成人精品欧美一级 | 拍真实国产伦偷精品 | 国产一区二区在线免费播放 | 精品国偷自产在线 | 少妇性l交大片免费一 | 久久小视频 | 国产高清视频 | 国产精品免费播放 | 一区二区视频免费观看 | 9色网站 | 欧产日产国产精品视频 | 久久蜜桃av一区二区天堂 | 在线视频一区二区三区 | 亚洲欧美视频 | 我爱操| 国产网站在线免费观看 | 91社区在线观看高清 | 日韩精品久久一区二区三区 | 9色视频在线 | 国产成人精品一区二区三 | 亚洲小视频在线播放 | 成人免费网站 | 国产日韩欧美在线 | 欧美午夜视频 | 国内精品视频免费观看 | 国产精品乱码一区二区三区 | 91精品国产91久久久久久最新 | 久久香焦| 亚洲91精品| 天天操天天拍 | 国内精品在线视频 | 国产一区二区三区视频 | 密桃av| 国产精品一区视频 | 欧美激情一区二区三区 | 免费精品国产 | 中日韩av | 亚洲一区二区av | 欧美一二三区 | 综合色在线 | 91素人 |