一个小问题求解

[复制链接]
2397|9
 楼主| ningling_21 发表于 2013-1-20 13:46 | 显示全部楼层 |阅读模式
4路AD值数码管显示;
4路拨码用来屏蔽显示;(拨到ON位置时禁止该路数据显示)
部分程序如下
........
disp_chn++;      //显示通道切换
if(disp_chn>3)
{
    disp_chn=0;
}

if(disp_chn==0 && dis_ch1==1)   //如果显示第1路,且第1路被屏蔽,则切换到下一路
{
    disp_chn=1;
}
if(disp_chn==1 && dis_ch2==1)   //如果显示第2路,且第2路被屏蔽,则切换到下一路
{
    disp_chn=2;
}

if(disp_chn==2 && dis_ch3==1)   //如果显示第3路,且第3路被屏蔽,则切换到下一路
{
    disp_chn=3;
}

if(disp_chn==3 && dis_ch2==1)   //如果显示第4路,且第4路被屏蔽,则切换到第一路
{
    disp_chn=0;
}


结果:当第1路被屏蔽时,第一路也能显示出来,求解...
NE5532 发表于 2013-1-20 13:55 | 显示全部楼层
没有看懂你的需求,但是提醒楼主,你这样写IF,所有的IF都会被顺次执行的,你是不是想写else if??
dirtwillfly 发表于 2013-1-20 16:03 | 显示全部楼层
这样写,不如用case了
 楼主| ningling_21 发表于 2013-1-20 17:55 | 显示全部楼层
NE5532 发表于 2013-1-20 13:55
没有看懂你的需求,但是提醒楼主,你这样写IF,所有的IF都会被顺次执行的,你是不是想写else if?? ...

就是说,上面的程序会造成第一路屏蔽不掉.
周文家Asking 发表于 2013-1-20 19:14 | 显示全部楼层
if(disp_chn==3 && dis_ch2==1)   这是你的第四路    dis_ch2   跟第二路一样了。
NE5532 发表于 2013-1-20 20:17 | 显示全部楼层
ningling_21 发表于 2013-1-20 17:55
就是说,上面的程序会造成第一路屏蔽不掉.

看不懂你的程序,因为里面标志太多,但是直觉就是这样的if可能有问题,建议楼主画一下流程图。
 楼主| ningling_21 发表于 2013-1-21 08:00 | 显示全部楼层
NE5532 发表于 2013-1-20 20:17
看不懂你的程序,因为里面标志太多,但是直觉就是这样的if可能有问题,建议楼主画一下流程图。 ...

总共只有4个标志,分别代表4路的屏蔽情况,1表示已屏蔽,0表示未屏蔽。
qingx 发表于 2013-1-21 08:58 | 显示全部楼层
这个有点看不懂
nbsmaps 发表于 2013-1-21 09:35 | 显示全部楼层
在C51中设置编译优化级别,这种语句,很可能会被C优掉。也可写成:if((disp_chn==0) &&( dis_ch1==1)) 试试看吧
 楼主| ningling_21 发表于 2013-1-22 20:29 | 显示全部楼层
换方案,已解决!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5015

主题

17834

帖子

51

粉丝
快速回复 在线客服 返回列表 返回顶部