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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機八音盒程序不能播放歌曲

[復制鏈接]
跳轉到指定樓層
樓主
這個跑馬燈音樂盒為啥不能播放歌曲
  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 fm=P3^5;//蜂鳴器連續的IO口,接蜂鳴器的管腳
  7. //sbit fm=P3^6;
  8. uchar code huayang1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,
  9.                          0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e};                                //花樣1
  10. uchar code huayang2[]={0x7f,0xfe,0xbf,0xfd,0xdf,0xfb,0xef,0xf7,0xef,0xfb,0xdf,0xfd,0xbf,0xfe};              //花樣2
  11. uchar code huayang3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x0,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0x00};//花樣3
  12. uchar code huayang4[]={ 0x3f,0xcf,0xf3,0xfc,0xfc,0xf3,0xcf,0x3f,0x3f,0xf3,0xcf,0xfc,0x3f,0xf3,0xcf,0xfc};    //花樣4
  13. uchar code huayang5[]={ 0xff,0x00,0xff,0x00,0xf0,0x0f,0xf0,0x0f,0xf0,0x0f,0xf0,0x0f};                        //花樣5
  14.                                                                                                                                                                         
  15. uchar count1;//花樣標志        
  16. uchar count2;//歌曲標志        
  17. uchar timeh,timel,i;                                                                 
  18. //---------------------------簡譜---------------------------------------
  19. //編程規則:字節高位是簡譜,低位是持續時間,代表多少個十六分音符。
  20. //1-7代表中央C調,8-E代表高八度,0代表停頓
  21. //最后的0是結束標志
  22. uchar code qnzl[]={         //        歌曲1
  23. 0xA1,0xA1,0xA1,0xA1,0x32,0x31,0x21,0x32,0x62,
  24. 0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0x32,0x22,
  25. 0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,
  26. 0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,
  27. 0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,
  28. 0x31,0x51,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7C,0x02,
  29. 0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,
  30. 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,
  31. 0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,
  32. 0x42,0x63,0x83,0x83,0x91,0x91,
  33. 0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,
  34. 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,
  35. 0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,
  36. 0x42,0x82,0x88,0x02,0x74,0x93,0x89,
  37. 0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,
  38. 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,
  39. 0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,
  40. 0x42,0x63,0x83,0x83,0x91,0x91,
  41. 0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,
  42. 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,
  43. 0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,
  44. 0x42,0x82,0x88,0x02,0x74,0x93,0x89,
  45. 0xff};//結束標志
  46. uchar code jmszl[]={ // 歌曲二
  47. 0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,
  48. 0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14,
  49. 0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,
  50. 0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52,
  51. 0x51,0x51,0x31,0x32,0x31,0x32,0x81,0x72,0x63,
  52. 0x62,0x71,0x81,0x72,0x61,0x61,0x52,0x31,0x21,0x32,0x51,0x54,
  53. 0x22,0x12,0x11,0x12,0x11,0x12,0x12,0x14,0x26,0x32,0x26,
  54. 0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,
  55. 0x02,0x32,0x81,0x81,0x81,0x81,0x62,0x52,0x34,                                                                                                                                 
  56. 0x31,0x81,0x81,0x81,0x61,0x91,0x82,
  57. 0x51,0x51,0x51,0x51,0x31,0x61,0x53,        
  58. 0x21,0x11,0x21,0x11,0x22,0x11,0x21,0x26,
  59. 0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x52,
  60. 0x31,0x31,0x81,0x81,0x81,0x61,0x91,0x81,0x61,0x31,0x56,
  61. 0x32,0x32,0x81,0x81,0x81,0x81,0x91,0x81,0x61,0x81,0x61,0x51,0x31,0x51,0x34,
  62. 0x21,0x31,0x51,0x31,0x21,0x11,0x61,0x21,0x16,
  63. 0xff};
  64. uchar code song1 []=   //歌曲三
  65. {
  66. 0x34,0x32,0x32,0x34,0x42,0x51,
  67. 0x62,0x52,0x42,0x32,0x34,0x04,
  68. 0x74,0x74,0x62,0x62,0x64,
  69. 0x3c,0x04,
  70. 0x64,0x62,0x52,0x42,0x32,0x34,
  71. 0x33,0x31,0x32,0x72,0x76,0x72,
  72. 0x83,0x81,0x82,0x82,0x82,0x74,0x72,
  73. 0x7c,0x04,
  74. 0x63,0x61,0x62,0x62,0x64,0x72,0x82,
  75. 0x72,0x74,0x72,0x62,0x52,0x42,0x32,
  76. 0x42,0x44,0x42,0x42,0x52,0x62,0x52,
  77. 0x5c,0x04,
  78. 0x64,0x62,0x62,0x64,0x72,0x82,
  79. 0x72,0x74,0x72,0x62,0x52,0x42,0x32,
  80. 0x42,0x46,0x53,0x41,0x42,0x32,
  81. 0x3c,0x04,
  82. 0xFF};
  83. uchar code song2[]={0x12,0x52,0x52,0x52,0x56,0x42,        // 歌曲四
  84. 0x32,0x42,0x32,0x22,0x18,
  85. 0x82,0x82,0x82,0x82,0x86,0x72,
  86. 0xB2,0x72,0x72,0x62,0x58,
  87. 0x52,0x82,0x82,0x72,0x56,0x42,
  88. 0x32,0x42,0x32,0x22,0x16,0xB2,
  89. 0xB2,0x32,0x32,0x22,0x16,0x52,
  90. 0x42,0x32,0x22,0xC2,0x88,
  91. 0xFF};
  92. uchar code song3 []={         //        歌曲五
  93. 0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA6,
  94. 0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA6,
  95. 0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0x08,
  96. 0xff };
  97. //----------------------------簡譜音調對應的定時器初值---------------------------
  98. //適合11.0592M的晶振,對定時器置入的初值
  99. uchar code cuzhi[]={
  100.          0xff,0xff,//占位用的,沒有實際的意義
  101.          0xFC,0x8E,//中央C調1-7
  102.          0xFC,0xED,        
  103.          0xFD,0x43,        
  104.          0xFD,0x6A,        
  105.          0xFD,0xB3,        
  106.          0xFD,0xF3,        
  107.          0xFE,0x2D,
  108.          0xFE,0x47,        //高八度1-7         
  109.          0xFE,0x76,
  110.          0xFE,0xA1,
  111.          0xFE,0xC7,        
  112.          0xFE,0xD9,
  113.          0xFE,0xF9,
  114.          0xFF,0x16
  115.          };
  116. uchar yinyue[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x0,0x0};
  117. //將音調轉化為對應的LED樣式
  118. void delay1(uint z);        //延時1MS
  119. void delay(uint z);        //延時165MS,即十六分音符
  120. void song();
  121. void beep();//蜂鳴器叫一聲
  122. main()
  123. {        uchar x;
  124.         count1=1;//流水燈花樣
  125.         count2=0;//不唱歌
  126.         EA=1;//開總中斷
  127.         EX0=1;//開外部中斷0
  128.         IT0=1;//外部中斷0下降沿觸發方式
  129.         EX1=1;//開外部中斷1
  130.         IT1=1;//外部中斷1下降沿觸發方式

  131.         TMOD=0x01;//定時器0工作在方式1
  132.         TH0=0;
  133.         TL0=0;
  134.         ET0=1;
  135.         
  136.         while(1)
  137.         {
  138.                 if(count1!=0)
  139.                 {
  140.                         switch(count1)
  141.                         {
  142.                                 case 1:
  143.                                         for(x=0;x<25;x++)
  144.                                         {
  145.                                                 P1=huayang1[x]; //花樣流水燈1
  146.                                                 beep();
  147.                                                 delay1(150);
  148.                                                 if(count1!=1)
  149.                                                         break;        
  150.                                         }
  151.                                 break;
  152.                                 case 2:
  153.                                         for(x=0;x<14;x++)
  154.                                         {
  155.                                                 P1=huayang2[x];//花樣流水燈2
  156.                                                 beep();
  157.                                                 delay1(300);
  158.                                                 if(count1!=2)
  159.                                                         break;        
  160.                                         }
  161.                                 break;
  162.                                 case 3:
  163.                                         for(x=0;x<17;x++)
  164.                                         {
  165.                                                 P1=huayang3[x];//花樣流水燈3
  166.                                                 beep();
  167.                                                 delay1(150);
  168.                                                 if(count1!=3)
  169.                                                         break;        
  170.                                         }
  171.                                 break;
  172.                                 case 4:
  173.                                         for(x=0;x<16;x++)
  174.                                         {
  175.                                                 P1=huayang4[x];//花樣流水燈4
  176.                                                 beep();
  177.                                                 delay1(300);
  178.                                                 if(count1!=4)
  179.                                                         break;                                       
  180.                                         }
  181.                                 break;
  182.                                 case 5:
  183.                                         for(x=0;x<12;x++)
  184.                                         {
  185.                                                 P1=huayang5[x];//花樣流水燈5
  186.                                                 beep();
  187.                                                 delay1(300);
  188.                                                 if(count1!=5)
  189.                                                         break;                                       
  190.                                         }
  191.                                 break;
  192.                         }
  193.                 }
  194.                 else
  195.                 {
  196.                         song();
  197.                         delay1(1000);
  198.                 }
  199.         }
  200.                                  
  201. }
  202. void int0() interrupt 0
  203. {
  204.         EA=0;//關總中斷
  205.         delay1(1);//去抖
  206.         if(key1==0)
  207.         {
  208.                 count2=0;//不讓蜂鳴器唱歌
  209.                 TR0=0;
  210.                 count1++;
  211.                 if(count1==6)
  212.                          count1=1;

  213.         }
  214.         EA=1;//開總中斷
  215. }
  216. void int1() interrupt 2  //外部中斷1
  217. {
  218.         EA=0;//關總中斷
  219.         delay1(1);//去抖
  220.         if(key2==0)
  221.         {
  222.                 count1=0;//流水燈無花樣
  223.                 TR0=1;
  224.                 i=0;//從頭開始唱
  225.                 count2++;
  226.                 if(count2==6)
  227.                          count2=1;
  228.         }
  229.         EA=1;//開總中斷
  230. }

  231. //---------------.按照51單片機的中斷向量順序編的號,也是缺省狀態下的優先級------------
  232. //外部中斷0 interrupt 0
  233. //定時器0     interrupt 1
  234. //外部中斷1 interrupt 2
  235. //定時器1     interrupt 3
  236. //串口中斷   interrupt 4
  237. //定時器2     interrupt 5
  238. void timer0() interrupt 1         //用于產生各種音調 定時器0
  239. {
  240.         TH0=timeh;
  241.         TL0=timel;
  242.         fm=~fm;
  243. }
  244. void song()
  245. {
  246.         uint temp;
  247.         uchar jp; //簡譜
  248.         i=0;
  249.         while(1)
  250.         {        if(count2==0)
  251.                 {        
  252.                         break;
  253.                 }
  254.                 if(count2==1)          //選曲1
  255.                         { temp=qnzl [i];}        
  256.                 if(count2==2)    //選曲2
  257.                         temp=jmszl[i];
  258.                 if(count2==3)     //選曲3
  259.                         temp=song1 [i];
  260.                 if(count2==4)    //選曲4
  261.                         temp=song2 [i];
  262.                 if(count2==5)   //選曲5
  263.                         temp=song3 [i];        
  264.                 if(temp==0xff)
  265.                         break;
  266.                         
  267.                 jp=temp/16; //取數的高4位
  268.                 P1=yinyue[jp];
  269.                 if(jp!=0)
  270.                 {
  271.                 timeh=cuzhi[jp*2];
  272.                 timel=cuzhi[jp*2+1];
  273.                 }
  274.                 else
  275.                 {
  276.                 TR0=0;
  277.                 fm=1;//關蜂鳴器
  278.                 }
  279.                 delay(temp%16); //取數的低4位
  280.                 TR0=0;         //唱完一個音停10MS
  281.                 fm=1;
  282.                 delay1(10);
  283.                 TR0=1;
  284.                 i++;
  285.         }
  286.         TR0=0;
  287.         fm=1;
  288.         
  289. }
  290. void delay(uint z)        //延時165MS,即十六分音符
  291. {        uint x,y;
  292.         for(x=z;x>0;x--)
  293.                  for(y=19000;y>0;y--);
  294. }

  295. void delay1(uint z)        //延時1ms
  296. {        uint x,y;
  297.         for(x=z;x>0;x--)
  298.                  for(y=112;y>0;y--);
  299. }
  300. void beep()        //蜂鳴器叫一聲
  301. {        uchar i;
  302.         for(i=0;i<50;i++)
  303.         {        fm=~fm;
  304.                 delay1(1);
  305.         }
  306.         fm=1;
  307. }
