单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2159|回复: 6
收起左侧

四路单片机流水灯问题 怎么想也想不通

[复制链接]
ELUVOLES 发表于 2016-6-18 20:47 | 显示全部楼层 |阅读模式
最近遇到一个很有意思的问题,怎么想也想不通。程序如下。
这是一个四路流水灯电路。
#include<reg52.h>
unsigned char const EL[]={0X01,0X02,0X04,0X08};
void delay(unsigned long cnt)
{
while(--cnt);
}
main()
{
unsigned char i=0;
while(1)
{  
     P2=EL [ i ] ;
           delay(80000);
           if(i>=3)  
           {  
             i=0;
                }
       else
          {
                  i++;
          }        
}
}
while循环改成以下方式照样运行
/* while(1)
{

       P2=EL
[ i ] ;
           delay(80000);
           i++;
           if(i>=4)  
           {  
             i=0;
                }
}
}          */

不懂为什么一个检测3一个检测4,希望高手详细解答,谢谢了先。
回复

使用道具 举报

zl2168 发表于 2016-6-18 21:09 | 显示全部楼层
区别是执行 i++在判断i前还是判断i后。
回复

使用道具 举报

无效楼层,该帖已经被删除
无效楼层,该帖已经被删除
luoluoluo136 发表于 2016-6-18 22:43 | 显示全部楼层
仔细看看i值的变化就知道了~
回复

使用道具 举报

a550670331 发表于 2016-6-19 11:45 | 显示全部楼层
zi xi kan
回复

使用道具 举报

liuyimao485812 发表于 2016-6-19 15:10 | 显示全部楼层
实际上都是0~3
回复

使用道具 举报

yzwzfyz 发表于 2016-6-19 16:17 | 显示全部楼层
2楼正解:
1、i=0                i=1               i=2               i=3                改i=0
1、0X01→延时→0X02→延时→0X04→延时→0X08→延时→改i=0
1、亮1------------亮2------------亮3------------亮4-------------改i=0
当i=3时亮4延时后才改成0,所以亮4了一个延时的时间,程序OK!
----------------------------------------------------------------------------
2、i=0                i=1               i=2               i=3                i=4立即改i=0
2、0X01→延时→0X02→延时→0X04→延时→0X08→延时→改i=0
2、亮1------------亮2------------亮3------------亮4-------------改i=0
回复

使用道具 举报

 楼主| ELUVOLES 发表于 2016-6-19 19:49 | 显示全部楼层
yzwzfyz 发表于 2016-6-19 16:17
2楼正解:
1、i=0                i=1               i=2               i=3                改i=0
1、0X ...

懂了,谢谢大家了。
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机 联系QQ:125739409;技术交流QQ群582644647

Powered by 单片机教程网

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