C语言编52单片机

[复制链接]
4899|22
 楼主| tanfeng 发表于 2010-2-7 18:22 | 显示全部楼层 |阅读模式
本帖最后由 tanfeng 于 2010-2-8 11:33 编辑

小弟写了一个静态显示程序,不知为什么在for循环中加入if(i=17)i=0;这一句会造成程序一直判断i是否等于17?
#include<reg52.h>
#define unit unsigned int
unit code table[]={ 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x40, 0x80 };  
unit i,b,x,y,z;
void delay(unit b) ;
    void main()
{ i=0;
        
  while(1)
  { for(i==0;i<=17;i++)
  
       { P2=0x3c;
     
     P0=table;
   
     delay(1000) ;  
                                                                     
      //if(i=17)
      // i=0;
      //放在for中造成死循环?

    }
        
               if(i=17)
      
         i=0;
  
  }
  }
      
  void delay(unit b)
  { unit x,y;
  for(x=b;x>0;x--)
  for(y=110;y>0;y--);

  }
catwill 发表于 2010-2-7 19:09 | 显示全部楼层
感觉有几个错误:
if(i=17);i=0;
注意if 中的 "i=17",
应该用“i == 17”吧?
有时候=操作符又叫“现在就是”操作符-----你问i是不是等于17??是的,它现在就等于17;

还有这句
for(i==0;i<=17;i++)
给i赋值的时候应该用i = 0 而不是 “==”了~~


其他的没仔细看。
catwill 发表于 2010-2-7 19:11 | 显示全部楼层
还有 if(i == 17)
后面应该没分号的吧?
至少90%以上的情况都应该没分号的。
hulan1985 发表于 2010-2-7 21:50 | 显示全部楼层
呵呵,新手……
 楼主| tanfeng 发表于 2010-2-7 23:39 | 显示全部楼层
if(i=17);i=0;中的if(i=17)确实多了个分号,但在调试的时候没用这个分号,我肯定不是错在==号上,望大侠指出
1382944 发表于 2010-2-8 08:57 | 显示全部楼层
我数了一下,怎么只有7个大括号,是不是这里出错呢?应该是双数才对啊!
uzb9401 发表于 2010-2-8 10:42 | 显示全部楼层
if(i=17)这句话绝对错了,应该是if(i==17),另外  P0=table ;  中table的元素看不出有增量变化,如何轮流显示这18个字??
DM_man 发表于 2010-2-8 10:59 | 显示全部楼层
应该是
if( i==17 )
{
       i=0;
}
才是吧;
如果是if(i=17);i=0;如果if(i=17);这一句其实没什么用,一是i=17是个赋值表达式,会是条件始终为真,二if后加分号,然后i=0;这个i=0;这一句始终都会执行 for循环不死才怪
 楼主| tanfeng 发表于 2010-2-8 11:28 | 显示全部楼层
谢谢DM_man,果然是在if(i=17);出问题。这一句是有用的,因为第二次循环显示时要从第一个显示代码开始。
catwill 发表于 2010-2-8 11:46 | 显示全部楼层
感觉有几个错误:
if(i=17);i=0;
注意if 中的 "i=17",
应该用“i == 17”吧?
有时候=操作符又叫“现在就是”操作符-----你问i是不是等于17??是的,它现在就等于17;

明明我在2楼就直接说了嘛……
IC_99 发表于 2010-2-8 16:57 | 显示全部楼层
一直判断是因为 if(i=17);i=0; 在while(1)中,当然就一直判断啦
110xia 发表于 2010-2-9 15:13 | 显示全部楼层
建议大哥,把C语言的书再看看
top123 发表于 2010-2-10 14:38 | 显示全部楼层
研究下操作符吧
82515511ed5de29 发表于 2010-2-12 23:39 | 显示全部楼层
学习了!很好我想我是新手在这样的环境下 会有提高的!
求知的电工 发表于 2010-2-15 12:03 | 显示全部楼层
看过别人的错误,提高自己的判断力。支持大胆的。。
ljk5214227 发表于 2010-2-17 17:43 | 显示全部楼层
判断一个字符时多少,用“==”
给一个字符赋值,用“=”

建议找本《c程序设计讲义》慢慢看
woodscud 发表于 2010-2-21 22:11 | 显示全部楼层
敢晒就能进步!
wkshengren 发表于 2010-2-21 23:44 | 显示全部楼层
主要是这句话适合出现在while循环而不是for循环,因为for循环当这18圈循环结束之后,会重新赋值i=0的,也就是说在再次执行for循环最开始会执行for小括号中的第一条命令,也就是使i=0,没有必要画蛇添足了,而且这样即使改成if(i==17) i=0,实际也是死循环,跳不出for的,因为for小括号中的第二条命令是跳出for的条件判断指令,在这个程序中,实际是要使i等于18才跳出for循环,然而你这个i不肯能等于18(即大于17),所以外面的while(1)就是摆设了
code-03 发表于 2010-2-22 03:42 | 显示全部楼层
还是建议先学学c语言吧。。。。
kagoo 发表于 2010-2-22 14:50 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

1

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