用中断:
#include
#define u16 unsigned int
#define u8 unsigned char
***it SW18=P3^3;
***it led7=P2^0;
***it led9=P2^1;
***it led4=P2^2;
u8 flag=0;
void delay ()
{
u16 x,y;
for(x=1000;x>0;x--)
for(y=115;y>0;y--);
}
void int1 ()
{
IT1=1;
EX1=1;
EA=1;
}
void main ()
{
int1();
if(flag)
{
while(1)
{
led7=0;
delay();
led7=1;
led9=0;
delay();
led9=1;
led4=0;
delay();
led4=1;
}
}
}
void int_()interrupt 2
{
flag=1;
}
不用中断:
#include
#define uint unsigned int
***it LED9=P2^0;
***it LED10=P2^1;
***it LED8=P2^2;
***it LED4=P2^3;
***it LED7=P2^4;
***it k1=P3^2;
void delay(uint k)
{
uint i,j;
for (i=0;i
{
for (j=0;j<121;j++)
{;}
}
}
void main (void)
{
if(!k1)
{
while(1)
{
LED9=0;
delay(1000);
LED9=1;
LED10=0;
LED8=0;
delay(1000);
LED10=1;
LED8=1;
LED4=0;
LED7=0;
delay(1000);
LED4=1;
LED7=1;
}
}
}
2020-10-19 23:06:48
最佳答案
楼主,你这是要跟单片机比手速吗,单片机一上电,main函数就开始运行了,执行到if语句,flag=0;所以不执行里面的内容,main函数也就到头了,后面你进入中断令flag=1,也仅仅是令flag=1了,除非你手速够快使单片机执行到if语句之前按下开关
楼主,你这是要跟单片机比手速吗,单片机一上电,main函数就开始运行了,执行到if语句,flag=0;所以不执行里面的内容,main函数也就到头了,后面你进入中断令flag=1,也仅仅是令flag=1了,除非你手速够快使单片机执行到if语句之前按下开关
2
举报
-
纾寒:
所以,不用中断的时候,为什么会重复判断呢?我用单片机 不论什么时候按键,都可以开启流水灯,但是中断就必须你说的比手速咯 为什么呢
-
阿迪达斯123
回复
纾寒:
因为你不用中断的那个程序跑飞了!main函数不加while死循环程序执行完后不知道干什么就会乱跑,然后触发单片机软复位,所以你才会看到它会重复判断