找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2970|回复: 12
收起左侧

遇到奇怪的问题了,求助

[复制链接]
ID:105811 发表于 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--);
       }

}

}
回复

使用道具 举报

ID:105811 发表于 2016-4-18 21:45 | 显示全部楼层
有人知道是什么原因么?
回复

使用道具 举报

ID:105811 发表于 2016-4-21 22:06 | 显示全部楼层
等高人回答
回复

使用道具 举报

ID:114189 发表于 2016-4-21 23:33 来自触屏版 | 显示全部楼层
前面i=1

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:114189 发表于 2016-4-21 23:35 来自触屏版 | 显示全部楼层
i=i++ 改为i=i+1

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:105811 发表于 2016-4-23 17:04 | 显示全部楼层
试了一下下改成i=i+1;就可以了。这是为什么呢?两种表达方式不都是一样么?怎么会有区别

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:114031 发表于 2016-4-23 20:54 | 显示全部楼层
5L正解~~~~~~~~~
回复

使用道具 举报

ID:116291 发表于 2016-4-24 11:25 | 显示全部楼层

i=i++ 改为i=i+1

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:116288 发表于 2016-4-24 11:53 | 显示全部楼层
看看汇编代码,存在以下区别
QQ图片20160424114948.png
QQ图片20160424115052.png
QQ图片20160424115228.png

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:116288 发表于 2016-4-24 11:58 | 显示全部楼层
实际上i=i++;先执行了等于的操作,把1赋值给通用寄存器,然后执行i++的操作,然后又把寄存器的值赋值给i,这样就还是1了

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:116288 发表于 2016-4-24 12:00 | 显示全部楼层
我也不知道为什么会这样编译,本来上传的图片怎么没了?你自己仿真看看汇编代码就清楚了

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:87568 发表于 2016-4-24 19:24 | 显示全部楼层
按照运算符的运算规则,i=1;i=i++;其结果不会改变。直接使用i++;就行了!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表