復制代碼

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

使用道具 舉報

沙發
ID:748788 發表于 2020-12-17 21:32 | 只看該作者
程序沒有問題,可能是你的線路有問題。下圖是仿真截圖:


回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人免费观看 | 福利在线 | 99福利视频| 伊人在线 | 亚洲国产精品一区二区三区 | 闷骚老干部cao个爽 欧美区一区二 | 精品在线一区 | 中文字幕在线看 | 欧美日韩一区二区在线观看 | 在线观看亚洲精品 | 躁躁躁日日躁 | 中文在线观看免费视频 | 成人午夜网 | 天天操女人 | 日韩视频免费看 | 久久怡红院 | 亚洲成人免费网站 | 午夜网址 | 国产精品成人免费视频 | 99视频在线精品免费观看2 | 国产盗摄一区二区三区 | 国产精品乱码一区二区三区 | 久久精品一区二区国产 | 91精品在线播放 | 黄网站在线播放 | 亚洲综合视频在线 | 欧美精品二区三区四区免费看视频 | 精品亚洲一区二区三区 | www.亚洲精品| 日日操夜夜干 | 亚洲一区在线看 | 午夜在线视频观看 | 91在线亚洲 | 伊人网综合 | 午夜精品久久久久久久99黑人 | 中文字字幕 | 国产主播av| 久久一区二区三区四区 | 91视频在线看 | 一二三区视频 | 国产伦理一区二区 |