void main() { while(1) { P2=0xfe; //1111 1110 // delay(60000); } }
代码的结果是D1一直亮,这个结果是可以解释的,因为有一个无限循环的while,导致P2不间断的被设置0xFE,这个值的意思就是让D1亮,一时设置一时亮,一直设置一直亮,很好理解。
但是下面的代码是加了delay函数的
void main() { while(1) { P2=0xfe; //1111 1110 delay(60000); } }
结果也是D1一直亮,这里我就想不明白,CPU是怎么执行这个的。现在想到的一种解释就是delay的时间很短,短到肉眼感觉不出来。
我做过几个实验,0xfd是让D2亮 0xFE是让D1亮
while(1) { P2=0xfd; //1111 1110 delay(5000); P2=0xfe; delay(5000); } 能感觉到闪烁 while(1) { P2=0xfd; //1111 1110 delay(2500); P2=0xfe; delay(2500); } 能感觉到闪烁 while(1) { P2=0xfd; //1111 1110 delay(2000); P2=0xfe; delay(2000); } 能感觉到闪烁 while(1) { P2=0xfd; //1111 1110 delay(1500); P2=0xfe; delay(1500); } 能感觉到闪烁 while(1) { P2=0xfd; //1111 1110 delay(1000); P2=0xfe; delay(1000); } 肉眼感觉不到闪烁
那么这个delay(1000)用多长时间呢?
经过调试
0.00019550
0.00470500
发现是0.0046秒
也就是说两个灯切换亮,时间少于这个值就不会感觉出来。
while(1) { P2=0xfe; //1111 1110 delay(60000); }
我delay(60000),换算过来就是0.276秒,这个时间已经能感觉出来了,为什么D1始终不闪烁?
我delay(100),我甚至调试过,发现流程并不会跨越过这个耗时操作。
void main() { while(1) { P2=0xfe; //1111 1110 delay(1500); P2=0xff; //1111 1111 delay(1500); } }
同一个灯,要有亮灭的过程才会感觉闪烁。