Change variable from Interrupt while loop is running

The LCD is SPI, but Im using shiftOut because the hardware SPI is being used by the radio. Here are the functions to communicate with the LCD. (from a seperate h file).
My theory is that it is because I am running the LCD out of spec. (The LCD is 3.3v as an operating standard, but 5v as maximum). Would this cause it to slow down? Or is pulseout really that slow. If you look at the video in my last post, you see that the lcd write time is responsible for the slowness of the scanner. The flash at the end of each cycle is the radio turning on and consuming power on the 3,3 bus. The rest of the time per scan is being wasted on the lcd.
Here are the lcd functions:

void LcdWrite(byte dc, byte data)
{

  bitWrite(PORTD, PIN_DC, dc) ; 
  bitWrite(PORTD, PIN_SCE, 0) ; 
  shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, data);
  bitWrite(PORTD, PIN_SCE, 1) ; 

}

void LcdClear(void)
{
  for (int index = 0; index < LCD_X * LCD_Y / 8; index++)
  {
    LcdWrite(LCD_D, 0x00);
  }
}
void LcdInitialise(void)
{

  pinMode(PIN_RESET, OUTPUT);
  pinMode(PIN_DC,    OUTPUT);
  pinMode(PIN_SDIN,  OUTPUT);
  pinMode(PIN_SCLK,  OUTPUT);
  pinMode(PIN_SCE, OUTPUT);
  digitalWrite(PIN_RESET, LOW);
  // delay(1);
  digitalWrite(PIN_RESET, HIGH);

  LcdWrite( LCD_CMD, 0x21 );  // LCD Extended Commands.
  LcdWrite( LCD_CMD, 0xB0 );  // Set LCD Vop (Contrast). //B1
  LcdWrite( LCD_CMD, 0x04 );  // Set Temp coefficent. //0x04
  LcdWrite( LCD_CMD, 0x14 );  // LCD bias mode 1:48. //0x13
  LcdWrite( LCD_CMD, 0x0C );  // LCD in normal mode. 0x0d for inverse
  LcdWrite(LCD_C, 0x20);
  LcdWrite(LCD_C, 0x0C);
}
void drawLine(unsigned int x, unsigned int y, int mode){
  y = y + bottom;
  for(int j= bottom; j<y; j++)
  {
    setPixel(x, j, mode);
  } 	
}
void setPixel(int x, int y, int d) {
  if (x > 84 || y > 48) { 
    return; 
  }
  // The LCD has 6 rows, with 8 pixels per  row.
  // 'y_mod' is the row that the pixel is in.
  // 'y_pix' is the pixel in that row we want to enable/disable
  int y_mod = (int)(y >> 3);	// >>3 divides by 8
  int y_pix = (y-(y_mod << 3));// <<3 multiplies by 8
  int val = 1 << y_pix;

  /// We have to keep track of which pixels are on/off in order to
  // write the correct character out to the LCD.
  if (d){
    pixels[x][y_mod] |= val;
  } 
  else {
    pixels[x][y_mod] &= ~val;
  }

  // Write the updated pixel out to the LCD
  // TODO Check if the pixel is already in the state requested,
  //      if so, don't write to LCD.
  gotoXY(x,y_mod);
  LcdWrite (1,pixels[x][y_mod]);
}

// gotoXY routine to position cursor
// x - range: 0 to 84
// y - range: 0 to 5
void gotoXY(int x, int y) {
  LcdWrite( 0, 0x80 | x);  // Column.
  LcdWrite( 0, 0x40 | y);  // Row.  	
}

byte rev_bits ( byte val )
{
  byte ret = 0;
  byte n_bits = 8;

  for ( unsigned i = 0; i < n_bits; ++i ) {
    ret = ( ret << 1 ) | ( val & 1 );
    val >>= 1;
  }

  return ret;
}


void LcdCharacter(char character)
{
  LcdWrite(LCD_D, 0x00);
  for (int index = 5; index > -1; index=index-1)
  {
    LcdWrite(LCD_D, rev_bits(ASCII[character - 0x20][index]));
  }
  LcdWrite(LCD_D, 0x00);
}