找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4839|回复: 8
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主




  1. /***********************************************************************
  2.       
  3.            内容:LCD1602音乐播放器
  4.            作者:QQ:1181826414
  5.            交流:http://www.51hei.com/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. }

复制代码


资料下载:
1602音乐播放器(带仿真).zip (122.97 KB, 下载次数: 83)

评分

参与人数 2黑币 +95 收起 理由
xpg223 + 5 很给力!
admin + 90 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

9#
ID:318629 发表于 2018-6-23 14:33 | 只看该作者
如何让它演奏音乐的同时,LCD进行滚动?
回复

使用道具 举报

8#
ID:336959 发表于 2018-5-25 08:07 | 只看该作者
学习了  谢谢楼主
回复

使用道具 举报

7#
ID:318157 发表于 2018-5-25 00:55 | 只看该作者
这个lcd1602怎么什么都没有显示
回复

使用道具 举报

6#
ID:176643 发表于 2018-5-21 00:00 来自手机 | 只看该作者
谢谢楼主分享!!!
回复

使用道具 举报

5#
ID:243748 发表于 2018-5-20 22:46 来自手机 | 只看该作者
好资料
回复

使用道具 举报

地板
ID:329794 发表于 2018-5-20 00:14 | 只看该作者
经过修改之后,编译无错误,运行的很流畅,感谢楼主提供源代码,谢谢!请问如果再增加两个按钮,比如上一曲或者歌曲复位怎么做?
回复

使用道具 举报

板凳
ID:249808 发表于 2018-5-9 09:35 | 只看该作者
学习了……
回复

使用道具 举报

沙发
ID:150898 发表于 2016-12-10 09:59 来自手机 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表