Change variable from Interrupt while loop is running

Well that's a cool project! I want one!

The simple way of speeding up the detection of button presses would be to exit from your inner loops when you detect a toggle.

Something like (using this loop as an example):

 for (unsigned char n = LCD_VISIBLE_X_RES; n > 0; n--){
      drawLine(n,Lcd_TOP,PIXEL_OFF);
      drawLine(n,signal[abs(LCD_VISIBLE_X_RES-n)], PIXEL_ON);

      if (toggled) return;   // give up, they pressed the switch

    }

That will take you out of "loop", you get thrown back in, you notice the toggle, you change modes, etc.

Or this:

 for (unsigned char n = LCD_VISIBLE_X_RES; n > 0 && !toggled; n--){
      drawLine(n,Lcd_TOP,PIXEL_OFF);
      drawLine(n,signal[abs(LCD_VISIBLE_X_RES-n)], PIXEL_ON);
    }