51单片机电子琴

这是我在论坛第一篇文章,大一时用Arduino写过电子琴,大二了用51再写一次。

电路图:

注意事项:需要修改一下蜂鸣器的电压值其他的参数应该不需要改,实测可用。上面的电路多了一个元件是扬声器,本来想用扬声器的没有想到合适的方法。

程序:#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void T1_init();
uchar scan();
void delay(uint jishi);     
uint  DATA[]={63625 ,63833 ,64019, 64104 ,64260, 64400, 64524}; //低音区乐谱表(1~7)
sbit spp=P2^0;
sbit yue_1=P2^1;
sbit yue_2=P2^2;
sbit yue_3=P2^3;
sbit yue_4=P2^4;
sbit yue_5=P2^5;
sbit yue_6=P2^6;
sbit yue_7=P2^7;
uchar j;
uint da,k,fig=150;
void main()
 {  
  T1_init();
    while(1)
   { 
    spp=0;
    //delay();
    j=scan();  
    da=DATA[j];
    
   } 
 }
 uchar scan()
 { uchar i;
 //##################//
  if( yue_1==0)
 { 
  if( yue_1==0)
  {
   i=0;
   k=0;
  }
 }
 //#################//
  if( yue_2==0)
 { 
  if( yue_2==0)
  {
   i=1;
   k=0;
  }
 }
 //#################//
 if( yue_3==0)
 { 
  if( yue_3==0)
  {
   i=2;
   k=0;
  }
 }
 //#################//
  if( yue_4==0)
 { 
  if( yue_4==0)
  {
   i=3;
  k=0;
  }
 }
 //#################//
 if( yue_5==0)
 { 
  if( yue_5==0)
  {
   i=4;
  k=0;
  }
 }
 //#################//
 if( yue_6==0)
 { 
  if( yue_6==0)
  {
   i=5;
   k=0;
  }
 }
 //#################//
 if( yue_7==0)
 { 
  if( yue_7==0)
  {
   i=6;
   k=0;
  }
 }
 //#################//
 return i;
 }
void T1_init()
{   //spp=0;
    TMOD=0x10;
    EA=1;
    TH1=(65536)/256;
    TL1=(65536)%256;
    ET1=1;
    TR1=1; 
}
void T1_time()interrupt 3       

  TR1=0;
  k++;
  TH1=(da)/256;
  TL1=(da)%256;
  
  if(k<fig){ spp=1;
      }
  else{spp=0;}
  TR1=1;

void delay(uint jishi)
{
  uint i,j;
  for(i=jishi;i>0;i--)
    for(j=110;j>0;j--);
}

发布了2 篇原创文章 · 获赞 2 · 访问量 11

猜你喜欢

转载自blog.csdn.net/qq_45049500/article/details/105596851
今日推荐