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

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

  • 相关阅读:
    centos 7 安装zabbix 4.0
    django Middleware
    初探paramiko
    python中的反射
    python异常处理
    双绞线
    简易的CMDB服务端
    4-初识Django Admin
    数据资产管理实践纲要
    matplotlib 散点图,为不同区域的点添加不同颜色
  • 原文地址:https://www.cnblogs.com/yfish/p/10859184.html
Copyright © 2011-2022 走看看