C51输出可调脉冲时,所有按键无做用

2019-07-15 12:00发布

目的:
做一个可调的脉冲发射器,在一个固定的周期T内,每个一段时间(t1)出现一次高电平,持续时间(t2)后再变成低电平。整个周期不断循环,循环次数为N。其中t1的值随着N的变化每次增加(d1),高电平持续时间同样会随着N的变化每次增加(d2)。当按下开始按键后,开始输出脉冲;按下停止键停止输出。

现在主要问题:在开始输出脉冲时,按停止键没有作用,所有的按键都无作用
波形
程序如下:
short keycheckdown()     //按键函数
{
short temp1,temp2,temp,a=0xff;
KEY=0xf0;      
Delay(20);      
temp1=KEY;      
KEY=0xff;
Delay(10);      
KEY=0x0f;      
Delay(20);      
temp2=KEY;      
KEY=0xff;
temp=(temp1&0xf0)|(temp2&0xf);
    switch(temp)     
{
     case 0xee :a=7;      
    break;      
     case 0xed :a=8;      
    break;     
     case 0xeb :a=9;     
    break;     
  case 0xe7 :a=0x0a;      
    break;     
     case 0xde :a=4;      
    break;     
    case 0xdd :a=5;      
    break;     
     case 0xdb :a=6;      
    break;     
   case 0xd7 :a=0x0b;   
    break;     
   case 0xbe :a=1;        
    break;     
     case 0xbd :a=2;      
    break;     
     case 0xbb :a=3;     
    break;     
  case 0xb7 :a=0x0c;   
    break;     
     case 0x7e :a=0x0e;    //开始
    break;     
   case 0x7d :a=0;   
    break;     
   case 0x7b :a=0x0f;   //停止
    break;     
    case 0x77 :a=0x0d;   
    break;     
  default :a=0xff;   
}
return a;      
}

/*脉冲时间计算函数*/
void Start( int t1, int t2, int d1, int d2)
{
unsigned int Low_time1,High_time,Low_time2;
unsigned int n,N;
unsigned int T=3000;  
N=(T-t1-t2)/(d2+d2);
for(n=0;n<=N;n++)
{
     Low_time1=t1+n*d1;
  High_time=t2+n*d2;
  Low_time2=T-Low_time1-High_time;
  pulse =0;
  Delay(Low_time1);
  pulse =1;
  Delay(High_time);
  pulse =0;
  Delay(Low_time2);
}
}
/*开始输出脉冲*/
void SetStart()
{
Start(data_1, data_2, data_3, data_4);   
}
/*停止输出*/
void SetStop()
{
pulse =0;
}

/*按键动作函数*/
void keyaction(unsigned char key)
{
   if(key == 0x0e)
{
  SetStart();      
}

else if(key == 0x0f)
{
  SetStop();      
}
}

void main()
{  
      while(1)
{
  key=keycheckdown();  
  if(key!=0xff)
  {
   keyaction(key);
  }
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。