打印

C语言编52单片机

[复制链接]
2998|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 | 只看该作者
呵呵,新手……

使用特权

评论回复
5
tanfeng|  楼主 | 2010-2-7 23:39 | 只看该作者
if(i=17);i=0;中的if(i=17)确实多了个分号,但在调试的时候没用这个分号,我肯定不是错在==号上,望大侠指出

使用特权

评论回复
6
1382944| | 2010-2-8 08:57 | 只看该作者
我数了一下,怎么只有7个大括号,是不是这里出错呢?应该是双数才对啊!

使用特权

评论回复
7
uzb9401| | 2010-2-8 10:42 | 只看该作者
if(i=17)这句话绝对错了,应该是if(i==17),另外  P0=table ;  中table的元素看不出有增量变化,如何轮流显示这18个字??

使用特权

评论回复
8
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循环不死才怪

使用特权

评论回复
9
tanfeng|  楼主 | 2010-2-8 11:28 | 只看该作者
谢谢DM_man,果然是在if(i=17);出问题。这一句是有用的,因为第二次循环显示时要从第一个显示代码开始。

使用特权

评论回复
10
catwill| | 2010-2-8 11:46 | 只看该作者
感觉有几个错误:
if(i=17);i=0;
注意if 中的 "i=17",
应该用“i == 17”吧?
有时候=操作符又叫“现在就是”操作符-----你问i是不是等于17??是的,它现在就等于17;

明明我在2楼就直接说了嘛……

使用特权

评论回复
11
IC_99| | 2010-2-8 16:57 | 只看该作者
一直判断是因为 if(i=17);i=0; 在while(1)中,当然就一直判断啦

使用特权

评论回复
12
110xia| | 2010-2-9 15:13 | 只看该作者
建议大哥,把C语言的书再看看

使用特权

评论回复
13
top123| | 2010-2-10 14:38 | 只看该作者
研究下操作符吧

使用特权

评论回复
14
大浪MM| | 2010-2-12 23:39 | 只看该作者
学习了!很好我想我是新手在这样的环境下 会有提高的!

使用特权

评论回复
15
求知的电工| | 2010-2-15 12:03 | 只看该作者
看过别人的错误,提高自己的判断力。支持大胆的。。

使用特权

评论回复
16
ljk5214227| | 2010-2-17 17:43 | 只看该作者
判断一个字符时多少,用“==”
给一个字符赋值,用“=”

建议找本《c程序设计讲义》慢慢看

使用特权

评论回复
17
woodscud| | 2010-2-21 22:11 | 只看该作者
敢晒就能进步!

使用特权

评论回复
18
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)就是摆设了

使用特权

评论回复
19
code-03| | 2010-2-22 03:42 | 只看该作者
还是建议先学学c语言吧。。。。

使用特权

评论回复
20
kagoo| | 2010-2-22 14:50 | 只看该作者
学习了

使用特权

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

本版积分规则

1

主题

3

帖子

1

粉丝