这是一个谱曲的代码

功能很简单,就是控制扬声器响的时间从而产生不同 的音节。

 

#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit voice=P1^6;
uchar code sound[]={//0xff,0x40,0x10,0x40,0x10,0x39,0x10,0x40,0x10,0x60,0x10,0x33,0x10,0x00,
    // 0xff,0x40,0x20,0x40,0x20,0x48,0x20,0x40,0x20,0x60,0x20,0x33,0x20,0x00,
    // 0xff,0x40,0x30,  0x40,0x30,  0x39,0x30,  0x40,0x30,  0x60,0x30,  0x33,0x30,0x00,
    0xff,
                    0x40,0x30,0x40,0x30,0x39,0x30,0x40,0x30,0x60,0x30,0x33,0x30,0x40,0x30,
                    0x40,0x30,0x39,0x30,0x40,0x30,0x55,0x30,0x60,0x30,0x40,0x30,0x40,0x30,
                    0x40,0x30,0x4c,0x30,0x60,0x30,0x33,0x30,0x39,0x30,0x48,0x30,0x48,0x30,
                    0x4c,0x30,0x60,0x30,0x55,0x30,0x60,0x30,0x00,//《祝你生日快乐》
                   };
uchar zdjs=0, jp;
del(yj);
void main(void)
  {
      uint dpjs=0;
      uchar yj;
      TMOD=0x01,
   IE=0x82;
      TH0=0xd8, 
   TL0=0xef;
   TR0=1;
while(1)
   {  
     zdjs=0;
     dpjs++;
  yj=sound[dpjs]; 
     dpjs++; 
  jp=sound[dpjs];
   while(zdjs!=jp)
       { 
      if(yj!=0xff)
   {
             if(yj!=0)
               {
             voice=!voice;
                 del(yj);
                }
                else
          {
          dpjs=0; 
                      break;
                     }
    }
    else
      {
        voice=0;
        del(jp);
    }
      }
       }
   }
time0() interrupt 1  using 1
      {
         TH0=0xd8, TL0=0xef;
         zdjs++;
           }
del(yj)
    {
      uchar yj2=2;
       while(yj!=0)
         {      
               while(yj2!=0)
                  {
                     yj2--;
                     }
                  yj2=2;
             yj--;  
       }
   
     }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值