标题: 把妹利器 51单片机音乐盒 仿真+程序 [打印本页]

作者: happy112    时间: 2016-6-6 20:49
标题: 把妹利器 51单片机音乐盒 仿真+程序
电路介绍:

1.此项目采用51单片机实现音乐盒的功能,同时电路中采用模拟示波器,可以实时查看波形的变动。

2.通过一个可调电阻实现音频信号的音量大小

3.基于8欧姆/1w的喇叭作为音频输出部件


proteus仿真原理图:


源代码:
  1. #include<reg52.h>
  2. #include<intrins.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit SPK = P2^7;

  6. uchar tone_h;                //高音
  7. uchar tone_l;                //低音
  8. uint note = 1;                //音符
  9. uchar beat;                        //节拍

  10. uchar code chuzhi[3][16]={  //音调对应的计数初值
  11.          0xff,0xff,//占0位
  12.          0xf8,0x8c,//低1  
  13.          0xf9,0x5b,//  2                 
  14.          0xfa,0x15,//  3                 
  15.          0xfa,0x67,//  4                 
  16.          0xfb,0x04,//  5                 
  17.          0xfb,0x90,//  6                 
  18.          0xfc,0x0c,//低7
  19.         
  20.          0xff,0xff,//占0位
  21.          0xfc,0x44,//中1   
  22.          0xfc,0xac,//  2
  23.          0xfd,0x09,//  3
  24.          0xfd,0x34,//  4
  25.          0xfd,0x82,//  5
  26.          0xfd,0xc8,//  6
  27.          0xfe,0x06,//中7   
  28.         
  29.          0xff,0xff,//占0位
  30.          0xfe,0x22,//高1                           
  31.          0xfe,0x56,//        2               
  32.          0xfe,0x85,//        3               
  33.          0xfe,0x9a,//        4               
  34.          0xfe,0xc1,//        5               
  35.          0xfe,0xe4,//        6               
  36.          0xff,0x03 //高7                             
  37.         };        

  38. //****** 测试曲谱 ****** 个位:音调 ,十位:低中高音 对应 0 1 2,千百位:节拍 1~16
  39. uint code test2[] = {        120, //曲速 暂时未用到
  40.         401,402,403,404,405,406,407,
  41.         611,612,613,614,615,616,617,
  42.         821,822,823,824,825,826,827,
  43.         0xffff        //0xffff表示结尾
  44. };

  45. //****** 生日快乐 ******
  46. uint code test[] = { 120,
  47.         205,205,406,405,411,807,
  48.         205,205,406,405,412,811,
  49.         205,205,415,413,411,407,406,
  50.         314,114,413,411,413,812,
  51.         305,105,406,405,411,807,
  52.         305,105,406,405,412,811,
  53.         305,105,415,413,411,
  54.         407,406,314,114,413,411,412,811,410,
  55.         0xffff        
  56. };
  57.         
  58. void delayms(uint ms)          /*ms 等于1时,延时1ms 等于2时,延时2ms,以此类推*/
  59. {        
  60.         uchar a,b,c;                                   //+3
  61.         while(ms--)
  62.     {
  63.          for(c=1;c>0;c--)                        //         1+2 = 3
  64.         for(b=142;b>0;b--)                  //        1*( 1+142*2)) = 285        
  65.             for(a=2;a>0;a--);        //         142*(1+2*2) = 710
  66.         }
  67. }

  68. void delay125ms(uint pai)  //延时 ?*125ms 即?个节拍
  69. {
  70.     uchar a,b,c;
  71.         while(pai--)
  72.         {
  73.         for(c=239;c>0;c--)
  74.                 for(b=104;b>0;b--)
  75.                         for(a=1;a>0;a--);
  76.         }
  77. }
  78. void timer0() interrupt 1
  79. {
  80.         TH0 = tone_h;
  81.         TL0 = tone_l;
  82.         SPK = ~SPK;
  83. }


  84. void timer_init()
  85. {
  86.         EA = 1;
  87.         ET0 = 1;
  88.         PT0 = 1;
  89.         TMOD = 0x11;
  90.         TH0 = 255;
  91.         TL0 = 255;
  92. }
  93. void main()
  94. {        
  95.         timer_init();
  96.         note = 1;
  97.         
  98.         while(1)
  99.         {        
  100.                 if(test[note] == 0xffff)
  101.                 {        
  102.                         note = 1;
  103.                 }               
  104.                 if(test[note]%10 != 0)        //音调不为0 【音调为0时表示不发声,但有节拍】
  105.                 {
  106.                         tone_h = TH0 = chuzhi[test[note]%100/10][(test[note]%10)*2 ];                //音调高位 【二维数组 第1维表示低中高音,第二维表示音调】
  107.                         tone_l = TL0 = chuzhi[test[note]%100/10][(test[note]%10)*2 + 1];        //音调低位
  108.                         TR0 = 1;
  109.                 }
  110.                 delay125ms(test[note]/100);        //节拍
  111.                 TR0 = 0;
  112.                 delayms(30);
  113.                 note++;                                                //下一个音符
  114.                
  115.         }
  116.         
  117. }
