Vamos lá...
Primeiro, o C tem esta forma de reduzida de escrever atribuições: x += 1 é o mesmo que x = x +1. Esta mesma forma reduzida pode ser usada com outros operadores, no caso | e &.
Segundo os operadores | e & são os chamados OU e E binários. Eles fazem operações booleanas sobre os bits dos operando, bit a bit:
0x03 | 0x5 = 0x7
0 0 0 0 0 0 1 1
0 0 0 0 0 1 0 1
0 0 0 0 0 1 1 1
0x03 & 0x5 = 0x1
0 0 0 0 0 0 1 1
0 0 0 0 0 1 0 1
0 0 0 0 0 0 0 1
No OU, o resultado será 1 se pelo menos um dos operandos for 1, usamos isto para "ligar" bits. No E, o resultado será zero se pelo menos um dos operandos for 0, usamos isto para "desligar" bits.
Pegando o primeiro caso, P1DIR |= 0x01. Isto é o mesmo que P1DIR = P1DIR | 0x01. O resultado é que o bit menos significativo de P1DIR passará a ser 1, sem alterar o resto.
O ~ é a negação (ou complemento de 1). 0 vira 1 e 1 vira 0. P1OUT &= ~0x01 é o mesmo que P1OUT = P1OUT & 0xFE. O resultado é que o bit menos significativo de P1OUT passará a ser 0, sem alterar o resto.
O uso direto dos "periféricos" dos microcontroladores é, em grande parte, ficar mudando bits em registradores, daí este monte de |= e &=
E tem ainda o ^= onde o operador é o XOR (ou exclusivo) que resulta em 1 somente se os dois operandos forem diferentes. Isto é usado em um monte de truques, como:
x ^= 1 inverte o bit menos significativo
x ^= x é zero (velho truque Jedi para zerar um registrador)
Espero que tenha ajudado.
DQ