专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

让蜂鸣器唱“美丽的姑娘”

作者:佚名   来源:本站原创   点击数:  更新时间:2011年06月04日   【字体:

把51hei-5单片机开发板的 j5跳线插到23端 以便选通蜂鸣器,烧入程序就可以听到美丽的姑娘的音乐了.

#include <reg52.h>     
#include <absacc.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ON  0
#define OFF 1
sbit P20=P2^2;
struct music_type
{ uchar tone;
  uchar delay;
};
uint code tonetab[] =
{
63890,64070,64229,64303,64438,64557,64664,
64713,64803,64883,64919,64987,65047,65100,
65124,65169,65209,65228,65261,65291,65318,
};
struct music_type code codetab[]=
{
 1+7,0x02,1+7,0x02,6+7,0x04,5+7,0x04,
 6+7,0x01,1+14,0x01,6+7,0x01,5+7,0x01,3+7,0x02,3+7,0x01,1+7,0x01,
 2+7,0x02,3+7,0x02,4+7,0x02,5+7,0x02,
 3+7,0x04,2+7,0x01,3+7,0x01,2+7,0x01,1+7,0x01,
 1+7,0x10,

 5+7,0x02,5+7,0x01,5+7,0x01,1+14,0x03,7+7,0x02,6+7,0x02,
 1+14,0x01,1+14,0x01,1+14,0x01,6+7,0x01,5+7,0x04,
 5+7,0x02,5+7,0x02,1+14,0x02,7+7,0x02,6+7,0x02,7+7,0x02,1+14,0x0c,
 
 5+7,0x02,5+7,0x02,1+14,0x02,7+7,0x02,6+7,0x02,7+7,0x01,7+7,0x01,
 1+14,0x01,1+14,0x01,1+14,0x01,6+7,0x01,5+7,0x02,3+7,0x02,
 5+7,0x02,5+7,0x01,5+7,0x01,6+7,0x02,6+7,0x01,5+7,0x01,3+7,0x03,1+7,0x01,
 2+7,0x01,3+7,0x01,2+7,0x01,1+7,0x01,1+7,0x04,

 1+7,0x02,1+7,0x02,6+7,0x04,5+7,0x04,
 6+7,0x01,1+14,0x01,6+7,0x01,5+7,0x01,3+7,0x02,3+7,0x01,1+7,0x01,
 2+7,0x02,3+7,0x02,4+7,0x02,5+7,0x01,4+7,0x01,3+7,0x03,1+7,0x01,
 2+7,0x01,3+7,0x01,2+7,0x01,1+7,0x01,1+7,0x04,

 1+7,0x02,1+7,0x02,6+7,0x04,5+7,0x04,
 6+7,0x01,1+14,0x01,6+7,0x01,5+7,0x01,3+7,0x02,3+7,0x01,1+7,0x01,
 2+7,0x02,3+7,0x02,4+7,0x02,5+7,0x01,4+7,0x01,3+7,0x03,1+7,0x01,
 2+7,0x01,3+7,0x01,2+7,0x01,1+7,0x01,1+7,0x04,

 5+7,0x02,5+7,0x01,5+7,0x01,1+14,0x03,7+7,0x02,6+7,0x02,
 1+14,0x01,1+14,0x01,1+14,0x01,6+7,0x01,5+7,0x04,
 5+7,0x02,5+7,0x02,1+14,0x02,7+7,0x02,6+7,0x02,7+7,0x02,1+14,0x0c,
 
 5+7,0x02,5+7,0x02,1+14,0x02,7+7,0x02,6+7,0x02,7+7,0x01,7+7,0x01,
 1+14,0x01,1+14,0x01,1+14,0x01,6+7,0x01,5+7,0x02,3+7,0x02,
 5+7,0x02,5+7,0x01,5+7,0x01,6+7,0x02,6+7,0x01,5+7,0x01,3+7,0x03,1+7,0x01,
 2+7,0x01,3+7,0x01,2+7,0x01,1+7,0x01,1+7,0x04,

 1+7,0x02,1+7,0x02,6+7,0x04,5+7,0x04,
 6+7,0x01,1+14,0x01,6+7,0x01,5+7,0x01,3+7,0x02,3+7,0x01,1+7,0x01,
 2+7,0x02,3+7,0x02,4+7,0x02,5+7,0x01,4+7,0x01,3+7,0x03,1+7,0x01,
 2+7,0x01,3+7,0x01,2+7,0x01,1+7,0x01,1+7,0x04,

 1+7,0x02,1+7,0x02,6+7,0x04,5+7,0x04,
 6+7,0x01,1+14,0x01,6+7,0x01,5+7,0x01,3+7,0x02,3+7,0x01,1+7,0x01,
 2+7,0x02,3+7,0x02,4+7,0x02,5+7,0x01,4+7,0x01,3+7,0x03,1+7,0x01,
 2+7,0x01,3+7,0x01,2+7,0x01,1+7,0x01,1+7,0x04,

 0,0x00,
};
volatile uchar tl0,th0;
void delay_us(uchar n)  
{ do
  { _nop_();
    _nop_();
    _nop_();
    _nop_();
  }while(--n);
}
void delay_ms(uint n) 
{ do delay_us(100); 
  while(--n);
}
void T0_sev() interrupt 1
{ TL0=tl0;
  TH0=th0;
  P20=!P20;
}
void main(void)
{ uchar i,j;
  TMOD=0x01;
  IE=0x82;

  while(1)
  { i=0;
    while(codetab[i].delay)
    { if(!codetab[i].tone) TR0=0;
      else
   { th0=TH0=tonetab[codetab[i].tone-1]/256; 
        tl0=TL0=tonetab[codetab[i].tone-1]%256;
        TR0=1;
     }   
      for(j=0;j<codetab[i].delay;j++) delay_ms(215);
   i++;
 }
    TR0=0;
 delay_ms(3000);
  }
}
关闭窗口

相关文章