Arduino Code example for Newhaven COG LCD display NHD-C12864LZ.
/***************************************************************************** * / Program for writing to Newhaven Display's 128x64LZ Graphic COG with the ST7565 Controller. / This code is written for the Arduino Uno R3 using Parallel Interface / / Newhaven Display invests time and resources providing this open source code, / Please support Newhaven Display by purchasing products from Newhaven Display! * Copyright (c) 2018, Newhaven Display International * * This code is provided as an example only and without any warranty by Newhaven Display. * Newhaven Display accepts no responsibility for any issues resulting from its use. * The developer of the final application incorporating any parts of this * sample code is responsible for ensuring its safe and correct operation * and for any consequences resulting from its use. * See the GNU General Public License for more details. * *****************************************************************************/ unsigned char NHD_Logo[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7C, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0xF8, 0xF8, 0xF0, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0x78, 0x78, 0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0xF8, 0xF0, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0xC0, 0x00, 0x00, 0xC0, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF8, 0xF8, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0xC0, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x80, 0xF0, 0xF0, 0x78, 0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0xF8, 0xC0, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0B, 0x1F, 0x1F, 0x17, 0x0B, 0x01, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0x00, 0xFF, 0x01, 0x07, 0xF8, 0xC0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0xFF, 0x7F, 0x03, 0xFF, 0xE0, 0x00, 0xFF, 0x3F, 0x03, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x78, 0x70, 0x78, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xBF, 0x8F, 0x81, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x3F, 0xFF, 0x00, 0xE0, 0xF8, 0x0F, 0x01, 0x00, 0x00, 0xF8, 0xFF, 0x79, 0x78, 0x70, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x1F, 0xF0, 0xE0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF8, 0xFE, 0xFF, 0xFF, 0xF8, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xB8, 0x3C, 0x07, 0x03, 0x80, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0x00, 0xFF, 0x00, 0x00, 0x03, 0x3F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x78, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x1F, 0xFF, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x07, 0x07, 0x07, 0x3F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x7C, 0x78, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x07, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0x1B, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0F, 0x03, 0x00, 0x00, 0xE0, 0x7C, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x80, 0xF0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF4, 0xFE, 0xFF, 0xFE, 0xFC, 0x80, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0x2E, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7F, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x07, 0x3F, 0xFE, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0xF8, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x7F, 0xFF, 0xFF, 0xFF, 0x3F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0B, 0x0F, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0xE0, 0xE0, 0xE0, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE1, 0xF1, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x80, 0xF8, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; /************************************************************** * DEFINITIONS ***************************************************************/ #define CS 8 //Active Low Chip Select #define RST 9 //Active Low #define A0 10 //Register Select 0 = command. 1 = data. #define RW 11 //Read = 1; Write = 0; #define E 12 /******************************************* * Basic Functions * *******************************************/ void command(unsigned char c){ PORTD = c; digitalWrite(A0, LOW); digitalWrite(RW, LOW); digitalWrite(CS, LOW); digitalWrite(E, HIGH); digitalWrite(E, LOW); digitalWrite(CS, HIGH); digitalWrite(RW, HIGH); } void data(unsigned char d){ PORTD = d; digitalWrite(A0, HIGH); digitalWrite(RW, LOW); digitalWrite(CS, LOW); digitalWrite(E, HIGH); digitalWrite(E, LOW); digitalWrite(CS, HIGH); digitalWrite(RW, HIGH); } /***************************************** * Display * *****************************************/ // void Disp(unsigned char *lcd_string) { unsigned int i,j; unsigned char page = 0xB0; command(0xAE); //Display OFF command(0x40); //Display start address + 0x40 for(i=0;i<8;i++){ //64pixel display / 8 pixels per page = 8 pages command(page); //send page address command(0x10); //column address upper 4 bits + 0x10 command(0x00); //column address lower 4 bits + 0x00 for(j=0;j<128;j++){ //128 columns wide data(*lcd_string); //send picture data lcd_string++; } page++; //after 128 columns, go to next page } command(0xAF); } /****************************************** * Initialize * ******************************************/ void init1(){ digitalWrite(RST, LOW); delay(100); digitalWrite(RST, HIGH); delay(100); digitalWrite(CS, HIGH); digitalWrite(E, HIGH); digitalWrite(RW, HIGH); digitalWrite(A0, HIGH); command(0xA2); //LCD drive voltage bias ratio. command(0xA0); //Ram->SEG output = normal command(0xC8); //COM direction scan = normal (0xC8 in Example Initialization Program) command(0xA4); //Display All Points normally.. command(0x40); //Display Start Line command(0x25); //Resistor Ratio Set command(0x81); //Electronic Volume Command (set contrast) Double Byte: 1 of 2 command(0x10); //Electronic Volume value (contrast value) Double Byte: 2 of 2 command(0x2F); //Power Control Set command(0xAF); //Display ON } void setup() { DDRD = 0xFF; //For pin D0-D7 pinMode(RST, OUTPUT); // configure RES as output pinMode(CS, OUTPUT); // configure CS as output pinMode(A0, OUTPUT); // configure RS as output pinMode(RW, OUTPUT); // configure RW as output pinMode(E, OUTPUT); // configure E as output init1(); } void loop() { Disp(NHD_Logo); delay(1000); command(0xA5); //All points ON delay(1000); command(0xA4); //Normal Display delay(50); }