is there possible to simplify this statement ?
There are same if I using the case statement and while loop.
void decode (unsigned char* msg) {
if (strstr (msg, "DO=0x00") != NULL) // 0
{
//00000
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x01") != NULL)// 1
{
//00001
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x02") != NULL)// 2
{
//00010
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x03") != NULL)// 3
{
//00011
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x04") != NULL)// 4
{
//00100
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x05") != NULL)// 5
{
//00101
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x06") != NULL)// 6
{
//00110
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x07") != NULL)// 7
{
//00111
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x08") != NULL)// 8
{
//01000
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x09") != NULL)// 9
{
//01001
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x0A") != NULL)// 10
{
//01010
LATGbits.LATG1 = 1 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 ON
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x0B") != NULL)// 11
{
//01011
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x0C") != NULL)// 12
{
//01100
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x0D") != NULL)// 13
{
//01101
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x0E") != NULL)// 14
{
//01110
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x0F") != NULL)// 15
{
//01111
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x10") != NULL)// 16
{
//10000
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 0 ; //DO5 O1
}
else if (strstr (msg, "DO=0x11") != NULL)// 17
{
//10001
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x12") != NULL)// 18
{
//10010
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x13") != NULL)// 19
{
//10011
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x14") != NULL)// 20
{
//10100
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x15") != NULL)// 21
{
//10101
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x16") != NULL)// 22
{
//10110
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x17") != NULL)// 23
{
//10111
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x18") != NULL)// 24
{
//11000
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x19") != NULL)// 25
{
//11001
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x1A") != NULL)// 26
{
//11010
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x1B") != NULL)// 27
{
//11011
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x1C") != NULL)// 28
{
//11100
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x1D") != NULL)//29
{
//11101
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x1E") != NULL)// 30
{
//11110
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x1F") != NULL)// 31
{
//11111
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
}
The above code shows, when the string is write in HyperTerminal, it will do some action to LED. For example, DO=0x1F will turn on all five LED. Because, based on the 0x1F in binary is IIIII (5-Bit). Is there any ways to simplify the code using bitwise function ?