延時函數delay的一點疑問


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);
          }                  

}

 

 同一個燈,要有亮滅的過程才會感覺閃爍。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM