找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机音乐盒代码

[复制链接]
跳转到指定楼层
楼主
ID:453167 发表于 2018-12-24 10:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的音乐盒程序
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define ulong unsigned long

  5. code unsigned char gao[]={
  6. 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
  7. 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
  8. 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
  9. 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
  10. } ;

  11. code unsigned char di[]={
  12. 0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
  13. 0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
  14. 0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
  15. 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
  16. };

  17. uchar data gepu[55]; //必须要指明长度!!!!!!!!
  18. uchar data time[55];

  19. uchar a;//中间变量 把ram数组的值赋给它,传递给定时器中断
  20. //第一首:生日歌
  21. uchar code gepu1[]={5,0,5,6,5,8,7, 5,0,5,6,5,9,8, 5,0,5,12,10,8,7,6, 11,0,11,10,8,9,8,8};//30
  22. uchar code time1[]={2,0,2,4,4,4,6, 2,0,2,4,4,4,6, 2,0,2,4,4,4,4,6, 2,0,2,4,4,4,4,4 };
  23. //第二首:两只老虎 //大于14是指低音
  24. uchar code gepu2[]={1,2,3,1, 1,2,3,1, 3,4,5,0, 3,4,5,0, 5,6,5,4,3,1, 5,6,5,4,3,1, 2,19,1,0, 2,19,1,0};//36
  25. uchar code time2[]={4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, 3,1,3,1,4,4, 3,1,3,1,4,4, 4,4,4,4, 4,4,4,4};//
  26. //第三首:多年以前
  27. uchar code gepu3[]={1,0,1,2,3,0,3,4, 5,6,5,3, 5,4,3,2, 4,3,2,1,0, 1,0,1,2,3,0,3,4, 5,6,5,3, 5,4,3,2,3,2,1,0};//41
  28. uchar code time3[]={4,0,2,2,4,0,2,2, 4,2,2,8, 4,2,2,8, 4,2,2,8,0, 4,0,2,2,4,0,2,2, 4,2,2,8, 4,2,2,4,2,2,10,1};
  29. //第四首:小步舞曲
  30. uchar code gepu4[]={5,1,2,3,4,5,1,0,1, 6,4,5,6,7,8,1,0,1, 4,5,4,3,2,3, 4,3,2,1,2, 3,2,1,21,1};//34
  31. uchar code time4[]={4,2,2,2,2,4,4,0,4, 4,2,2,2,2,4,4,0,4, 4,2,2,2,2,4, 2,2,2,2,4, 2,2,2,2,10};
  32. //第五首:字母歌
  33. uchar code gepu5[]={1,0,1,5,0,5,6,0,6,5, 4,0,4,3,0,3,2,0,2,1, 5,0,5,4,3,0,3,2, 5,0,5,4,0,4,3,0,3,2, 1,3,5,6,8,5, 4,0,4,3,0,3,2,0,2,1,0};//55
  34. uchar code time5[]={2,0,2,2,0,2,2,0,2,4, 2,0,2,2,0,2,2,0,2,4, 2,0,2,4,2,0,2,4, 2,0,2,2,0,2,2,0,2,4, 2,2,4,2,2,4, 2,0,2,2,0,2,2,0,2,4,1};

  35. uchar i,s;

  36. sbit led1=P3^3;
  37. sbit led2=P3^4;
  38. sbit led3=P3^5;
  39. sbit led4=P3^6;
  40. sbit led5=P3^7;


  41. sbit buzzer=P1^0;
  42. sbit key1=P2^0;//开始停止
  43. sbit key2=P2^1;//上一首
  44. sbit key3=P2^2;//下一首


  45. void delay(uchar t);
  46. void delayms(uchar t);

  47. void main()
  48. {
  49. uchar flag=0;
  50. uchar k=5;
  51. uchar stop;
  52. TMOD=0X01;
  53. EA=1;ET0=1;
  54. while(1)
  55. {

  56. while(key2==0 || key3==0 || flag==0)
  57. {
  58. flag=1;
  59. if(key3==0)
  60. {
  61. k++;
  62. delay(5);
  63. if(k>5)
  64. k=k%5;
  65. }
  66. if(key2==0)
  67. {
  68. k--;
  69. delay(5);
  70. if(k==0)
  71. k=5;
  72. }


  73. switch(k%5)
  74. {
  75. case 0:
  76. {
  77. P3=0x7f;
  78. s=30;
  79. for(i=0;i<s;i++)
  80. {
  81. gepu[i]=gepu1[i];
  82. time[i]=time1[i];
  83. }
  84. break;
  85. }
  86. case 1:
  87. {
  88. P3=0xbf;
  89. s=36;
  90. for(i=0;i<s;i++)
  91. {
  92. gepu[i]=gepu2[i];
  93. time[i]=time2[i];
  94. }

  95. break;
  96. }
  97. case 2:
  98. {
  99. P3=0xdf;
  100. s=41;
  101. for(i=0;i<s;i++)
  102. {
  103. gepu[i]=gepu3[i];
  104. time[i]=time3[i];
  105. }
  106. break;
  107. }
  108. case 3:
  109. {
  110. P3=0xef;
  111. s=34;
  112. for(i=0;i<s;i++)
  113. {
  114. gepu[i]=gepu4[i];
  115. time[i]=time4[i];
  116. }
  117. break;
  118. }
  119. case 4:
  120. {
  121. P3=0xf0;
  122. s=55;
  123. for(i=0;i<s;i++)
  124. {
  125. gepu[i]=gepu5[i];
  126. time[i]=time5[i];
  127. }
  128. break;
  129. }
  130. }
  131. }

  132. while(key2!=0 && key3!=0)
  133. {
  134. for(i=0;i<s;i++)
  135. {
  136. TR0=1;
  137. a=gepu[i];
  138. ///////////////////////////
  139. P0=(~gepu[i]);
  140. ////////////////////////////
  141. if(time[i]>0)
  142. delay(time[i]);
  143. else
  144. delayms(1);


  145. if(key1==0)
  146. {
  147. delay(5);
  148. stop++;
  149. }
  150. if(stop%2==0)
  151. TR0=1;
  152. else
  153. TR0=0;
  154. while(stop%2)
  155. {
  156. if(key1==0)
  157. {
  158. delay(5);
  159. stop++;
  160. }       
  161. }
  162. if(key2==0 || key3==0)
  163. {
  164. TR0=0;
  165. break;
  166. }

  167. }
  168. }

  169. }
  170. }

  171. void dingshi0() interrupt 1 using 0
  172. {
  173. if(a<15)
  174. {
  175. TH0=gao[a+6];
  176. TL0=di[a+6];
  177. }
  178. else
  179. {
  180. TH0=gao[a-14-1];
  181. TL0=di[a-14-1];
  182. }
  183. if(a==0)
  184. buzzer=0;
  185. else
  186. buzzer=~buzzer;
  187. }

  188. void delay(uchar t)
  189. {
  190. uint i;
  191. while(t--)
  192. {
  193. for(i = 0; i < 10001; i++);
  194. }
  195. }

  196. void delayms(uchar t)
  197. {
  198. uchar t1; uint t2;
  199. for(t1=0;t1<t;t1++)
  200. {
  201. for(t2=0;t2<800;t2++)
  202. {;}
  203. }
  204. }
复制代码


音乐.zip

29.49 KB, 下载次数: 28, 下载积分: 黑币 -5

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

使用道具 举报

沙发
ID:1 发表于 2018-12-24 16:12 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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