Byte-to-binary conversion function
return_byte doesn't tell much what the function is intended to do. btoa would be more in line with C naming convention (akin to itoa)
A p variable is pretty much useless. Consider

static unsigned char byte[CHAR_BIT];
unsigned char i;

for(i = 0; i &lt; CHAR_BIT; i++)
    byte[i] = '0' + ((source &amp; (1 &lt;&lt; i)) &gt; 0);

return byte;

Using an unsigned char for indexing is questionable. In any case it doesn't buy you much against a native int.
A boolean expression as + operand may raise some eyebrows (true is guaranteed to be a non-zero in an arithmetic context, but it is not guaranteed to be 1). I recommend to force an arithmetic value by right-shifting source instead of left-shifting the mask:

for(i = 0; i &lt; CHAR_BIT; i++) {
    byte[i] = '0' + (source &amp; 1);
    source &gt;&gt;= 1;
}

You do not null-terminate the resulting string. The fact that your test succeeded is a sheer (un)luck.
You probably know that returning static makes the code non-reentrant and thread-unsafe. You may want to let client provide a space for a resulting string.