Enhanced LiquidCrystal

I realized a day or two ago that the advice I gave Mowcius is needlessly complex. The 40x4 display can be thought of as two 40x2 displays each with its own hd44780 controller chip and with all the pins in common except the enable line.

Here is some completely untested code to illustrate the concept:

#include <LiquidCrystal.h>
LiquidCrystal lcdwhole(rs,rw,enable1,enable2,d0,d1,d2,d3);  //this refers to the whole 40 x4
void setup (void){
lcdwhole.begin(40,4); //initialize the whole LCD

LiquidCrystal lcdBottomHalf(rs,rw,enable2,d0,d1,d2,d3); //define a temporary LCD object that only has 2 lines
lcdBottomHalf.begin(40,2);  //initialize the 2 line object


//now load custom characters into the whole LCD:
      uint8_t bell[8] = {0x4,0xe,0xe,0xe,0x1f,0x0,0x4};
      uint8_t note[8] = {0x2,0x3,0x2,0xe,0x1e,0xc,0x0};
      uint8_t clock[8] = {0x0,0xe,0x15,0x17,0x11,0xe,0x0};
      uint8_t heart[8] = {0x0,0xa,0x1f,0x1f,0xe,0x4,0x0};
      uint8_t duck[8] = {0x0,0xc,0x1d,0xf,0xf,0x6,0x0};
      uint8_t check[8] = {0x0,0x1,0x3,0x16,0x1c,0x8,0x0};
      uint8_t cross[8] = {0x0,0x1b,0xe,0x4,0xe,0x1b,0x0};
      uint8_t retarrow[8] = { 0x1,0x1,0x5,0x9,0x1f,0x8,0x4};      
      lcdwhole.createChar(0, bell);
      lcdwhole.createChar(1, note);
      lcdwhole.createChar(2, clock);
      lcdwhole.createChar(3, heart);
      lcdwhole.createChar(4, duck);
      lcdwhole.createChar(5, check);
      lcdwhole.createChar(6, cross);
      lcdwhole.createChar(7, retarrow);

//now redefine custom char 0 for the lower 2 lines:
lcdBottomHalf.createChar(0,retarrow);

}  //end setup(); the temporary LCD object expires.

void loop (void){

      i = 0;
      lcdwhole.clear();
      while (i<4) {
            lcdwhole.setCursor(0,i);
            lcdwhole.print("user:");
            for (int j=0; j<7; j++) {
                  lcdwhole.print(j, BYTE);
            }
            
            i++;
}