复制代码



全部资料(压缩包)下载:
原理图和源代码.rar (40.6 KB, 下载次数: 239)





作者: 心疯扬    时间: 2016-6-6 23:55
为啥我做的仿真没声音呢
作者: admin    时间: 2016-6-7 00:43
心疯扬 发表于 2016-6-6 23:55
为啥我做的仿真没声音呢

波形窗口的变动有吗?
作者: 千夏SOUL    时间: 2016-12-23 20:10
挺好的
作者: 心如刀割    时间: 2016-12-25 10:07
不错,有创意
作者: Choi.    时间: 2017-6-4 17:37
感谢
作者: robin_chen559    时间: 2017-6-4 21:56
好东西 顶一个~~
作者: abk    时间: 2017-6-10 00:31
请问怎么搞黑比?
作者: faridzled    时间: 2017-6-10 03:22
thanks for sharing
作者: guan_3257    时间: 2017-6-13 15:50
很厉害
作者: cccjjj    时间: 2017-12-1 19:13
666可惜没黑笔下载
作者: han98    时间: 2017-12-4 23:38
请问是所有的代码?ma
作者: 无平日    时间: 2017-12-20 17:31
这两个错误是为什么?

6A~Q5E2G5KBIV09{[H`SD9D.png (8.01 KB, 下载次数: 115)

6A~Q5E2G5KBIV09{[H`SD9D.png

作者: dx2014    时间: 2018-6-13 19:56
真心不错特好
作者: 小k_爱    时间: 2018-11-18 12:42
无平日 发表于 2017-12-20 17:31
这两个错误是为什么?

配置下电源Vcc得电压;design-》Configure Power Rails…
作者: qq974282228    时间: 2018-11-18 15:18
谢谢分析!
作者: /456    时间: 2018-12-2 16:42
感谢  谢谢分享
作者: duanyalin    时间: 2018-12-3 08:12
新手前来学习学习
作者: Kunn    时间: 2018-12-3 08:42
感谢  
作者: 德鲁大叔11    时间: 2018-12-9 14:01
放在开发板上好像不行

作者: 桀骜的豪猪    时间: 2018-12-25 18:21
好东西,学习一下
作者: 单片机啊啊啊6    时间: 2019-11-13 11:44
无平日 发表于 2017-12-20 17:31
这两个错误是为什么?

你把代码烧进去就行了
作者: 2365280421s    时间: 2019-12-25 16:00
很不错
作者: 2365280421s    时间: 2019-12-26 08:10
不错很nice
作者: 我不know起名    时间: 2022-5-24 15:28
问问第十五行开始chuzhi定义怎么来的




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1