一个小程序

[复制链接]
2826|12
 楼主| hrg13579 发表于 2011-3-11 09:56 | 显示全部楼层 |阅读模式
#include<reg52.h>
#define LED P1
void delayms(unsigned int i);/*延时函数*/
void main()
{   unsigned char k,z,y;
    for(k=0;k<3;k++)
    {  LED=0xaa;
       delayms(300);
       LED=0x55;
    delayms(300);
}
for(z=0;z<3;z++)
{  LED=0xfe;
    for(y=0;y<7;y++)
    {  
       delayms(300);
       LED=LED<<1;
       delayms(300);
    }   
    }
}
void delayms(unsigned int i)
{
  unsigned int j;
  for(;i>0;i--)
    for(j=125;j>0;j--);
}
大家帮我看下,为什么这程序运行完一整圈不会停,而是不停的循环?
心静自然凉 发表于 2011-3-11 10:01 | 显示全部楼层
因为主程序里没有停止的语言,可以在程序最后加一句  
while(1);
 楼主| hrg13579 发表于 2011-3-11 10:04 | 显示全部楼层
不是会自动停止吗?当程序全部运行完一整圈的时候,k=2了啊,怎么还能进入第一个for循环?奇怪
心静自然凉 发表于 2011-3-11 10:07 | 显示全部楼层
看来你还没理解for语句的意思呀
当程序运行到for(k=0;k<3;k++)时:
1,先赋值k=0
2,再判断k<3是否成立
3,若成立,执行内容后k++,否则退出for循环
ayb_ice 发表于 2011-3-11 10:09 | 显示全部楼层
你没有叫停止
void main()
{   unsigned char k,z,y;
    for(k=0;k<3;k++)
    {  LED=0xaa;
       delayms(300);
       LED=0x55;
    delayms(300);
    for(;;);
}
ganxiang 发表于 2011-3-11 10:38 | 显示全部楼层
呵呵,并不是你的程序有问题,你应该去看看"startup"那个汇编代码,里面有你想知道的原因。
sg0755 发表于 2011-3-11 11:20 | 显示全部楼层
还得努力学习呀
zjswuyunbo 发表于 2011-3-11 17:29 | 显示全部楼层
所有 for(k=0;k<3;k++)
改为
for(;k<3;k++)
王利110 发表于 2011-3-12 22:03 | 显示全部楼层
keil中似乎默认的就是一个大循环;.........
linqing171 发表于 2011-3-12 23:07 | 显示全部楼层
单片机跑完main之后,继续往后跑,跑到最后PC溢出就又跑回来了.
在main函数最后加入 while(1);
不让它出去.
abin0415 发表于 2011-3-13 08:32 | 显示全部楼层
while(1)
{
unsigned char k,z,y;
    for(k=0;k<3;k++)
    {  LED=0xaa;
       delayms(300);
       LED=0x55;
    delayms(300);
}
for(z=0;z<3;z++)
{  LED=0xfe;
    for(y=0;y<7;y++)
    {  
       delayms(300);
       LED=LED<<1;
       delayms(300);
    }   
    }
}
}
主函数可以改成这样。
nan_banqiu 发表于 2011-3-13 10:13 | 显示全部楼层
nan_banqiu 发表于 2011-3-13 10:14 | 显示全部楼层
呵呵,并不是你的程序有问题,你应该去看看"startup"那个汇编代码,里面有你想知道的原因。
ganxiang 发表于 2011-3-11 10:38
不知道啥意思 望指点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:胸有凌云志,无高不可攀!

300

主题

587

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部