LCD code help

Your B array has only 7 entries and not 8 but you access the 8th (B[7]) when using digitalWrite().

for(byte nBitNo= 0; nBitNo < 8; nBitNo++)
  digitalWrite(A[nBitNo], bitRead((byte)myChar, nBitNo));

This does the same without the intermediate array B. HIGH is defined as 0x01 and LOW as 0x00.

Additionally I think you have to reverse array A, because in your example D0 is the most significant bit and you set it at A[0] / bitRead(..., 0) which handles the least significant bit.