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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的音樂盒設計與制作

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:377234 發(fā)表于 2019-6-19 21:40 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. //程序如下:
  2. #include <reg51.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. sbit key1=P3^2;//按key1可切換花樣
  6. sbit key2=P3^3;//按key2可切換歌曲
  7. sbit fm=P3^7;//蜂鳴器連續(xù)的IO口
  8. uchar code huayang1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,
  9.                                                 0xfd,0xfb,0xf7,0xef,0xdf,0xbf};//花樣1
  10. uchar code huayang2[]={0x7f,0xfe,0xbf,0xfd,0xdf,0xfb,0xef,0xf7,
  11.                                                 0xef,0xfb,0xdf,0xfd,0xbf,0xfe};//花樣2
  12. uchar code huayang3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x0,
  13.                                                 0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//花樣3
  14. char code huayang4[]={0x55,0xaa,0xcc,0x33,0x99,0x66,0x0f,0xf0};
  15. uchar count1;//花樣標志        
  16. uchar count2;//歌曲標志        
  17. uchar timeh,timel,i;
  18. //---------------------------簡譜---------------------------------------
  19. //編程規(guī)則:字節(jié)高位是簡譜,低位是持續(xù)時間,
  20. //代表多少個十六分音符
  21. //1-7代表中央C調(diào),8-E代表高八度,0代表停頓
  22. //最后的0是結束標志
  23. uchar code qnzl[]={         //千年之戀
  24. 0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0x08,
  25. //前奏
  26. 0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,
  27. //竹林的燈火 到過的沙漠

  28. 0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,
  29. //七色的國度 不斷飄逸風中
  30. 0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,
  31. //有一種神秘 灰色的旋渦
  32. 0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,
  33. //將我卷入了迷霧中
  34. 0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,
  35. //看不清的雙手
  36. 0x31,0x51,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7C,0x02,
  37. //一朵花傳來誰經(jīng)過的溫柔
  38. 0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,
  39. //穿越千年的傷痛
  40. 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,
  41. //只為求一個結果
  42. 0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,
  43. //你留下的輪廓 指引我
  44. 0x42,0x63,0x83,0x83,0x91,0x91,
  45. //黑夜中不寂寞
  46. 0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,
  47. //穿越千年的哀愁
  48. 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,
  49. //是你在盡頭等我
  50. 0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,
  51. //最美麗的感動 會值得
  52. 0x42,0x82,0x88,0x02,0x74,0x93,0x89,0xff//結束標志
  53. //用一生守候
  54. };
  55. uchar code jmszl[]={ //寂寞沙洲冷
  56. 0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,
  57. //自你走后心憔悴
  58. 0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14,
  59. //白色油桐風中紛飛
  60. 0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0x08,0x28,
  61. //落花似人有情 這個季節(jié)
  62. 0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52,
  63. //河畔的風放肆拼命地吹
  64. 0x51,0x51,0x31,0x32,0x31,0x32,0x81,0x72,0x63,
  65. //不斷撥弄離人的眼淚

  66. 0x62,0x71,0x81,0x72,0x61,0x61,0x52,0x31,0x21,0x32,0x51,0x54,
  67. //那樣濃烈的愛再也無法給
  68. 0x22,0x12,0x11,0x12,0x11,0x12,0x12,0x14,0x26,0x32,0x26,
  69. //傷感一夜一夜
  70. 0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,
  71. //當記憶的線纏繞過往支離破碎
  72. 0x02,0x32,0x81,0x81,0x81,0x81,0x62,0x52,0x34,
  73. //是慌亂占據(jù)了心扉                                                                                                                                 
  74. 0x31,0x81,0x81,0x81,0x61,0x91,0x82,
  75. //有花兒伴著蝴蝶
  76. 0x51,0x51,0x51,0x51,0x31,0x61,0x53,
  77. //孤雁可以雙飛        
  78. 0x21,0x11,0x21,0x11,0x22,0x11,0x21,0x26,
  79. //夜深人靜獨徘徊
  80. 0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x52,
  81. //當幸福戀人寄來紅色分享喜悅
  82. 0x31,0x31,0x81,0x81,0x81,0x61,0x91,0x81,0x61,0x31,0x56,
  83. //閉上雙眼難過頭也不敢回
  84. 0x32,0x32,0x81,0x81,0x81,0x81,0x91,0x81,0x61,0x81,0x61,0x51,0x31,0x51,0x34,
  85. //仍然撿盡寒枝不肯安歇微帶著后悔
  86. 0x21,0x31,0x51,0x31,0x21,0x11,0x61,0x21,0x16,
  87. //寂寞沙洲我該思念誰
  88. 0xff};
  89. //----------------------------簡譜音調(diào)對應的定時器初值---------------------------
  90. //適合11.0592M的晶振
  91. uchar code cuzhi[]={
  92.          0xff,0xff,//占位
  93.          0xFC,0x8E,//中央C調(diào)1-7
  94.          0xFC,0xED,        
  95.          0xFD,0x43,        
  96.          0xFD,0x6A,        
  97.          0xFD,0xB3,        
  98.          0xFD,0xF3,        
  99.          0xFE,0x2D,
  100.          0xFE,0x47,        //高八度1-7         
  101.          0xFE,0x76,
  102.          0xFE,0xA1,
  103.          0xFE,0xC7,        
  104.          0xFE,0xD9,
  105.          0xFE,0xF9,
  106.          0xFF,0x16
  107.          };
  108. uchar yinyue[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x0,0x0};
  109. //將音調(diào)轉(zhuǎn)化為對應的LED樣式
  110. void delay1(uint z);        //延時1MS
  111. void delay(uint z);        //延時165MS,即十六分音符
  112. void song();
  113. void beep();//蜂鳴器叫一聲
  114. main()
  115. {        uchar x;
  116.         count1=0;//流水燈無花樣
  117.         count2=1;//唱第一首歌
  118.         EA=1;//開總中斷
  119.         EX0=1;//開外部中斷0
  120.         IT0=1;//外部中斷0下降沿觸發(fā)方式
  121.         EX1=1;//開外部中斷1
  122.         IT1=1;//外部中斷1下降沿觸發(fā)方式

  123.         TMOD=0x01;//定時器0工作在方式1
  124.         TH0=0;
  125.         TL0=0;
  126.         ET0=1;
  127.         
  128.         while(1)
  129.         {
  130.                 if(count1!=0)
  131.                 {
  132.                         switch(count1)
  133.                         {
  134.                                 case 1:
  135.                                         for(x=0;x<14;x++)
  136.                                         {
  137.                                                 P1=huayang1[x];
  138.                                                 beep();
  139.                                                 delay1(300);
  140.                                                 if(count1!=1)
  141.                                                         break;        
  142.                                         }
  143.                                 break;
  144.                                 case 2:
  145.                                         for(x=0;x<14;x++)
  146.                                         {
  147.                                                 P1=huayang2[x];
  148.                                                 beep();
  149.                                                 delay1(300);
  150.                                                 if(count1!=2)
  151.                                                         break;        
  152.                                         }
  153.                                 break;
  154.                                 case 3:
  155.                                         for(x=0;x<16;x++)
  156.                                         {
  157.                                                 P1=huayang3[x];
  158.                                                 beep();
  159.                                                 delay1(300);
  160.                                                 if(count1!=3)
  161.                                                         break;        
  162.                                         }
  163.                                 break;
  164.                                 case 4:
  165.                                         for(x=0;x<8;x++)
  166.                                         {
  167.                                                 P1=huayang4[x];
  168.                                                 beep();
  169.                                                 delay1(300);
  170.                                                 if(count1!=4)
  171.                                                         break;        
  172.                                         }
  173.                                 break;
  174.                         }
  175.                 }
  176.                 else
  177.                 {
  178.                         song();
  179.                         delay1(1000);
  180.                 }
  181.         }
  182.                                  
  183. }
  184. void int0() interrupt 0
  185. {
  186.         EA=0;//關總中斷
  187.         delay1(1);//去抖
  188.         if(key1==0)
  189.         {
  190.                 count2=0;//不讓蜂鳴器唱歌
  191.                 TR0=0;
  192.                 count1++;
  193.                 if(count1==5)
  194.                          count1=1;

  195.         }
  196.         EA=1;//開總中斷
  197. }
  198. void int1() interrupt 2
  199. {
  200.         EA=0;//關總中斷
  201.         delay1(1);//去抖
  202.         if(key2==0)
  203.         {
  204.                 count1=0;//流水燈無花樣
  205.                 TR0=1;
  206.                 i=0;//從頭開始唱
  207.                 count2++;
  208.                 if(count2==3)
  209.                          count2=1;

  210.         }
  211.         EA=1;//開總中斷
  212. }
  213. void timer0() interrupt 1         //用于產(chǎn)生各種音調(diào)
  214. {
  215.         TH0=timeh;
  216.         TL0=timel;
  217.         fm=~fm;
  218. }
  219. void song()
  220. {
  221.         uint temp,duan;
  222.         uchar jp;//jp是簡譜
  223.         i=0;
  224.         while(1)
  225.         {        if(count2==0)
  226.                 {        
  227.                         break;
  228.                 }
  229.                 if(count2==1)        //選曲
  230.                          temp=qnzl[i];
  231.                 if(count2==2)
  232.                         temp=jmszl[i];
  233.                 if(temp==0xff)
  234.                         break;
  235.                         
  236.                 jp=temp/16; //取數(shù)的高4位
  237.                 duan=1;
  238.                 P1=yinyue[jp];
  239.                 duan=0;
  240.                 if(jp!=0)
  241.                 {
  242.                 timeh=cuzhi[jp*2];
  243.                 timel=cuzhi[jp*2+1];
  244.                 }
  245.                 else
  246.                 {
  247.                 TR0=0;
  248.                 fm=1;//關蜂鳴器
  249.                 }
  250.                 delay(temp%16); //取數(shù)的低4位
  251.                 TR0=0;         //唱完一個音停10MS
  252.                 fm=1;
  253.                 delay1(10);
  254.                 TR0=1;
  255.                 i++;
  256.         }
  257.         TR0=0;
  258.         fm=1;
  259.         
  260. }
  261. void delay(uint z)        //延時165MS,即十六分音符
  262. {        uint x,y;
  263.         for(x=z;x>0;x--)
  264.                  for(y=19000;y>0;y--);
  265. }

  266. void delay1(uint z)        //延時1MS
  267. {        uint x,y;
  268.         for(x=z;x>0;x--)
  269.                  for(y=112;y>0;y--);
  270. }
  271. void beep()        //蜂鳴器叫一聲
  272. {        uchar i;
  273.         for(i=0;i<50;i++)
  274.         {        fm=~fm;
  275.                 delay1(1);
  276.         }
  277.         fm=1;
  278. }
