times New Roman">//主程序void main(){ init(); while(1) { if(key1==0)//流水灯按钮 { delay_ms(10); if(key1==0) { flag=0; while(!key1); } } if(key2==0)//继电器按钮 { delay_ms(10); if(key2==0) { flag1=0; while(!key2); } } if(flag==0)//流水灯程序 { led1=0; delay_ms(500); led2=0; delay_ms(500); led3=0; delay_ms(500); led4=0; delay_ms(500); led1=1; led2=1; led3=1; led4=1; delay_ms(500); flag=1; } if(flag1==0)//继电器程序 { rel1=0; delay_ms(1000); rel1=1; delay_ms(1000); flag1=1; } }} 大家好,这是一段两个按钮分别控制流水灯和继电器的程序,其中key1控制流水灯,key2控制继电器。我这个程序并没有达到预期的效果,两个按钮在执行过程中会冲突,比如先按下key1时,执行流水灯程序,此时再按key2无效,必须要等流水灯程序中的flag=1(即退出if(flag==0)//流水灯程序以后)再按key2才有效。先按key2也一样,必须要等flag1=1(即退出if(flag1==0)//流水灯程序以后)再按key1才有效。请问如何更改程序才能使其不受制约?我要达到的目的是任何时候按下key1或key2都会执行各自的程序,相互间不受制约?请各位网友多指点,谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
void timer0()interrupt 1
{
unsigned char tcount,tcount1;
TH0=0X54; //定时时间随便定的,楼主可以根据自己需要更改
TL0=0x92;
if(!flag)tcount++;
if(tcount==10)led1=0;
if(tcount==20)led2=0;
if(tcount==30)led3=0;
if(tcount==40)led4=0;
if(tcount==50)tcount=0,led1=1,led2=1,led3=1,led4=1,flag=1;
if(!flag1)rel1=0;tcount1++;
if(tcount1>100)rel1=1;tcount1=0,flag1=1;
}
void main()
{
IE=0x82; //开定时器中断
PT0=1;
TMOD=0X01;
TH0=0X54; //定时时间随便定的,楼主可以根据自己需要更改
TL0=0x92;
TR0=1; //开定时器0
init();
while(1)
{
if(key1==0)//流水灯按钮
{
// delay_ms(10); 后面有松手检测,前面就没必要消抖了,下面的同理
// if(key1==0)
// {
flag=0;
while(!key1);
// }
}
if(key2==0)//继电器按钮
{
flag1=0;
while(!key2);
}
}
}
一周热门 更多>