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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5744|回復: 8
收起左側

LCD1602音樂播放器資料分享(含仿真和C程序)!

[復制鏈接]
ID:102056 發表于 2016-12-8 22:45 | 顯示全部樓層 |閱讀模式
世上只有媽媽好.png 歡樂頌.png
新年好.png
童年.png

  1. /***********************************************************************
  2.       
  3.            內容:LCD1602音樂播放器
  4.            作者:QQ:1181826414
  5.            交流:http://www.zg4o1577.cn/bbs/mcu-h24-1.html

  6. ***********************************************************************/
  7. #include<reg52.h>
  8. #define        uint unsigned int
  9. #define uchar unsigned char      
  10. /*------------------------------------------------
  11.                  硬件端口位定義
  12. ------------------------------------------------*/
  13. sbit BEEP=P2^0;  //定義音樂輸出端口
  14. sbit key1=P3^2; //定義按鍵 用于 暫停和播放
  15. sbit key2=P3^3; //定義按鍵 用于 切換歌曲

  16. sbit RS=P2^1;            
  17. sbit RW=P2^2;            
  18. sbit EN=P2^3;

  19. void Delayms(uint ValMS)
  20. {
  21.         uchar uiVal;
  22.         while(ValMS--)
  23.         {
  24.                  for(uiVal=0;uiVal<120;uiVal++);
  25.         }
  26. }
  27. /* ***************************************************** */
  28. // 函數名稱:Busy_Check()
  29. // 函數功能:液晶遇忙檢測
  30. // 入口參數:無
  31. // 出口參數:無
  32. /* ***************************************************** */
  33. uchar Busy_Check()
  34. {
  35. uchar LCD_Status;
  36.         RS = 0;
  37.         RW = 1;
  38.     EN = 1;
  39.     Delayms(1);
  40.            LCD_Status = P0;
  41.         EN = 0;
  42.         return LCD_Status;
  43. }
  44. /* ***************************************************** */
  45. // 函數名稱:write_com()
  46. // 函數功能:向液晶寫命令
  47. // 入口參數:命令(ComVal)
  48. // 出口參數:無
  49. /* ***************************************************** */
  50. void write_com(uchar com)
  51. {
  52. RS=0;
  53. RW=0;
  54. EN=0;
  55. P0=com;
  56. Delayms(2);
  57. EN=1;
  58. Delayms(2);
  59. EN=0;
  60. Delayms(2);
  61. }
  62. /* ***************************************************** */
  63. // 函數名稱:write_dat()
  64. // 函數功能:向液晶寫數據
  65. // 入口參數:數據(DatVal)
  66. // 出口參數:無
  67. /* ***************************************************** */
  68. void write_dat(uchar dat)
  69. {
  70. RS=1;
  71. RW=0;
  72. EN=0;
  73. P0=dat;
  74. Delayms(2);
  75. EN=1;
  76. Delayms(2);
  77. EN=0;
  78. Delayms(2);
  79. }


  80. /* ***************************************************** */
  81. // 函數名稱:init_1602()
  82. // 函數功能:液晶初始化
  83. // 入口參數:無
  84. // 出口參數:無
  85. /* ***************************************************** */
  86. void init_1602()
  87. {
  88. write_com(0x38);
  89. write_com(0x01);
  90. write_com(0x06);
  91. write_com(0x0c);
  92. }

  93. void write_zfc(uchar *p)
  94. {
  95.   while(*p!=0)
  96.   write_dat(*p++);
  97. }





  98. unsigned char W=0,T;        //用于選擇音樂

  99. unsigned char Timer0_H,Timer0_L,Time;



  100.                          //世上只有媽媽好 數據表        音譜,高中低音,音長
  101. code unsigned char MUSIC[102]={       6,2,3,      5,2,1,      3,2,2,    5,2,2,    1,3,2,    6,2,1,    5,2,1,
  102.                                       6,2,4,      3,2,2,      5,2,1,    6,2,1,           5,2,2,         3,2,2,           1,2,1,
  103.                                       6,1,1,      5,2,1,      3,2,1,         2,2,4,           2,2,3,         3,2,1,    5,2,2,
  104.                                       5,2,1,      6,2,1,      3,2,2,         2,2,2,    1,2,4,         5,2,3,           3,2,1,
  105.                                       2,2,1,      1,2,1,      6,1,1,         1,2,1,           5,1,6,         0,0,0
  106.                                       };


  107.                                                 //送別 數據表        音譜,高中低音,音長
  108. code unsigned char MUSIC1[174]={        5,2,2,                3,2,1,                5,2,1,                1,3,4,       
  109.                                                                         6,2,2,                1,3,2,                5,2,4,
  110.                                                                         5,2,2,                1,2,1,                2,2,1,                3,2,2,                2,2,1,                1,2,1,
  111.                                                                         2,2,8,
  112.                                                                         5,2,2,                3,2,1,                5,2,1,                1,3,3,                7,2,1,
  113.                                                                         6,2,2,                1,3,2,                5,2,4,
  114.                                                                         5,2,2,                2,2,1,                3,2,1,                4,2,3,                7,1,1,
  115.                                                                         1,2,8,
  116.                                                                         6,2,2,                1,3,2,                1,3,4,
  117.                                                                         7,2,2,                6,2,1,                7,2,1,                1,3,4,
  118.                                                                         6,2,1,                7,2,1,                1,3,1,                6,2,1,                6,2,1,                5,2,1,                3,2,1,                1,2,1,
  119.                                                                         2,2,8,
  120.                                                                         5,2,2,                3,2,1,                5,2,1,                1,3,3,                7,2,1,
  121.                                                                         6,2,2,                1,3,2,                5,2,4,
  122.                                                                         5,2,2,                2,2,1,                3,2,1,                4,2,3,                7,1,1,
  123.                                                                         1,2,8
  124.                                                                 };


  125.                                                 //新年好 數據表        音譜,高中低音,音長
  126. code unsigned char MUSIC2[90]={                1,2,1,                1,2,1,                1,2,2,                5,1,2,
  127.                                                                         3,2,1,                3,2,1,                3,2,2,                1,2,2,
  128.                                                                         1,2,1,                3,2,1,                5,2,2,                5,2,2,
  129.                                                                         4,2,1,                3,2,1,                2,2,4,
  130.                                                                         2,2,1,                3,2,1,                4,2,2,                4,2,2,
  131.                                                                         3,2,1,                2,2,1,                3,2,2,                1,2,2,
  132.                                                                         1,2,1,                3,2,1,                2,2,2,                5,1,2,
  133.                                                                         7,1,1,                2,2,1,                1,2,4
  134.                                                                 };


  135.                                                 //童年 數據表        音譜,高中低音,音長
  136. code unsigned char MUSIC3[423]={        5,1,1,                5,1,1,                3,1,1,                5,1,2,                3,1,1,                5,1,2,
  137.                                                                         6,1,1,                6,1,1,                1,2,1,                6,1,2,                6,1,1,                1,2,2,
  138.                                                                         2,2,1,                2,2,1,                3,2,1,                2,2,2,                5,1,1,                6,1,1,                5,1,1,
  139.                                                                         1,2,1,                1,2,1,                5,1,1,                1,2,1,                1,2,1,                1,2,2,                1,2,1,
  140.                                                                         1,2,1,                5,1,2,                1,2,1,                6,1,1,                5,1,1,                3,1,1,                2,1,1,
  141.                                                                         1,1,2,                3,1,1,                5,1,1,                5,1,2,                5,1,1,                3,1,1,
  142.                                                                         6,1,1,                6,1,1,                1,2,1,                6,1,1,                6,1,1,                6,1,1,                6,1,1,                5,1,1,
  143.                                                                         1,2,2,                1,2,1,                1,2,1,                1,2,1,                6,1,1,                1,2,1,                6,1,1,
  144.                                                                         5,1,2,                0,2,1,                3,1,1,                6,1,1,                1,2,1,                6,1,1,                5,1,1,
  145.                                                                         3,1,1,                2,1,1,                3,1,1,                5,1,1,                5,1,2,                5,1,1,                3,1,1,
  146.                                                                         6,1,1,                6,1,1,                1,2,1,                6,1,1,                6,1,1,                6,1,1,                6,1,1,                5,1,1,
  147.                                                                         1,2,2,                1,2,1,                1,2,1,                1,2,1,                6,1,1,                6,1,1,                1,2,1,
  148.                                                                         2,2,2,                0,2,1,                5,1,1,                2,2,1,                5,2,1,                2,2,2,
  149.                                                                         5,2,1,                5,2,2,                5,2,1,                5,2,1,                5,2,1,                3,2,1,                2,2,1,
  150.                                                                         1,2,1,                1,2,2,                6,1,1,                6,1,1,                1,2,1,                6,1,1,                1,2,1,
  151.                                                                         2,2,1,                2,2,1,                2,2,1,                2,2,1,                2,2,1,                1,2,1,                3,2,1,                2,2,1,
  152.                                                                         2,2,8,
  153.                                                                         3,2,1,                3,2,2,                3,2,1,                3,2,2,                2,2,2,
  154.                                                                         1,2,1,                1,2,2,                1,2,1,                2,2,1,                1,2,1,                6,1,1,                5,1,1,
  155.                                                                         5,1,1,                5,1,2,                5,1,1,                6,1,1,                5,1,1,                2,2,1,                3,2,1,
  156.                                                                         1,2,8,
  157.                                                                         1,2,1,                5,1,2,                1,2,1,                6,1,1,                5,1,1,                3,1,1,                2,1,1,
  158.                                                                         1,2,6,                0,2,2
  159.                                                           };


  160.                          // 音階頻率表 高八位
  161. code unsigned char FREQH[]={
  162.                                 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
  163.                                 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
  164.                                 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
  165.                                 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
  166.                                } ;
  167.                          // 音階頻率表 低八位
  168. code unsigned char FREQL[]={
  169.                                  0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
  170.                                  0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
  171.                                  0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
  172.                                  0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
  173.                                 };

  174. /*------------------------------------------------
  175.                 節拍延時函數
  176. 各調1/4節拍時間:
  177. 調4/4  125ms
  178. 調2/4  250ms
  179. 調3/4  187ms
  180. ------------------------------------------------*/
  181. void delay(uchar t)
  182. {
  183.     uchar i;
  184.         for(i=0;i<t;i++)
  185.         Delayms(250);
  186.     TR0=0;
  187. }
  188. /*------------------------------------------------
  189.                定時器0中斷
  190. ------------------------------------------------*/
  191. void TIM0_ISR() interrupt 1
  192. {
  193.         TR0=0;      
  194.         BEEP=!BEEP;
  195.         TH0=Timer0_H;
  196.         TL0=Timer0_L;
  197.         TR0=1;
  198. }
  199. /*------------------------------------------------
  200.                 歌曲處理函數
  201. ------------------------------------------------*/
  202. void Song()
  203. {
  204.         TH0=Timer0_H;//賦值定時器時間,決定頻率
  205.         TL0=Timer0_L;
  206.         TR0=1;       //打開定時器
  207.         delay(Time); //延時所需要的節拍                     
  208. }
  209. /*------------------------------------------------
  210.                 主函數
  211. ------------------------------------------------*/
  212. void led(unsigned char a);

  213. void main(void)
  214. {
  215.         unsigned int i;
  216.         unsigned char k;
  217.         TMOD|=0x01; //置定時器0工作方式1
  218.         EA=1;       //打開全局中斷
  219.         ET0=1;      //打開 定時器0 中斷

  220.         EX0=1;                //打開 外部中斷0 中斷
  221.         IT0=1;                //設置為下降沿中斷

  222.         EX1=1;                //打開 外部中斷1 中斷
  223.         IT1=1;                //設置為下降沿中斷
  224.         PX1=1;                //設置 外部中斷1 為高優先級
  225.         init_1602();
  226.        
  227.         while(1)
  228.     {  
  229.                 //i=0;
  230.                
  231.                 if(W==0)
  232.                 {  
  233.                         T=W;
  234.                         write_com(0x81);
  235.                         write_zfc("shishangziyou");
  236.                         write_com(0xc4);
  237.                         write_zfc("mamahao");
  238.                 for(i=0;i<100;i=i+3)
  239.                     {         //音樂數組長度 ,唱完從頭再來
  240.                                 led(MUSIC[i]);
  241.                 
  242.                     k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振蕩頻率所需數據
  243.                     Timer0_H=FREQH[k];
  244.                     Timer0_L=FREQL[k];
  245.                     Time=MUSIC[i+2];          //節拍時長
  246.                    // i=i+3;
  247.                     Song();
  248.                                 if(T!=W)
  249.                                         break;
  250.                 }
  251.                 }
  252.                

  253.                 if(W==1)
  254.                 {  
  255.                         T=W;
  256.                         write_com(0x01);
  257.                         write_com(0x80);
  258.                         write_zfc("   songbie   ");
  259.                 for(i=0;i<174;i=i+3)
  260.                     {         //音樂數組長度 ,唱完從頭再來
  261.                                 led(MUSIC1[i]);
  262.                 
  263.                     k=MUSIC1[i]+7*MUSIC1[i+1]-1;//去音符振蕩頻率所需數據
  264.                     Timer0_H=FREQH[k];
  265.                     Timer0_L=FREQL[k];
  266.                     Time=MUSIC1[i+2];          //節拍時長
  267.                    // i=i+3;
  268.                     Song();
  269.                                 if(T!=W)
  270.                                         break;
  271.                 }
  272.                 }


  273.                 if(W==2)
  274.                 {  
  275.                         T=W;
  276.                         write_com(0x80);
  277.                         write_zfc("   xinnianhao ");
  278.                 for(i=0;i<90;i=i+3)
  279.                     {         //音樂數組長度 ,唱完從頭再來
  280.                                 led(MUSIC2[i]);
  281.                 
  282.                     k=MUSIC2[i]+7*MUSIC2[i+1]-1;//去音符振蕩頻率所需數據
  283.                     Timer0_H=FREQH[k];
  284.                     Timer0_L=FREQL[k];
  285.                     Time=MUSIC2[i+2];          //節拍時長
  286.                    // i=i+3;
  287.                     Song();
  288.                                 if(T!=W)
  289.                                         break;
  290.                 }
  291.                 }

  292.                
  293.                 if(W==3)
  294.                 {  
  295.                         T=W;
  296.                         write_com(0x80);
  297.                         write_zfc("   tongnian  ");
  298.                 for(i=0;i<423;i=i+3)
  299.                     {         //音樂數組長度 ,唱完從頭再來
  300.                                 led(MUSIC3[i]);
  301.                 
  302.                     k=MUSIC3[i]+7*MUSIC3[i+1]-1;//去音符振蕩頻率所需數據
  303.                     Timer0_H=FREQH[k];
  304.                     Timer0_L=FREQL[k];
  305.                     Time=MUSIC3[i+2];          //節拍時長
  306.                    // i=i+3;
  307.                     Song();
  308.                                 if(T!=W)
  309.                                         break;
  310.                 }
  311.                 }

  312.      }
  313. }


  314. // 頻譜函數
  315. void led(unsigned char a)       
  316. {
  317.         switch(a)
  318.         {
  319.                 case 0:P1=0xff;break;
  320.                 case 1:P1=0x7f;break;
  321.                 case 2:P1=0x7e;break;
  322.                 case 3:P1=0x7c;break;
  323.                 case 4:P1=0x78;break;
  324.                 case 5:P1=0x70;break;
  325.                 case 6:P1=0x60;break;
  326.                 case 7:P1=0x40;break;
  327.                 case 8:P1=0x00;break;
  328.         }

  329. }


  330. //        外部中斷0 中斷服務程序        用于暫停
  331. void zhongduan0() interrupt 0
  332. {   
  333.            Delayms(5);        //按鍵去抖
  334.         if(!key1)
  335.         {
  336.                 while(!key1);        //松手檢測
  337.                 while(key1&&T==W);        //檢測按鍵是否按下
  338.                 Delayms(5);        //按鍵去抖
  339.                 while(key1&&T==W);        //檢測按鍵是否按下
  340.                 while(!key1&&T==W);        //松手檢測
  341.         }
  342. }


  343. //        外部中斷1 中斷服務程序
  344. void zhongduan1() interrupt 2
  345. {   
  346.     Delayms(5);        //按鍵去抖
  347.         if(!key2)
  348.         {
  349.                 if(W==3)
  350.                         W=0;
  351.                 else
  352.                         W++;
  353.                 while(!key2);        //松手檢測
  354.                  Delayms(500);
  355.                
  356.         }
  357. }

