找回密码
 立即注册

QQ登录

只需一步,快速开始

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

各位大佬求帮忙改改程序 可以帮忙把花样灯的程序去掉么,只保留播放和切换歌曲的功...

[复制链接]
跳转到指定楼层
楼主
ID:154324 发表于 2016-12-16 10:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

可以帮忙把花样灯的程序去掉么,只保留播放和切换歌曲的功能即可

  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit key1=P3^2;//按key1可切换花样
  5. sbit key2=P3^3;//按key2可切换歌曲
  6. sbit key3=P3^1;//总开关,用于总体控制花样灯跟歌曲。
  7. sbit fm=P3^7;//蜂鸣器连续到I/O口P3^7上
  8. //---------------------六种花样灯闪烁代码----------------------------------
  9. uchar code huayang1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,
  10.                                                 0xfd,0xfb,0xf7,0xef,0xdf,0xbf};//花样灯1
  11. uchar code huayang2[]={0x7f,0xfe,0xbf,0xfd,0xdf,0xfb,0xef,0xf7,
  12.                                                 0xef,0xfb,0xdf,0xfd,0xbf,0xfe};//花样灯2
  13. uchar code huayang3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x0,
  14.                                                 0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//花样灯3
  15. uchar code huayang4[]={0x3f,0x9f,0xcf,0xe7,0xf3,0xf9,0xfc,
  16.                         0xf9,0xf3,0xe7,0xcf,0x9f,0x3f};         //花样灯4
  17. uchar code huayang5[]={0x3f,0xfc,0x9f,0xf9,0xcf,0xf3,0xe7,
  18.                          0xcf,0xf3,0x9f,0xf9,0x3f,0xfc};  //花样灯5
  19. uchar code huayang6[]={0x55,0xaa,0xcc,0x33,0x99,0x66,0x0f,0xf0};  //花样灯6
  20. uchar count1;//花样标志        
  21. uchar count2;//歌曲标志        
  22. uchar timeh,timel,i;
  23. //---------------------------音乐代码---------------------------------------
  24. //音乐代码中,字节高位控制频率,即为音调。字节低位控制该音调持续的时间,
  25. //代表多少个十六分音符。
  26. //1-7代表中央C调,8-E代表高八度,0代表停顿
  27. //最后的0是结束标志即0xff。
  28. uchar code yldbwdx[]={         //月亮代表我的心
  29. 0x02,0x82,
  30. 0x16,0x32,0x54,0x02,0x52,
  31. 0xA6,0x32,0x54,0x02,0x52,
  32. 0x64,0x74,0xB6,0x64,
  33. 0x52,0x5C,0x32,0x22,
  34. 0x16,0x12,0x14,0x32,0x22,
  35. 0x16,0x12,0x14,0x22,0x32,
  36. 0x26,0x12,0x94,0x22,0x32,
  37. 0x2C,
  38. 0x32,0x52,
  39. 0x36,0x22,0x14,0x54,
  40. 0xAC,0x92,0xA2,
  41. 0x96,0xA2,0x96,0x82,
  42. 0x3C,0x54,
  43. 0x36,0x22,0x14,0x54,
  44. 0xAC,0x92,0xA2,
  45. 0x16,0x12,0x14,0x22,0x32,
  46. 0x2C,0x02,0x82,
  47. 0x16,0x32,0x56,0x12,
  48. 0xA6,0x32,0x56,0x52,
  49. 0x66,0x72,0xB6,0x62,
  50. 0x1C,                                                                                                                                                        
  51. 0xff//结束标志
  52. };
  53. uchar code kdqg[]={//康定情歌
  54. 0x64,0x84,0x92,0x91,0x81,0x93,0x61,0x54,0x62,
  55. 0x82,0x92,0x91,0x81,0x92,0x64,0x62,0x82,0x92,0x91,0x81,0x93,0x61,
  56. 0x54,0x82,0x62,0x51,0x61,0x51,0x41,0x52,0x24,0x92,0x54,0x82,0x64,0x52,
  57. 0x42,0x94,0x82,0x62,0x51,0x61,0x51,0x41,0x52,0x24,
  58. 0xff
  59. };
  60. uchar code lzh[]={//国歌
  61. 0x03,
  62. 0x04,0x04,0xc2,0x14,0x12,0x12,0x12,0x11,0x11,0xc2,0xd1,
  63. 0xe1,0x14,0x02,0x32,0x12,0x21,0x31,0x52,0x51,0x51,0x54,
  64. 0x32,0x31,0x31,0x12,0x11,0x31,0x52,0x51,0x31,0x24,0x24,
  65. 0x24,0x64,0x54,0x24,0x34,0x52,0x32,0x21,0x31,0x12,0x11,0x21,0x34,0x04,   
  66. 0x52,0x51,0xd1,0x12,0x12,0x32,0x31,0x31,0x52,0x51,0x51,0x22,0x22,0x22,
  67. 0xd2,0xd1,0x24,0x22,0xc2,0x14,0x12,0x34,0x32,0x32,0x54,0x54,0x54,0x54,
  68. 0x12,0x11,0x31,0x52,0x51,0x51,0x64,0x54,0x32,0x31,0x11,0x52,0x52,0x52,
  69. 0x32,0x02,0x12,0x02,0xc4,0x14,
  70. 0xa2,0xa1,0x11,0x52,0x52,0x52,0x32,0x02,0x12,0x02,
  71. 0xc4,0x14,0xc4,0x14,0xc4,0x14,0x14,0x04,
  72. 0x04,0x04,0x04,0x04,
  73. 0xff
  74. };
  75. uchar code jmszl[]={ //寂寞沙洲冷
  76. 0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,
  77. 0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14,
  78. 0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0x08,0x28,
  79. 0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52,
  80. 0x51,0x51,0x31,0x32,0x31,0x32,0x81,0x72,0x63,
  81. 0x62,0x71,0x81,0x72,0x61,0x61,0x52,0x31,0x21,0x32,0x51,0x54,
  82. 0x22,0x12,0x11,0x12,0x11,0x12,0x12,0x14,0x26,0x32,0x26,
  83. 0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,
  84. 0x02,0x32,0x81,0x81,0x81,0x81,0x62,0x52,0x34,                                                                                                                          
  85. 0x31,0x81,0x81,0x81,0x61,0x91,0x82,
  86. 0x51,0x51,0x51,0x51,0x31,0x61,0x53,
  87. 0x21,0x11,0x21,0x11,0x22,0x11,0x21,0x26,
  88. 0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x52,
  89. 0x31,0x31,0x81,0x81,0x81,0x61,0x91,0x81,0x61,0x31,0x56,
  90. 0x32,0x32,0x81,0x81,0x81,0x81,0x91,0x81,0x61,0x81,0x61,0x51,0x31,0x51,0x34,
  91. 0x21,0x31,0x51,0x31,0x21,0x11,0x61,0x21,0x16,
  92. 0xff};
  93. uchar code qnzl[]={         //千年之恋
  94. 0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0x08,
  95. 0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,
  96. 0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,
  97. 0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,
  98. 0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,
  99. 0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,
  100. 0x31,0x51,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7C,0x02,
  101. 0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,
  102. 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,
  103. 0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,
  104. 0x42,0x63,0x83,0x83,0x91,0x91,
  105. 0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,
  106. 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,
  107. 0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,
  108. 0x42,0x82,0x88,0x02,0x74,0x93,0x89,
  109. 0xff};
  110. //----------------------------不同音调对应的定时器初值---------------------------
  111. //适合11.0592M的晶振
  112. uchar code chuzhi[]={
  113.          0xff,0xff,//占位
  114.          0xFC,0x8E,//中央C调1-7
  115.          0xFC,0xED,        
  116.          0xFD,0x43,        
  117.          0xFD,0x6A,        
  118.          0xFD,0xB3,        
  119.          0xFD,0xF3,        
  120.          0xFE,0x2D,
  121.          0xFE,0x47,        //高八度1-7         
  122.          0xFE,0x76,
  123.          0xFE,0xA1,
  124.          0xFE,0xC7,        
  125.          0xFE,0xD9,
  126.          0xFE,0xF9,
  127.          0xFF,0x16
  128.          };
  129. uchar yinyue[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x0,0x0};
  130. //将音调转化为对应的LED样式
  131. void delay1(uint z);        //延时1MS
  132. void delay(uint z);        //延时165MS,即十六分音符
  133. void song();
  134. void beep();//蜂鸣器叫一声
  135. //------------------------主函数---------------------------------------
  136. main()
  137. {        uchar x;
  138.     count1=0;//流水灯无花样
  139.         count2=1;//唱第一首歌
  140.         EA=1;//开总中断
  141.         EX0=1;//开外部中断0
  142.         IT0=1;//外部中断0下降沿触发方式
  143.         EX1=1;//开外部中断1
  144.         IT1=1;//外部中断1下降沿触发方式
  145.         TMOD=0x01;//定时器0工作在方式1
  146.         TH0=0;
  147.         TL0=0;
  148.         ET0=1;
  149.         
  150.         while(1)   
  151.                 {
  152.                 if(count1!=0)
  153.                 {
  154.                         switch(count1)
  155.                         {
  156.                                 case 1:
  157.                                         for(x=0;x<14;x++)
  158.                                         {  if(key3==1)
  159.                                                 {P1=0xff;
  160.                                                 fm=0;
  161.                                                 break;}
  162.                                                 P1=huayang1[x];
  163.                                                 beep();
  164.                                                 delay1(300);                                                
  165.                                                 if(count1!=1)
  166.                                                         break;        
  167.                                         }
  168.                                 break;
  169.                                 case 2:
  170.                                         for(x=0;x<14;x++)
  171.                                         {        if(key3==1)
  172.                                                 {P1=0xff;
  173.                                                 fm=0;
  174.                                                 break;}
  175.                                                 P1=huayang2[x];
  176.                                                 beep();
  177.                                                 delay1(300);                                                
  178.                                                 if(count1!=2)
  179.                                                         break;        
  180.                                         }
  181.                                 break;
  182.                                 case 3:
  183.                                         for(x=0;x<16;x++)
  184.                                         {        if(key3==1)
  185.                                                 {P1=0xff;
  186.                                                 fm=0;
  187.                                                 break;}
  188.                                                 P1=huayang3[x];
  189.                                                 beep();
  190.                                                 delay1(300);                                                
  191.                                                 if(count1!=3)
  192.                                                         break;        
  193.                                         }
  194.                                 break;
  195.                                 case 4:
  196.                                         for(x=0;x<13;x++)
  197.                                         {        if(key3==1)
  198.                                                 {P1=0xff;
  199.                                                 fm=0;
  200.                                                 break;}
  201.                                                 P1=huayang4[x];
  202.                                                 beep();
  203.                                                 delay1(300);                                                
  204.                                                 if(count1!=4)
  205.                                                         break;        
  206.                                         }
  207.                                 break;
  208.                                 case 5:
  209.                                         for(x=0;x<13;x++)
  210.                                         {  if(key3==1)
  211.                                                 {P1=0xff;
  212.                                                 fm=0;
  213.                                                 break;}
  214.                                                 P1=huayang5[x];
  215.                                                 beep();
  216.                                                 delay1(300);                                                
  217.                                                 if(count1!=5)
  218.                                                         break;        
  219.                                         }
  220.                                 break;
  221.                                 case 6:
  222.                                         for(x=0;x<8;x++)
  223.                                         {         if(key3==1)
  224.                                                 {P1=0xff;
  225.                                                 fm=0;
  226.                                                 break;}
  227.                                                 P1=huayang6[x];
  228.                                                 beep();
  229.                                                 delay1(300);                                       
  230.                                                 if(count1!=6)
  231.                                                         break;
  232.                                         } break;
  233.                                                         
  234.                         }
  235.                 }
  236.                 //else
  237.                 if(count1==0)
  238.                 {
  239.                         song();
  240.                         delay1(1000);                        
  241.                 }                 
  242.          }
  243.     }        
  244. void int0() interrupt 0
  245. {
  246.         EA=0;//关总中断
  247.         delay1(1);//去抖
  248.         if(key1==0)
  249.         {
  250.                 count2=0;//不让蜂鸣器唱歌
  251.                 TR0=0;
  252.                 count1++;
  253.                 if(count1==7)
  254.                          count1=1;
  255.         }
  256.         EA=1;//开总中断
  257. }
  258. void int1() interrupt 2
  259. {
  260.         EA=0;//关总中断
  261.         delay1(1);//去抖
  262.         if(key2==0)
  263.         {
  264.                 count1=0;//流水灯无花样
  265.                 TR0=1;
  266.                 i=0;//从头开始唱
  267.                 count2++;
  268.                 if(count2==6)
  269.                          count2=1;
  270.         }
  271.         EA=1;//开总中断
  272. }
  273. void timer0() interrupt 1         //用于产生各种音调
  274. {
  275.         TH0=timeh;
  276.         TL0=timel;
  277.         fm=~fm;
  278. }
  279. //-----------------------子函数--------------------------------------
  280. void beep()        //蜂鸣器叫一声
  281. {        uchar i;
  282.         for(i=0;i<50;i++)
  283.         {        fm=~fm;
  284.                 delay1(1);
  285.         }
  286.         fm=1;
  287. }
  288. void delay(uint z)        //延时165MS,即十六分音符
  289. {        uint x,y;
  290.         for(x=z;x>0;x--)
  291.                  for(y=19000;y>0;y--);
  292. }
  293. void delay1(uint z)        //延时1MS
  294. {        uint x,y;
  295.         for(x=z;x>0;x--)
  296.                  for(y=112;y>0;y--);
  297. }
  298. void song()
  299. {
  300.         uint temp;
  301.         uchar jp;//jp是简谱
  302.         i=0;
  303.         while(1)
  304.         {        if(count2==0)
  305.                 {        
  306.                         break;
  307.                 }
  308.                 if(key3==1)
  309.                         {P1=0xff;
  310.                          fm=0;
  311.                          break;}
  312.                 if(count2==1)         //conut2==1选择月亮代表我的心
  313.                          temp=yldbwdx[i];
  314.                 if(count2==2)         //count2==2选择寂寞沙洲冷
  315.                         temp=jmszl[i];
  316.                 if(count2==3)         //count2==3选择千年之恋
  317.                         temp=qnzl[i];
  318.             if(count2==4)         //count2==4康定情歌
  319.                         temp=kdqg[i];
  320.                 if(count2==5)         //count2==5国歌
  321.                         temp=lzh[i];
  322.                 if(temp==0xff)          //到0xff一首歌曲结束
  323.                         break;        
  324.                 jp=temp/16; //取数的高4位
  325.                 P1=yinyue[jp];
  326.                 if(jp!=0)
  327.                 {
  328.                 timeh=chuzhi[jp*2];
  329.                 timel=chuzhi[jp*2+1];
  330.                 }
  331.                 else
  332.                 {
  333.                 TR0=0;
  334.                 fm=0;//关蜂鸣器
  335.                 }
  336.                 delay(temp%16); //取数的低4位
  337.                 TR0=0;         
  338.                 fm=1;
  339.                 delay1(10);          //唱完一个音停10MS
  340.                 TR0=1;
  341.                 i++;
  342.             }
  343.         TR0=0;
  344.         fm=1;
  345.         
  346. }
复制代码

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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