标题: 遇到奇怪的问题了,求助 [打印本页]

作者: shijingze    时间: 2016-4-18 18:09
标题: 遇到奇怪的问题了,求助
此程序是用74hc138译码器点亮led灯的程序。当在程序中
if(i==9)
         {
   i=0;
}
这段语句前面加延时函数后。i的值一直是1.当把延时去掉后i的值就可以加到9.折是为什么呢?想加个延时函数。源程序如下
#include<reg51.h>
void delay(unsigned int c) ;
sbit A=P0^1;
sbit C=P0^2;
sbit D=P0^3;
main()
{
unsigned char i;
      i=1;
while(1)
  {
   
switch(i)
   
       {
case(1):  A=0,C=0,D=0 ;  //led1 点亮
       break;
case(2):  A=1,C=0,D=0 ;  //led2点亮

       break;
case(3):  A=0,C=1,D=0 ;  //led3点亮

       break;
case(4):  A=1,C=1,D=0 ;  //led4点亮

       break;
case(5):  A=0,C=0,D=1 ;  //led5点亮

       break;
case(6):  A=1,C=0,D=1 ;  //led6点亮

       break;      
case(7):  A=0,C=1,D=1 ;  //led7点亮

       break;
case(8):  A=1,C=1,D=1 ;
        //led8点亮
       break;

}
      delay(9); //加上这个延时函数后i的值就不可以加到9了,一直是1
      
       i=i++;
       if(i==9)
         {
   i=0;
  }
  }  


}


void  delay(unsigned int c)
{
   unsigned char k,j;
    for(;c>0;c--)
       {
    for(k=50;k>0;k--)
       {
          for(j=200;j>0;j--);
       }

}

}

作者: shijingze    时间: 2016-4-18 21:45
有人知道是什么原因么?
作者: shijingze    时间: 2016-4-21 22:06
等高人回答
作者: Action    时间: 2016-4-21 23:33
前面i=1
作者: Action    时间: 2016-4-21 23:35
i=i++ 改为i=i+1
作者: shijingze    时间: 2016-4-23 17:04
试了一下下改成i=i+1;就可以了。这是为什么呢?两种表达方式不都是一样么?怎么会有区别
作者: llxxdd2341    时间: 2016-4-23 20:54
5L正解~~~~~~~~~
作者: liuzhifeng    时间: 2016-4-24 11:25

i=i++ 改为i=i+1
作者: xiangyu20080803    时间: 2016-4-24 11:53
看看汇编代码,存在以下区别

QQ图片20160424114948.png (4.69 KB, 下载次数: 75)

QQ图片20160424114948.png

QQ图片20160424115052.png (3.6 KB, 下载次数: 82)

QQ图片20160424115052.png

QQ图片20160424115228.png (5.54 KB, 下载次数: 74)

QQ图片20160424115228.png

作者: xiangyu20080803    时间: 2016-4-24 11:58
实际上i=i++;先执行了等于的操作,把1赋值给通用寄存器,然后执行i++的操作,然后又把寄存器的值赋值给i,这样就还是1了
作者: xiangyu20080803    时间: 2016-4-24 12:00
我也不知道为什么会这样编译,本来上传的图片怎么没了?你自己仿真看看汇编代码就清楚了
作者: helloccz    时间: 2016-4-24 19:24
按照运算符的运算规则,i=1;i=i++;其结果不会改变。直接使用i++;就行了!!!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1