zoukankan      html  css  js  c++  java
  • 延时函数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);
              }                  
    
    }

     同一个灯,要有亮灭的过程才会感觉闪烁。

  • 相关阅读:
    2017-4-6校内训练
    [BZOJ]1023: [SHOI2008]cactus仙人掌图
    [BZOJ]1086: [SCOI2005]王室联邦
    [BZOJ]1055: [HAOI2008]玩具取名
    [BZOJ]3527: [Zjoi2014]力
    [BZOJ]2820: YY的GCD
    【BZOJ3233】【tyvj1729】文艺平衡树
    【数据结构】【平衡树】无旋转treap
    【BZOJ2733】【HNOI2012】永无乡
    【BZOJ3224】【tyvj1728】普通平衡树
  • 原文地址:https://www.cnblogs.com/yfish/p/10859184.html
Copyright © 2011-2022 走看看