打印

关于C51 的for语句 请教大家

[复制链接]
2540|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuanbao502|  楼主 | 2009-3-24 16:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code NUM[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code DIS[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
/////////////////
#define CC 2
void delay(uint k)///////延时
{
 uint i;uchar j;
 for(i=0;i<k;i++)
 {
  for(j=0;j<121;j++);
 }
}
////////////
void Pfrint(uint z)//送显示
{
         P0=NUM[z/10];
  P1=DIS[0];
  delay(1);
  /////////////
  P0=NUM[z%10];
  P1=DIS[1];
  delay(1);
  /////////////
}
void main()////主程序
{
 uchar x=1;
 uchar z;
 uint y;
 
 for(x=1;x<25;x++)
 {
  for(z=0;z<250;z++)
  {y=x*CC;
  Pfrint(y);}
  
 }
}


 

这个程序  用 keil调试 是可以结束的

也就是for语句 的循环是有次数的 

但是我下载到  实验板上面的时候  显示的现象是 0, 2, 4 .......48

然后  再循环了 从48 跳到0 再开始显示?

  for 语句 按道理 循环次数有限的啊

请大虾帮忙

谢谢

相关帖子

沙发
computer00| | 2009-3-24 16:36 | 只看该作者

哈哈,我看中了楼主的Pfrint这个单词有意思....

楼主你的程序没有主循环,跑到最后面又跑回去了。

在后面加个while(1);让它停下来。

使用特权

评论回复
板凳
yuanbao502|  楼主 | 2009-3-24 22:40 | 只看该作者

关于C51 的for语句 请教大家

Pfrint 是自己随便起的一个名字
我E文不好拉
谢谢楼上的
虽然后面加个 while(1) 能让它动态循环停止
但是 如果不加 它是怎么循环的 我还是看不明白
for(z=0;z<250;z++)
  {y=x*CC;
  Pfrint(y);}
这里是执行 250次


for(x=1;x<25;x++)
{
  for(z=0;z<250;z++)
  {y=x*CC;
  Pfrint(y);}
  
}
这个是 250*25次啊
执行完 应该不执行了啊
我用keil单步调试 到最后显示执行250*25次
但是下载到 实验板上却 是循环显示  不知道为什么啊?

使用特权

评论回复
地板
vwwj| | 2009-3-25 01:30 | 只看该作者

主函数必须是死循环,程序才能不停运行


  要是没有死循环,程序运行完了就会跑到没有代码的地方去运行,这样就跑飞了死机然后自动重启

使用特权

评论回复
5
yuanbao502|  楼主 | 2009-3-25 09:31 | 只看该作者

关于C51 的for语句 请教大家

谢谢 上面的 两位

使用特权

评论回复
6
yudongx| | 2009-3-26 22:49 | 只看该作者

建议先用好汇编,然后再进入C,汇编是基础

使用特权

评论回复
7
lelee007| | 2009-3-27 20:06 | 只看该作者

LZ好像没怎么看明白几个高手给的解答哦

哈哈,
吧main函数改成如下的形式
void main()////主程序
{
uchar x=1;
uchar z;
uint y;

for(x=1;x<25;x++)
{
  for(z=0;z<250;z++)
  {y=x*CC;
  Pfrint(y);}
  
}
//主程序死循环
while(1);
//主程序死循环
}

然后再编译下载到你的实验板看看

使用特权

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

本版积分规则

3

主题

16

帖子

0

粉丝