标题: 单片机呼吸灯代码问题求教 [打印本页]

作者: 在线    时间: 2019-10-26 20:40
标题: 单片机呼吸灯代码问题求教
不知道哪里出了问题呼吸灯在逐渐达到最亮后会突然灭掉零点几秒  然后在亮起来逐渐变暗

代码如下


#include <reg52.h>
sbit led=P1^1;
void time(unsigned int t)
{
while(--t);
}                            //延时函数
void main()
     {
unsigned int m=400,k=0;
          while(1)        //主循环
            {
                       for(k=1;k<m;k++)
               {
          led=0;
     time(k);
          led=1;        
          time(m-k);
               }              //逐渐变亮


               for(k=400;k>0;k--)
               {
                         led=0;
                         time(k);
                         led=1;
                         time(m-k);
                   }           //逐渐变暗
            }                                             
          }



作者: mengzhixinheng    时间: 2019-10-27 06:44
查看一下K值的变化就知道了
作者: wulin    时间: 2019-10-27 09:54
错误在K值不能为0,否则带入延时函数后while(--t);,--t是先运算再判断,t值就成了65535。led=1;就要延时2*t+5us。
可以改为while(t--);,t--是先判断再运算。当然也可以不改延时函数而是改for循环条件解决。
作者: zhai8765    时间: 2019-10-27 10:45
K值出问题了。
作者: 在线    时间: 2019-10-27 11:01
wulin 发表于 2019-10-27 09:54
错误在K值不能为0,否则带入延时函数后while(--t);,--t是先运算再判断,t值就成了65535。led=1;就要延时2* ...

https://v.youku.com/v_show/id_XNDQxMzIzMDA0MA==.html?spm=a2h3j.8428770.3416059.1


视频如上  我改成while(t--)还是一样

作者: wulin    时间: 2019-10-27 12:22
在线 发表于 2019-10-27 11:01
视频如上  我改成while(t--)还是一样

改延时while(t--);或改for循环中参数time(m-k+1);,随便改哪一种都可以,只是呼吸周期略有区别。
  1. #include <reg52.h>
  2. sbit led=P1^1;
  3. void time(unsigned int t)
  4. {
  5.         while(t--);
  6. }                            //延时函数
  7. void main()
  8. {
  9.         unsigned int m=500,k=0;
  10.         while(1)        //主循环
  11.         {
  12.                 for(k=1;k<m;k++)
  13.                 {
  14.                         led=0;
  15.                         time(k);
  16.                         led=1;        
  17.                         time(m-k);
  18.                 }              //逐渐变亮
  19.                 for(k=500;k>0;k--)
  20.                 {
  21.                         led=0;
  22.                         time(k);
  23.                         led=1;
  24.                         time(m-k);
  25.                 }           //逐渐变暗
  26.         }
  27. }
复制代码


#include <reg52.h>
sbit led=P1^1;
void time(unsigned int t)
{
        while(--t);
}                            //延时函数
void main()
{
        unsigned int m=500,k=0;
        while(1)        //主循环
        {
                for(k=1;k<m;k++)
                {
                        led=0;
                        time(k);
                        led=1;        
                        time(m-k+1);
                }              //逐渐变亮
                for(k=500;k>0;k--)
                {
                        led=0;
                        time(k);
                        led=1;
                        time(m-k+1);
                }           //逐渐变暗
        }                                             
}




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1