目的:
做一个可调的脉冲发射器,在一个固定的周期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);
}
}
}
一周热门 更多>