復制代碼

捕獲.PNG (32.27 KB, 下載次數(shù): 24)

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

使用道具 舉報

沙發(fā)
ID:510728 發(fā)表于 2019-6-30 17:53 | 只看該作者
內(nèi)容不錯 值得借鑒
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 人人九九精| av网站在线免费观看 | 一区二区三区四区免费在线观看 | 国产小视频在线观看 | 日韩视频在线播放 | 久久国产精品99久久久久久丝袜 | 中文字幕1区2区3区 亚洲国产成人精品女人久久久 | 91麻豆精品国产91久久久久久 | 国产丝袜一区二区三区免费视频 | 美女久久久 | 久久久青草婷婷精品综合日韩 | 涩涩视频在线观看免费 | 国产视频福利 | 91国内精品久久 | 国产精品日产欧美久久久久 | 我想看一级黄色毛片 | 欧美一区二区三区视频 | 天天色天天色 | 一色桃子av一区二区 | 国产精品久久久久久久久久久久冷 | 日韩成人精品一区 | a级免费视频 | 97av视频在线 | 天天操天天怕 | 国产精品亚洲成在人线 | 国产精品久久久久久久久久久免费看 | 亚洲成人免费视频 | 五月综合久久 | 91久久视频 | 日本三级在线网站 | 久久久精品一区二区 | 国产精品美女一区二区 | 香蕉一区 | 日韩精品在线一区二区 | 国产精品揄拍一区二区 | 成人二区三区 | www.亚洲.com| com.色.www在线观看 | 国产一卡二卡三卡 | 欧州一区二区三区 | 久久国产精品99久久久久久丝袜 |