專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

51單片機C語言演奏“童話”

作者:浪子   來源:浪子   點擊數(shù):  更新時間:2014年06月10日   【字體:

 #include<reg51.h>

 
sbit  sound=P2^4;
sbit  led1=P1^6;
sbit  led2=P1^7;
unsigned char h,l,count,length;
unsigned int t,f,i,j;
unsigned int  scale[22]={100,262,294,330,349,392,440,494,523,578,659,698,784,880,988,1046,1175,1318,1397,1568,1760,1976};
bit flag=1;
void setthl(unsigned int p)
{
t=p*2;
f=1000000/t;
h=(65536-f)/256;
l=(65536-f)%256;
TH1=h;
TL1=l;
flag=1;
TR1=1;
}
time1() interrupt 3 using 1
  {
    TH1=h;
    TL1=l;
    sound=~sound;
   }
  
void timer0(void) interrupt 1
{
 TH0=0x9c;   
 TL0=0x60;
 count++;
 if (count==length)
 {
      flag=0;
      count=0;
 }
}
 
delay()
{
   length=10;
   flag=1;
   TR1=0;
   while(flag);
   TR1=1;
 }
 
note(unsigned char n,unsigned char len)
{
   setthl(scale[n]);
   length=len;
   while (flag);
   led1=!led1;
   led2=!led2;
 
}
 
song()
{
   note(5,15);
   note(12,15);
   note(11,15);
   note(10,30);
   note(10,15);note(11,8);note(10,38);
  
   note(10,15);note(11,15);note(10,15);note(11,15);note(10,15);note(9,8);
   note(8,8); delay(); 
  
   note(8,15);note(10,15);note(12,15);note(13,30);note(13,15);note(13,8);note(12,23);note(9,15);note(9,15);note(11,8);note(10,38);
   delay();
   note(8,15);note(10,15);note(12,15);note(13,30);note(13,15);note(13,8);note(12,23);note(9,15);
   note(9,15);note(11,15);note(10,15);note(11,15);note(10,15);note(9,8);note(8,38);  
   note(9,15);note(9,8);note(10,7);note(6,30);note(6,15);note(8,15);note(8,15);note(7,15);note(7,30);note(8,30);(8,30);
}
Delay(int i)
  { int j;
   for(;i>0;i--)
   {
     for(j=i;j>0;j--);
    }
  }
main()
{while(1)
{count=0,length=0;
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
EA=1;
ET1=1;
ET0=1;
TR1=1;
TR0=1;
    led1=!led1;  
   song();
   sound=1;
   EA=0;   
   Delay(500);
    }
 
}
關(guān)閉窗口

相關(guān)文章