C51单片机中断编程:p3.2开关按一下,原来8盏循环点亮led终止在某一盏,再按一下,又开始循环,求程序

刚开始led循环点亮,按了开关之后,暂停,再按开关,又循环点亮,这是我的程序:
# include <reg51.h>
main()
{
int i;
P1=0xfe;
while(1)
{
for(i=0;i<30000;i++);
P1<<=1;
P1|=0x01;
if(P1==0xff)
{
for(i=0;i<30000;i++);
P1=0xfe;
}
}
}
怎么添加????或者求新程序
这是仿真图

第1个回答  2011-10-17
# include <reg51.h>
bit flag; //添加
main()
{
int i;
EA=1; //添加
EX0=1; //添加
IT0=1; //添加
P1=0xfe;
while(1)
{
while(flag); //添加
for(i=0;i<30000;i++);
P1<<=1;
P1|=0x01;
if(P1==0xff)
{
for(i=0;i<30000;i++);
P1=0xfe;
}

}
}

void exint0() interrupt 0 //添加
{
flag=!flag;
}本回答被提问者采纳
第2个回答  2011-10-17
用两个中断。一个定时器中断,每次定时中断后让LED移位。另一个外部中断P3.2,每次中断后将定时器停止,TR0=0追问

必须用定时器么?可以不用定时器么?能给个程序不?

追答

那就加个标志FLAG,每次中断后FLAG取反。程序里根据FALG进行循环点亮LED。你先试着写一个。写不出来我再给你。

追问

额。。。我C语言不是很好,就先给我行么,急用。。。

追答

47ok朋友写给你了。你试试吧。

追问

非常感谢。。

第3个回答  2011-10-17
学习了
第4个回答  2011-10-17
ee