需求是针对不同的控制变量实现不同的响应需求,但是存在一个优先级的问题。
如果是只满足0 > 5 > 6 > 7 > 8的话,可以用continue。注意运用continue和break的区别。
break用于完全结束一个循环,跳出循环体执行循环后面的语句。
continue和break有点类似,区别在于continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环。
while循环break是用于永久终止循环。即不执行本次循环中break后面的语句,直接跳出循环。
while循环continue是用于终止本次循环。即本次循环中continue后面的代码不执行,进行下一次循环的入口判断。
因此在while(1)的时候要尤其的注意。如果用到了break的话就直接跑飞出去了。
或者直接看这个流程图就啥都懂了。
这里记录一下如果是只满足0 > 5 > 6 > 7 > 8的代码。
if(adc_value[0] < 0.2 || adc_value[0] > 1.0)
{
DRM0;
test[0] ++;
continue;
}
if(adc_value[1] > 0.2 && adc_value[1] < 0.9)
{
DRM5;
test[5] ++;
continue;
}
if(adc_value[2] > 0.2 && adc_value[2] < 0.9)
{
DRM6;
test[6] ++;
continue;
}
if(adc_value[3] > 0.2 && adc_value[3] < 0.9)
{
DRM7;
test[7] ++;
continue;
}
if(adc_value[4] > 0.2 && adc_value[4] < 0.9)
{
DRM8;
test[8] ++;
continue;
}
注意这个时候continue是只循环后面的语句也不再执行了,因此当有需要延时的话延时就放在上面好了。
当然也可以用用if else if的结构来写,if else if是当if满足的情况下,后面的else if就不会再判断再执行了。这一点需要注意。
代码如下:
if(adc_value[0] < 0.2 || adc_value[0] > 1.0)
{
DRM0;
test[0] ++;
}
else if(adc_value[1] > 0.2 && adc_value[1] < 0.9)
{
DRM5;
test[5] ++;
}
else if(adc_value[2] > 0.2 && adc_value[2] < 0.9)
{
DRM6;
test[6] ++;
}
else if(adc_value[3] > 0.2 && adc_value[2] < 0.9)
{
DRM7;
test[7] ++;
}
else if(adc_value[4] > 0.2 && adc_value[2] < 0.9)
{
DRM8;
test[8] ++;
}
另外,当把1234再加进来的话,就需要满足0的优先级最大,然后 5 > 6 > 7 > 8;1 >2 > 3 > 4.
代码如下:
if(AD0)
{
DRM0;
}
else if(AD1)
{
DRM5;
if(AD2)
{
DRM2;
}
else if(AD3)
{
DRM3;
}
else if(AD4)
{
DRM4;
}
}
else if(AD2)
{
DRM6;
if(AD1)
{
DRM1;
}
else if(AD3)
{
DRM3;
}
else if(AD4)
{
DRM4;
}
}
else if.......
开玩笑的,这还没写完,这样写估计要被别人锤死了。
代码如下:
if(adc_value[0] < 0.2 || adc_value[0] > 1.0)
{
DRM0;
test[0] ++;
continue;
}
if(adc_value[1] > 0.2 && adc_value[1] < 0.9)
{
DRM5;
test[5] ++;
}
else if(adc_value[2] > 0.2 && adc_value[2] < 0.9)
{
DRM6;
test[6] ++;
}
else if(adc_value[3] > 0.2 && adc_value[2] < 0.9)
{
DRM7;
test[7] ++;
}
else if(adc_value[4] > 0.2 && adc_value[2] < 0.9)
{
DRM8;
test[8] ++;
}
if(adc_value[1] < 0.2)
{
DRM1;
test[1] ++;
}
else if(adc_value[2] < 0.2)
{
DRM2;
test[2] ++;
}
else if(adc_value[3] < 0.2)
{
DRM3;
test[3] ++;
}
else if(adc_value[4]< 0.2)
{
DRM4;
test[4] ++;
}
另外还可以用goto还解决,不过这个不要经常用,难以维护。
代码如下:
if(adc_value[0] < 200 || adc_value[0] > 1000)
{
// //DRM0;
test[0] ++;
goto test2;
}
if(adc_value[1] > 200 && adc_value[1] < 900)
{
// //DRM5;
test[5] ++;
goto test1;
}
if(adc_value[2] > 200 && adc_value[2] < 900)
{
// //DRM6;
test[6] ++;
goto test1;
}
if(adc_value[3] > 200 && adc_value[3] < 900)
{
// //DRM7;
test[7] ++;
goto test1;
}
if(adc_value[4] > 200 && adc_value[4] < 900)
{
// //DRM8;
test[8] ++;
goto test1;
}
test1:
if(adc_value[1] < 200)
{
// //DRM1;
test[1] ++;
goto test2;
}
if(adc_value[2] < 200)
{
// //DRM2;
test[2] ++;
goto test2;
}
if(adc_value[3] < 200)
{
// //DRM3;
test[3] ++;
break;
}
if(adc_value[4]< 200)
{
// //DRM4;
test[4] ++;
goto test2;
}
test2:
//delay 1s
Timer_Wait(1000);