打印

LED为什么不亮为什么!!!

[复制链接]
1847|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yaoyao1314|  楼主 | 2013-4-1 15:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
//#include "stc.h"
sbit led0 = P1^0;
sbit led1 = P1^1;

  void dealy(void);

void main(void)
{
                unsigned char i,temp = 0x01;
                while(1)
                {
                        for(i=0;i<3; i++)
                        {
                                led0 = 1;
                                  dealy();
                                  led0 = 0;
                                  dealy();
                        }
                        for(i=0;i<3; i++)
                        {
                                led1 = 1;
                                  dealy();
                                  led1 = 0;
                                  dealy();
                        }
                }
}

void dealy(void)
{
        unsigned j = 10,i = 8000;
        while(i--)
        {
           while(j--)
           {}
        }
}
去掉这个 while(j--)
           {}就亮啦这是为什么

相关帖子

沙发
jiaxinhui| | 2013-4-1 16:13 | 只看该作者
你这延时程序好象不对,
while(j--)
{}
其实执行一次后,就不再执行了,因为J一旦变为0. 下次的大循环中就不再执行这个小循环了。
建议你用for条件语句

使用特权

评论回复
板凳
sunnyboy6652| | 2013-4-1 16:21 | 只看该作者
楼主的程序没有问题,我已经运行了,运行结果是第零个led与第一个led轮流闪烁。
即使把  while(j--)
               {}
去掉也没有问题,因为如果不去掉  while(j--);意思是闪烁10x8000ms,去掉后就表示闪烁8000ms

使用特权

评论回复
地板
sunnyboy6652| | 2013-4-1 16:23 | 只看该作者
楼主的程序没有问题,我已经运行了,运行结果是第零个led与第一个led轮流闪烁。
即使把  while(j--)
               {}
去掉也没有问题,因为如果不去掉  while(j--);意思是闪烁10x8000ms,去掉后就表示闪烁8000ms

使用特权

评论回复
5
sunnyboy6652| | 2013-4-1 17:08 | 只看该作者
2楼说的对,刚才没注意while循环的初值问题,如果用原程序(就是加上while(j--))的话,实际上是延时了(10+7999)ms
    延时函数一般用for循环

使用特权

评论回复
6
sunnyboy6652| | 2013-4-1 17:18 | 只看该作者
或者是程序这样改
void dealy(void)
{
       unsigned j = 10,i = 8000;
       for(i=8000;i>0;i--)
           for(j=10;j>0;j--)
}

使用特权

评论回复
7
古董| | 2013-4-1 23:17 | 只看该作者
本帖最后由 古董 于 2013-4-1 23:23 编辑

这样改:
void dealy(void)
{
        unsigned j = 10,i = 8000;
        while(--i)//这里
        {
           while(--j)//这里
           {;}
        }
}
分析原程序:
1.当j=1时,while(j--)为真,继续循环;
2.下一次来时(j--)=0xffff,然后一直下去,最后回到1.
综上就是一个死循环。

使用特权

评论回复
8
ArmLan| | 2013-4-2 16:47 | 只看该作者
同意楼上观点

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

52

帖子

0

粉丝