有没有可能简化这一说法?
如果我使用case语句和while循环,情况也是一样的。

// Led Binary
         if (volt == 0 )
         {
             LATGbits.LATG1    = 0 ; //DO1 OFF
             LATGbits.LATG0    = 1 ; //DO2 OFF
             LATGbits.LATG13   = 1 ; //DO3 OFF
             LATGbits.LATG14   = 1 ; //DO4 OFF
         }
         else if (volt == 2 )
         {
             LATGbits.LATG1    = 0 ; //DO1 OFF
             LATGbits.LATG0    = 0 ; //DO2 On
             LATGbits.LATG13   = 1 ; //DO3 OFF
             LATGbits.LATG14   = 1 ; //DO4 OFF
         }
         else if (volt == 3 )
         {
             LATGbits.LATG1    = 1 ; //DO1 On
             LATGbits.LATG0    = 0 ; //DO2 On
             LATGbits.LATG13   = 1 ; //DO3 OFF
             LATGbits.LATG14   = 1 ; //DO4 OFF
         }
         else if (volt == 4 )
         {
             LATGbits.LATG1    = 0 ; //DO1 OFF
             LATGbits.LATG0    = 1 ; //DO2 OFF
             LATGbits.LATG13   = 0 ; //DO3 On
             LATGbits.LATG14   = 1 ; //DO4 OFF
         }
         else if (volt == 5 )
         {
             LATGbits.LATG1    = 1 ; //DO1 On
             LATGbits.LATG0    = 1 ; //DO2 OFF
             LATGbits.LATG13   = 0 ; //DO3 On
             LATGbits.LATG14   = 1 ; //DO4 OFF
         }
         else if (volt == 6 )
         {
            LATGbits.LATG1    = 0 ; //DO1 OFF
            LATGbits.LATG0    = 0 ; //DO2 On
            LATGbits.LATG13   = 0 ; //DO3 On
            LATGbits.LATG14   = 1 ; //DO4 OFF

         }
         else if (volt == 7 )
         {
             LATGbits.LATG1    = 1 ; //DO1 On
             LATGbits.LATG0    = 0 ; //DO2 On
             LATGbits.LATG13   = 0 ; //DO3 On
             LATGbits.LATG14   = 1 ; //DO4 OFF
         }
         else if (volt == 8 )
         {
             LATGbits.LATG1    = 0 ; //DO1 OFF
             LATGbits.LATG0    = 1 ; //DO2 OFF
             LATGbits.LATG13   = 1 ; //DO3 OFF
             LATGbits.LATG14   = 0 ; //DO4 On
         }
         else if (volt == 9 )
         {
             LATGbits.LATG1    = 1 ; //DO1 On
             LATGbits.LATG0    = 1 ; //DO2 OFF
             LATGbits.LATG13   = 1 ; //DO3 OFF
             LATGbits.LATG14   = 0 ; //DO4 On
         }
         else if (volt == 10 )
         {
             LATGbits.LATG1    = 1 ; //DO1 On
             LATGbits.LATG0    = 1 ; //DO2 OFF
             LATGbits.LATG13   = 0 ; //DO3 On
             LATGbits.LATG14   = 1 ; //DO4 OFF
         }

从上面的代码显示,当达到一定电压时,LED将打开或关闭。代码中还有很多关于LED输出的声明。有些LED我也声明使用按位函数,但它是相同的。
谢谢。

最佳答案

一种解决方案是使用查找表将volt值转换为四位LED值,然后使用逐位运算符设置每个LED输出

static const int ledTable[16] = { 14, 14, 12, 13, 10, 11, 8, 9, 6, 7, 11, 14, 14, 14, 14, 14 };

int value = ledTable[volt];
LATGbits.LATG1  = value & 1;
LATGbits.LATG0  = (value >> 1) & 1;
LATGbits.LATG13 = (value >> 2) & 1;
LATGbits.LATG14 = (value >> 3) & 1;

你也可以用数学方法确定LED的值,例如。
int value = volt ^ 14;

关于c - 简化声明语句中的逻辑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32240789/

10-15 06:06