復制代碼
0.png

資料下載:
1602音樂播放器(帶仿真).zip (122.97 KB, 下載次數: 85)

評分

參與人數 2黑幣 +95 收起 理由
xpg223 + 5 很給力!
admin + 90 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:150898 發表于 2016-12-10 09:59 來自手機 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

ID:249808 發表于 2018-5-9 09:35 | 顯示全部樓層
學習了……
回復

使用道具 舉報

ID:329794 發表于 2018-5-20 00:14 | 顯示全部樓層
經過修改之后,編譯無錯誤,運行的很流暢,感謝樓主提供源代碼,謝謝!請問如果再增加兩個按鈕,比如上一曲或者歌曲復位怎么做?
回復

使用道具 舉報

ID:243748 發表于 2018-5-20 22:46 來自手機 | 顯示全部樓層
好資料
回復

使用道具 舉報

ID:176643 發表于 2018-5-21 00:00 來自手機 | 顯示全部樓層
謝謝樓主分享!!!
回復

使用道具 舉報

ID:318157 發表于 2018-5-25 00:55 | 顯示全部樓層
這個lcd1602怎么什么都沒有顯示
回復

使用道具 舉報

ID:336959 發表于 2018-5-25 08:07 | 顯示全部樓層
學習了  謝謝樓主
回復

