Graphic ST7565 Negative LCD 128x64

Hi people

I was going to program a Graphic ST7565 Negative LCD 128x64 to display 4 numbers that are read from 4 sensors at each of the 4 corners of the LCD. However, I can't figure out how I can navigate through pixels on the LCD, by looking at the library file. It seems that there are function(s) for it, but I cant figure out which one(s).

Any help will be appreciated :slight_smile:

Can you post the code you made sofar,
and a link to the library you use
and a link to the datasheet of the LCD if possible.

Here's a link to where I downloaded the library:

Here's a link to the datasheet:

Also this is the webpage on adafruit website where I found those links. ( I bought the LCD off that website):

http://www.ladyada.net/learn/lcd/st7565.html

I still haven't written any code, because unlike GLCD library pdf file, I couldn't find any good documentations on how the functions work in this LCD model.

I appreciate any hints or help. :smiley:

A quick look shows that there is at least a game of life example that does the some pixel addressing

the .h file shows quite a straight forward interface. it has functions to draw lines and write text etc.

 void st7565_init(void);
  void begin(uint8_t contrast);
  void st7565_command(uint8_t c);
  void st7565_data(uint8_t c);
  void st7565_set_brightness(uint8_t val);
  void clear_display(void);
  void clear();
  void display();

  void setpixel(uint8_t x, uint8_t y, uint8_t color);
  uint8_t getpixel(uint8_t x, uint8_t y);
  void fillcircle(uint8_t x0, uint8_t y0, uint8_t r, 
		  uint8_t color);
  void drawcircle(uint8_t x0, uint8_t y0, uint8_t r, 
		  uint8_t color);
  void drawrect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, 
		uint8_t color);
  void fillrect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, 
		uint8_t color);
  void drawline(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, 
		uint8_t color);
  void drawchar(uint8_t x, uint8_t line, char c);
  void drawstring(uint8_t x, uint8_t line, char *c);
  void drawstring_P(uint8_t x, uint8_t line, const char *c);

  void drawbitmap(uint8_t x, uint8_t y, 
		  const uint8_t *bitmap, uint8_t w, uint8_t h,
		  uint8_t color);

Think it is just time to write some code, I don't have such a display so I cannot test it.
Here is some code that should get you started

#define BACKLIGHT_LED 10

// don't know how you connect the thing
// pin 9 - Serial data out (SID)
// pin 8 - Serial clock out (SCLK)
// pin 7 - Data/Command select (RS or A0)
// pin 6 - LCD reset (RST)
// pin 5 - LCD chip select (CS)
ST7565 glcd(9, 8, 7, 6, 5);

void setup()
{
  Serial.begin(115200);
  Serial.println("Set backlight");
  pinMode(BACKLIGHT_LED, OUTPUT);
  digitalWrite(BACKLIGHT_LED, HIGH);

  glcd.st7565_init();
  glcd.st7565_command(CMD_DISPLAY_ON);
  glcd.st7565_command(CMD_SET_ALLPTS_NORMAL);
  glcd.st7565_set_brightness(0x18);

  glcd.display(); // show splashscreen

  glcd.clear();

  glcd.drawstring(20,20, "hello");

  glcd.drawline(0,0,0,60, 0);
  glcd.drawline(0,0,60,60, 1);
  glcd.drawline(0,60,60,60, 2);
}
void loop(){};

Cheers! :slight_smile:

did you test it ?

Sorry for late reply.

Thanks again for the code. I tried to upload the code and I got this error:

sketch_aug14a.ino: In function 'void drawGabrielsp138()':
sketch_aug14a:55: error: 'st7565_buffer' was not declared in this scope
sketch_aug14a.ino: In function 'void drawGlider()':
sketch_aug14a:67: error: 'st7565_buffer' was not declared in this scope

Then I put this piece of code in and the error was gone:

extern uint8_t st7565_buffer[1024];

However, nothing was displayed on the lcd, even though the code compiled and uploaded successfully.

I will fiddle with it more and let you know of my progress.

Hi,
Me again.

The reason it wasnt showing anything was a loose wire...... my baaaaaaad!!!

But, something interesting happens.When i write:

glcd.drawstring(20,20,"hello");

it only displays "h". But when I write:

glcd.drawstring(0,0,"hello");

it displays "hello".

any ideas what could be happening here??

I will go out on a limp here and assume this is because when you use drawString, the x,y coordinates actually refer to column and row, not a pixel based x,y.
Usually a single character is considered to be 6 pixels wide and 8 pixels in height.
Try something like glcd.drawstring(2,2,"Hello"); and see what happens.

The fact that it wasn't displaying was a loose wire (clumsy me!!!!! :sweat_smile:). However, you are correct about it working in column and row system. I have discovered that it does not go over 7 rows and the screen is divided to around 100 columns. each column is as thick as one character.