打印

不知道如何实现这个逻辑功能,求朋友们提供个思路!

[复制链接]
1861|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lzm2008|  楼主 | 2011-3-18 18:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现需要调整两个变量Min和Max,Min和Max的范围分别在MinSet()和MaxSet()中限制,
Min和Max通过加减按键调整,过程在此忽略。

液晶屏幕上有一个符号,这个符号我用标志为flag表示

其中flag这个标志是通过按键来开启和关闭的

要求是这样的:
       
        当flag==1时,(即屏幕上对应的符号点亮时)
        Min和Max只能在30到80之间设置
        Min最低能设到30,Max最高能设到80;
        且Min和Max之间的差值在最小时为5。
        当Min通过加减键设置到30时停住。
        Max通过加减键设置到80时停住。

        当flag==0时,(即屏幕上对应的符号熄灭)
        Min和Max只能在0到100之间设置
        且Min和Max之间的差值在最小时为5.
        Min通过加减键设置到0时停住。
        Max通过加减键设置到100时停住。
       
        总体来说就是,根据flag的状态使Min和Max能在对应的限制状态下调整。

我现在是这样做:定义一个标志位flag

//限制MIN
MinSet()
{
        if(flag)//图案点亮时
        {
                if(Min>75)
                        {Min=75;}
                else if(Min>(Max-5))
                        {Min=(Max-5);}
                else if(Min<30)
                        {Min=30;}
        }
        else//图案不点亮时
        {
                if(Min>95)
                        {Min=95;}
                else if(Min>(Max-5))
                        {Min=Max-5;}
                else if(Min<0)
                        {Min=0;}
        }
}
//限制Max
MaxSet()
{
        if(flag)
        {
                if(Max>80){Max=80;}
                else if(Max<(Min+5)){Max=Min+5;}
                else if(Max<35){Max=35;}
        }
        else
        {
                if(Max>100){Max=100;}
                else if(Max<(Min+5)){Max=Min+5;}
                else if(Max<5){Max=5;}
        }
}

在实际操作中大部分情况上面的限制是有效的。
但在一些临界状态下,会有问题。

举个例:
在flag==0这个状态时,我将Min设置为5,Max为10;

这时如果我改变flag状态,即让flag=1;
则会出现Min的值不能确定的状态。

我分析是这样的:当Min为5时,假如进入MinSet()时,由于小于30所以Min=30;
Min等于30时,又大于Max-5,导致Min=10-5;
陷入了类似的死循环。



有点搞不懂如何实现上面要求的功能,有点困惑,求指点思路,谢谢各位!

相关帖子

沙发
谈的元| | 2011-3-18 23:06 | 只看该作者
Min等于30时,又大于Max-5,导致Min=10-5;

你可以修改MAX,不修改MIN 来保证差别为5的关系

使用特权

评论回复
板凳
谈的元| | 2011-3-18 23:06 | 只看该作者
Min等于30时,又大于Max-5,导致Min=10-5;

你可以修改MAX,不修改MIN 来保证差别为5的关系

使用特权

评论回复
地板
zhangmintao| | 2011-3-19 14:42 | 只看该作者
你可以将min小于30放在第一个elseif判断,如果成立就不会进行下一个elseif判断。

使用特权

评论回复
5
lzm2008|  楼主 | 2011-4-14 00:21 | 只看该作者
谢谢各位,最近有点忙,好久没来了!

使用特权

评论回复
6
ye460398672| | 2011-4-14 15:21 | 只看该作者
你把MINset()函数中的   
else if(Min>(Max-5))
{Min=(Max-5);}   和
  else if(Min>(Max-5))
   {Min=Max-5;}
直接去掉试试

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:HOLTEK QQ:710536965 ------------------------------------------------------------------------------

29

主题

184

帖子

0

粉丝