基于单片机的电子琴(已解决)

2019-07-16 05:14发布

本帖最后由 minDragon 于 2012-7-21 19:31 编辑

请高手指点下,按键消除抖动后,进入定时中断需要延时多久?我这里的程序是几个按键单音测试,可是按下去之后,除了case 1(发出Do的声音),其他的按下去后声音会很抖,不连续,不知道哪里出现了问题。望指点。。
附上仿真图,在最下面

#include <reg51.h>
sbit      speaker=P3^0;
sbit D1=P1^0;
sbit D2=P1^1;
sbit D3=P1^2;
sbit D4=P1^3;
unsigned char y;

void delay(unsigned char x)
{
   unsigned i;
   while(x--)
   for(i=0;i<125;i++){}
}
void T1ISR(void) interrupt 1
{
switch(y)
{
case 1:
TH0=64580/256;
TL0=64580%256;
speaker=~speaker;
break;
case 2:
TH0=64684/256;
TL0=64684%256;
speaker=~speaker;
break;
case 3:
TH0=64777/256;
TL0=64777%256;
speaker=~speaker;

case 4:
TH0=64820/256;
TL0=64820%256;
speaker=~speaker;
}
}
main()
{
EA=1;
ET0=1;
TMOD=0X10;
TR0=0;
while(1)
{
if(D1==0)
{
   delay(5);
     if(D1==0)
   {
    y=1;
    while(!D1)
    {
    TR0=1;
    delay(150);
    TR0=0;
    }
   }
    }

if(D2==0)
{
   delay(5);
     if(D2==0)
   {
    y=2;
    while(!D2)
    {
    TR0=1;
    delay(150);
    TR0=0;
    }
   }
    }


if(D3==0)
{
   delay(10);
     if(D3==0)
   {
    y=3;
    while(!D3)
    {
    TR0=1;
    delay(100);
    }
   }
    }
TR0=0;


if(D4==0)
{
   delay(10);
     if(D4==0)
   {
    y=4;
    while(!D4)
    {
    TR0=1;
    delay(100);
    }
   }
    } TR0=0;
  }


}


50G)F33ALYP~%}97(%`D(SM.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。