找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1683|回复: 5
打印 上一主题 下一主题
收起左侧

单片机呼吸灯代码问题求教

[复制链接]
跳转到指定楼层
楼主
ID:469787 发表于 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);
                   }           //逐渐变暗
            }                                             
          }


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:89515 发表于 2019-10-27 06:44 来自手机 | 只看该作者
查看一下K值的变化就知道了
回复

使用道具 举报

板凳
ID:213173 发表于 2019-10-27 09:54 | 只看该作者
错误在K值不能为0,否则带入延时函数后while(--t);,--t是先运算再判断,t值就成了65535。led=1;就要延时2*t+5us。
可以改为while(t--);,t--是先判断再运算。当然也可以不改延时函数而是改for循环条件解决。
回复

使用道具 举报

地板
ID:151924 发表于 2019-10-27 10:45 | 只看该作者
K值出问题了。
回复

使用道具 举报

5#
ID:469787 发表于 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--)还是一样
回复

使用道具 举报

6#
ID:213173 发表于 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);
                }           //逐渐变暗
        }                                             
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表