找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2793|回复: 12
打印 上一主题 下一主题
收起左侧

遇到奇怪的问题了,求助

[复制链接]
跳转到指定楼层
楼主
此程序是用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--);
       }

}

}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:114189 发表于 2016-4-21 23:35 来自手机 | 只看该作者
i=i++ 改为i=i+1

评分

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

查看全部评分

回复

使用道具 举报

6#
ID:105811 发表于 2016-4-23 17:04 | 只看该作者
试了一下下改成i=i+1;就可以了。这是为什么呢?两种表达方式不都是一样么?怎么会有区别

评分

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

查看全部评分

回复

使用道具 举报

7#
ID:114031 发表于 2016-4-23 20:54 | 只看该作者
5L正解~~~~~~~~~
回复

使用道具 举报

8#
ID:116291 发表于 2016-4-24 11:25 | 只看该作者

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

评分

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

查看全部评分

回复

使用道具 举报

9#
ID:116288 发表于 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

评分

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

查看全部评分

回复

使用道具 举报

10#
ID:116288 发表于 2016-4-24 11:58 | 只看该作者
实际上i=i++;先执行了等于的操作,把1赋值给通用寄存器,然后执行i++的操作,然后又把寄存器的值赋值给i,这样就还是1了

评分

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

查看全部评分

回复

使用道具 举报

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

评分

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

查看全部评分

回复

使用道具 举报

12#
ID:87568 发表于 2016-4-24 19:24 | 只看该作者
按照运算符的运算规则,i=1;i=i++;其结果不会改变。直接使用i++;就行了!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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