找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机产生音乐程序

[复制链接]
跳转到指定楼层
楼主
ID:247870 发表于 2017-11-9 20:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. sbit      beep=P0^4;      //定义蜂鸣器输出端口
  4. uchar timer0h,timer0l,time;
  5.                         //世上只有妈妈好  数据表
  6. code uchar sszymmh[]={6,2,3,5,2,1,3,2,2,5,2,2,1,3,2,6,2,1,5,2,1,
  7.                       6,2,4,3,2,2,5,2,1,6,2,1,5,2,2,3,2,2,1,2,1,
  8.                       6,1,1,5,2,1,3,2,1,2,2,4,2,2,3,3,2,1,5,2,2,
  9.                       5,2,1,6,2,1,3,2,2,2,2,2,1,2,4,5,2,3,3,2,1,
  10.                       2,2,1,1,2,1,6,1,1,1,2,1,5,1,6,0,0,0
  11.                                       };
  12.                         // 音阶频率表 高八位
  13. code uchar FREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
  14.                     0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
  15.                     0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
  16.                     0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,} ;
  17. ~ 1 / 3 ~
  18.                         // 音阶频率表 低八位
  19. code uchar FREQL[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
  20.                     0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
  21.                     0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
  22.                     0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};
  23. void delay(uchar t)          // 延时函数
  24. {
  25.     uchar t1;
  26.     unsigned long t2;
  27.     for(t1=0;t1<t;t1++)
  28.     {
  29.         for(t2=0;t2<8000;t2++);
  30.     }
  31.     TR0=0;
  32. }
  33. void song()                //  音乐处理函数
  34. {
  35.     TH0=timer0h;
  36.     TL0=timer0l;
  37.     TR0=1;
  38.     delay(time);                     
  39. }
  40. /******************************************************************
  41.                               主函数                                    
  42. ******************************************************************/
  43. void main(void)
  44. {
  45.     uchar k,i;
  46.     TMOD=1;             //置CT0定时工作方式1
  47.     EA=1;
  48.     ET0=1;                //IE=0x82 //CPU开中断,CT0开中断
  49.     while(1)
  50.     {
  51.         i=0;
  52.         while(i<100)                  //音乐数组长度 ,唱完从头再来
  53. ~ 2 / 3 ~
  54.         {            
  55.             k=sszymmh[i]+7*sszymmh[i+1]-1;
  56.             timer0h=FREQH[k];
  57.             timer0l=FREQL[k];
  58.             time=sszymmh[i+2];
  59.             i=i+3;
  60.             song();
  61.         }
  62.     }
  63. }
  64. void t0int() interrupt 1        //定时器中断函数
  65. {
  66.     TR0=0;
  67.     beep=!beep;
  68.     TH0=timer0h;
  69.     TL0=timer0l;
  70.     TR0=1;
  71. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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