Writing parallel ASCII data from an UNO[solved]

I DID IT! Thank you, all, for your input! :smiley:

I've shrunk the total byte size of my original 16 character LED display sketch from over 3.2K down to about 1.6K! About 1/2 the size, and accomplishing the same goal! I'm finally starting to "get" C++ programming... altho I'd say I'm only into it about ankle deep... but that's better than when only my toes were touching the water, when I first started this project!

My next project will be to figure out how to SCROLL longer messages. For now, this sketch works PERFECTLY for displaying 16 character messages.

// Message to display
char Msg[] = "Willie did it!:)";
// 16 chars  "................" for the display
 
// datapins; least significant bit first (16 Char display)
const byte datapins[] = {10, 9, 8, 7, 6, 5, 4, 3};

// Write BYTE value as parallel bits on pins for Conctrol
void WRITEC(byte C)
{
  for (int bitcnt = 0; bitcnt < 8; bitcnt++)
  {
    // value (0 or 1) using bitmask to check if a bit in the character is set or not
    bool bitvalue = (C & (1 << bitcnt)) == (1 << bitcnt);
    // set corresponding output
    digitalWrite(datapins[bitcnt], bitvalue);
  }
  Pulse(11); //Write the parallel data to Master Control register
}

// Convert ASCII character into parallel bits on pins for Display
void WRITED(char D)
{
  for (int bitcnt = 0; bitcnt < 8; bitcnt++)
  {
    // value (0 or 1) using bitmask to check if a bit in the character is set or not
    bool bitvalue = (D & (1 << bitcnt)) == (1 << bitcnt);
    // set corresponding output
    digitalWrite(datapins[bitcnt], bitvalue);
  }
  Pulse(12); //Write the parallel data to a character in the display
}

//Pulse a designated pin; 11=Master CTRL, 12=Display
void Pulse(int P)
{
  digitalWrite(P, 0);
  delay(2);
  digitalWrite(P, 1);
}

void InitDisp() //Initialize the display
{
  WRITED(0x80); //Clear the display in selected char cell
  delay(2);
  WRITED(0x0D); //Turn off Clear Display bit and set parameters (D=25% bright, E=50%, F=100%)
}

// the setup function runs once when you press reset or power the board
void setup()
{
  delay(100); //Allow display to init internally with tri-state pins
  // initialize digital pins as outputs.
  for (int x = 2; x < 14; x++)
  {
    pinMode(x, OUTPUT);
    digitalWrite(x, 0); //Set ALL pins 0 to start
  }
  delay(2);
  digitalWrite(12, 1); //Set both Write pins high. (Pluse low to write)
  digitalWrite(11, 1);
  Pulse(11); //Write $00 to Master CTRL Word, which also sets displays for CONTROL mode (AD2=0)
WRITEC(0x40); //$40 to raise DISPLAY RESET to NORMAL and select Display 0
InitDisp(); //Initialize the selected display

WRITEC(0x44); //Set $44 to keep reset high and select Display 1
InitDisp(); //Initialize the selected display

WRITEC(0x48); //Write $48 to keep reset high and select Disp 2
InitDisp(); //Initialize the selected display

WRITEC(0x4C); //Write $4C to keep reset high and select Disp 3
InitDisp(); //Initialize the selected display

WRITEC(0x50); //Write $x0 for leftmost digit (Digit 0, Disp 0)
              //$5x to keep Reset high and set displays to DATA mode (AD2=1)
// START WRITING CHARACTERS NOW

 // for each character in the string Msg
  for (int charcnt = 0; charcnt < 16; charcnt++)
  {
  byte CTRL = 0x50 | charcnt; // Logical OR 0x50 with count for Master Control
  WRITEC(CTRL); //Write the control word
  WRITED(Msg[charcnt]); //Place ASCII character onto DATA pins & send to display
  }

} // End of SETUP routine (Init & write message to the displays)

// The LOOP portion "blinks" the eyes, and indicates the Arduino is running

void loop() {
WRITEC(0x5E); //Set 2n'd to last digit
  delay(2000);
WRITED('|'); //Pipe char resembles closed eyes
  delay(100); //Blink eyes for smiley character at end of message
WRITED(':');  //Open eyes  
}