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); } }
同一個燈,要有亮滅的過程才會感覺閃爍。