蜂鸣器唱世上只有妈妈好

/*-----------------------------------------------
  名称:音乐播放

------------------------------------------------*/
#include<reg52.h>        //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbit      speaker=P1^2;  //定义音乐输出端口,需要连接到对应的喇叭,请参考电路图
unsigned char timer0h,timer0l,time;
                         //世上只有妈妈好数据表
code unsigned char sszymmh[]={        6,2,3,      5,2,1,      3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,
                                      6,2,4,      3,2,2,      5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,
                                      6,1,1,      5,2,1,      3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,
                                      5,2,1,      6,2,1,      3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,
                                      2,2,1,      1,2,1,      6,1,1, 1,2,1, 5,1,6, 0,0,0
                                      };
                         // 音阶频率表 高八位
code unsigned char FREQH[]={
                                0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
                                0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
                                0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
                                0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
                               } ;
                         // 音阶频率表 低八位
code unsigned char FREQL[]={
                                 0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
                                 0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
                                 0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
                                 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
                                };
/******************************************************************/
/*                    延时函数                                    */
/******************************************************************/
void delay(unsigned char t)
   {
   unsigned char t1;
   unsigned long t2;
   for(t1=0;t1<t;t1++)
   {
    for(t2=0;t2<8000;t2++)
       {
        ;
        }
   }
   TR0=0;
 }
/******************************************************************/
/*                    定时器中断函数                              */
/******************************************************************/
void t0int() interrupt 1
{
 TR0=0;
 speaker=!speaker;
 TH0=timer0h;
 TL0=timer0l;
 TR0=1;
 }
/******************************************************************/
/*                    音乐处理函数                                */
/******************************************************************/
void song()
{
 TH0=timer0h;
 TL0=timer0l;
 TR0=1;
 delay(time);                      
 }
/******************************************************************/
/*                    主函数                                      */
/******************************************************************/
 void main(void)
 {
 unsigned char k,i;
 TMOD=1; //置CT0定时工作方式1
 EA=1;
 ET0=1;//IE=0x82 //CPU开中断,CT0开中断
 while(1)
      {
       i=0; 
       while(i<100){         //音乐数组长度 ,唱完从头再来       
       k=sszymmh[i]+7*sszymmh[i+1]-1;
       timer0h=FREQH[k];
       timer0l=FREQL[k];
       time=sszymmh[i+2];
       i=i+3;
       song();
        }
      }
  }

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值