使用道具 舉報

ID:318629 發表于 2018-6-23 14:33 | 顯示全部樓層
如何讓它演奏音樂的同時,LCD進行滾動?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区免费 | 玖草资源 | 久久99精品久久久水蜜桃 | 久久精品视频在线观看 | 亚洲视频在线观看免费 | 久草精品视频 | 成人久久视频 | 中国大陆高清aⅴ毛片 | 国产乱码精品一区二区三区av | 久久久久国产精品午夜一区 | 色婷婷一区 | 亚洲精品乱码久久久久久9色 | 亚洲最大的成人网 | 亚洲36d大奶网 | 国产一级片在线播放 | 久久青视频 | 久热免费在线 | 国产免费一区二区 | 91看片在线观看 | av一级毛片| 伊人成人免费视频 | 第一区在线观看免费国语入口 | 成人性生交大片免费看r链接 | 国产毛片久久久久久久久春天 | 每日更新av | 做a视频 | 国产一区二区在线免费观看 | 午夜激情国产 | 精品久久久久久久人人人人传媒 | 亚洲精品日韩在线 | 午夜男人视频 | 中文字幕在线一区 | 国产欧美一区二区三区日本久久久 | 国产丝袜人妖cd露出 | 欧美激情久久久 | 免费av观看 | 99综合| 久久精品视频一区二区三区 | 国产一区精品 | 久久久久久久久久久蜜桃 | 一区二区免费视频 |