Du könntest deinen armen µC auch etwas schonen, der shiftet ja sonst herum wie der Böse:
Code:
uint16_t test = 0b0000000000000001;

for(uint16_t i = 1; i<=16;i<<= 1)
{
    if(test & i)
   {
      //Schalte Segment an usw....
   }
}
(is aber auch noch nicht das effizienteste)