Graphic Lcd Library

The mikroPascal PRO for 8051 provides a library for operating Graphic Lcd 128x64 (with commonly used Samsung KS108/KS107 controller).

For creating a custom set of Glcd images use Glcd Bitmap Editor Tool.

External dependencies of Graphic Lcd Library

The following variables must be defined in all projects using Graphic Lcd Library: Description : Example :
var GLCD_DataPort: byte; sfr; volatile; external; Glcd Data Port. var GLCD_DataPort: byte at P0;
var GLCD_CS1: sbit; bdata; sfr; external; Chip Select 1 line. var GLCD_CS1: sbit at P2_0_bit;
var GLCD_CS2: sbit; bdata; sfr; external; Chip Select 2 line. var GLCD_CS2: sbit at P2_1_bit;
var GLCD_RS: sbit; bdata; sfr; external; Register select line. var GLCD_RS: sbit at P2_2;_bit
var GLCD_RW: sbit; bdata; sfr; external; Read/Write line. var GLCD_RW: sbit at P2_3_bit;
var GLCD_RST: sbit; bdata; sfr; external; Enable line. var GLCD_RST: sbit at P2_4_bit;
var GLCD_EN: sbit; bdata; sfr; external; Reset line. var GLCD_EN: sbit at P2_5_bit;

Library Routines

Basic routines:

Advanced routines:

Glcd_Init

Prototype

procedure Glcd_Init();

Returns

Nothing.

Description

Initializes the Glcd module. Each of the control lines is both port and pin configurable, while data lines must be on a single port (pins <0:7>).

Requires

Global variables :

  • GLCD_CS1 : chip select 1 signal pin
  • GLCD_CS2 : chip select 2 signal pin
  • GLCD_RS : register select signal pin
  • GLCD_RW : read/write signal pin
  • GLCD_RST : reset signal pin
  • GLCD_EN : enable signal pin
  • GLCD_DataPort : data port
must be defined before using this function.

Example
' glcd pinout settings

var GLCD_DataPort: byte at P0; 

var GLCD_CS1 : sbit at P2_0_bit;
    GLCD_CS2 : sbit at P2_1_bit;
    GLCD_RS  : sbit at P2_2_bit;
    GLCD_RW  : sbit at P2_3_bit;
    GLCD_EN  : sbit at P2_4_bit;
    GLCD_RST : sbit at P2_5_bit;

...

Glcd_Init();

Glcd_Set_Side

Prototype

procedure Glcd_Set_Side(x_pos: byte);

Returns

Nothing.

Description

Selects Glcd side. Refer to the Glcd datasheet for detailed explanation.

Parameters :

  • x_pos: position on x-axis. Valid values: 0..127

The parameter x_pos specifies the Glcd side: values from 0 to 63 specify the left side, values from 64 to 127 specify the right side.

Note: For side, x axis and page layout explanation see schematic at the bottom of this page.

Requires

Glcd needs to be initialized, see Glcd_Init routine.

Example

The following two lines are equivalent, and both of them select the left side of Glcd:

Glcd_Select_Side(0);
Glcd_Select_Side(10);

Glcd_Set_X

Prototype

procedure Glcd_Set_X(x_pos: byte);

Returns

Nothing.

Description

Sets x-axis position to x_pos dots from the left border of Glcd within the selected side.

Parameters :

  • x_pos: position on x-axis. Valid values: 0..63

Note: For side, x axis and page layout explanation see schematic at the bottom of this page.

Requires

Glcd needs to be initialized, see Glcd_Init routine.

Example
Glcd_Set_X(25);

Glcd_Set_Page

Prototype

procedure Glcd_Set_Page(page: byte);

Returns

Nothing.

Description

Selects page of the Glcd.

Parameters :

  • page: page number. Valid values: 0..7

Note: For side, x axis and page layout explanation see schematic at the bottom of this page.

Requires

Glcd needs to be initialized, see Glcd_Init routine.

Example
Glcd_Set_Page(5);

Glcd_Read_Data

Prototype

function Glcd_Read_Data(): byte;

Returns

One byte from Glcd memory.

Description

Reads data from from the current location of Glcd memory and moves to the next location.

Requires

Glcd needs to be initialized, see Glcd_Init routine.

Glcd side, x-axis position and page should be set first. See functions Glcd_Set_Side, Glcd_Set_X, and Glcd_Set_Page.

Example
var data: byte;
...
data := Glcd_Read_Data();

Glcd_Write_Data

Prototype

procedure Glcd_Write_Data(ddata: byte);

Returns

Nothing.

Description

Writes one byte to the current location in Glcd memory and moves to the next location.

Parameters :

  • ddata: data to be written

Requires

Glcd needs to be initialized, see Glcd_Init routine.

Glcd side, x-axis position and page should be set first. See functions Glcd_Set_Side, Glcd_Set_X, and Glcd_Set_Page.

Example
var data: byte;
...
Glcd_Write_Data(data);

Glcd_Fill

Prototype

procedure Glcd_Fill(pattern: byte);

Returns

Nothing.

Description

Fills Glcd memory with the byte pattern.

Parameters :

  • pattern: byte to fill Glcd memory with

To clear the Glcd screen, use Glcd_Fill(0).

To fill the screen completely, use Glcd_Fill(0xFF).

Requires

Glcd needs to be initialized, see Glcd_Init routine.

Example
// Clear screen
Glcd_Fill(0);

Glcd_Dot

Prototype

procedure Glcd_Dot(x_pos: byte; y_pos: byte; color: byte);

Returns

Nothing.

Description

Draws a dot on Glcd at coordinates (x_pos, y_pos).

Parameters :

  • x_pos: x position. Valid values: 0..127
  • y_pos: y position. Valid values: 0..63
  • color: color parameter. Valid values: 0..2

The parameter color determines a dot state: 0 clears dot, 1 puts a dot, and 2 inverts dot state.

Note: For x and y axis layout explanation see schematic at the bottom of this page.

Requires

Glcd needs to be initialized, see Glcd_Init routine.

Example
' Invert the dot in the upper left corner
Glcd_Dot(0, 0, 2);

Glcd_Line

Prototype

procedure Glcd_Line(x_start: integer; y_start: integer; x_end: integer; y_end: integer; color: byte);

Returns

Nothing.

Description

Draws a line on Glcd.

Parameters :

  • x_start: x coordinate of the line start. Valid values: 0..127
  • y_start: y coordinate of the line start. Valid values: 0..63
  • x_end: x coordinate of the line end. Valid values: 0..127
  • y_end: y coordinate of the line end. Valid values: 0..63
  • color: color parameter. Valid values: 0..2

The parameter color determines the line color: 0 white, 1 black, and 2 inverts each dot.

Requires

Glcd needs to be initialized, see Glcd_Init routine.

Example
' Draw a line between dots (0,0) and (20,30)
Glcd_Line(0, 0, 20, 30, 1);

Glcd_V_Line

Prototype

procedure Glcd_V_Line(y_start: byte; y_end: byte; x_pos: byte; color: byte);

Returns

Nothing.

Description

Draws a vertical line on Glcd.

Parameters :

  • y_start: y coordinate of the line start. Valid values: 0..63
  • y_end: y coordinate of the line end. Valid values: 0..63
  • x_pos: x coordinate of vertical line. Valid values: 0..127
  • color: color parameter. Valid values: 0..2

The parameter color determines the line color: 0 white, 1 black, and 2 inverts each dot.

Requires

Glcd needs to be initialized, see Glcd_Init routine.

Example
' Draw a vertical line between dots (10,5) and (10,25)
Glcd_V_Line(5, 25, 10, 1);

Glcd_H_Line

Prototype

procedure Glcd_V_Line(x_start: byte; x_end: byte; y_pos: byte; color: byte);

Returns

Nothing.

Description

Draws a horizontal line on Glcd.

Parameters :

  • x_start: x coordinate of the line start. Valid values: 0..127
  • x_end: x coordinate of the line end. Valid values: 0..127
  • y_pos: y coordinate of horizontal line. Valid values: 0..63
  • color: color parameter. Valid values: 0..2

The parameter color determines the line color: 0 white, 1 black, and 2 inverts each dot.

Requires

Glcd needs to be initialized, see Glcd_Init routine.

Example
' Draw a horizontal line between dots (10,20) and (50,20)
Glcd_H_Line(10, 50, 20, 1);

Glcd_Rectangle

Prototype

procedure Glcd_Rectangle(x_upper_left: byte; y_upper_left: byte; x_bottom_right: byte; y_bottom_right: byte; color: byte);

Returns

Nothing.

Description

Draws a rectangle on Glcd.

Parameters :

  • x_upper_left: x coordinate of the upper left rectangle corner. Valid values: 0..127
  • y_upper_left: y coordinate of the upper left rectangle corner. Valid values: 0..63
  • x_bottom_right: x coordinate of the lower right rectangle corner. Valid values: 0..127
  • y_bottom_right: y coordinate of the lower right rectangle corner. Valid values: 0..63
  • color: color parameter. Valid values: 0..2

The parameter color determines the color of the rectangle border: 0 white, 1 black, and 2 inverts each dot.

Requires

Glcd needs to be initialized, see Glcd_Init routine.

Example
' Draw a rectangle between dots (5,5) and (40,40)
Glcd_Rectangle(5, 5, 40, 40, 1);

Glcd_Box

Prototype

procedure Glcd_Box(x_upper_left: byte; y_upper_left: byte; x_bottom_right: byte; y_bottom_right: byte; color: byte);

Returns

Nothing.

Description

Draws a box on Glcd.

Parameters :

  • x_upper_left: x coordinate of the upper left box corner. Valid values: 0..127
  • y_upper_left: y coordinate of the upper left box corner. Valid values: 0..63
  • x_bottom_right: x coordinate of the lower right box corner. Valid values: 0..127
  • y_bottom_right: y coordinate of the lower right box corner. Valid values: 0..63
  • color: color parameter. Valid values: 0..2

The parameter color determines the color of the box fill: 0 white, 1 black, and 2 inverts each dot.

Requires

Glcd needs to be initialized, see Glcd_Init routine.

Example
' Draw a box between dots (5,15) and (20,40)
Glcd_Box(5, 15, 20, 40, 1);

Glcd_Circle

Prototype

procedure Glcd_Circle(x_center: integer; y_center: integer; radius: integer; color: byte);

Returns

Nothing.

Description

Draws a circle on Glcd.

Parameters :

  • x_center: x coordinate of the circle center. Valid values: 0..127
  • y_center: y coordinate of the circle center. Valid values: 0..63
  • radius: radius size
  • color: color parameter. Valid values: 0..2

The parameter color determines the color of the circle line: 0 white, 1 black, and 2 inverts each dot.

Requires

Glcd needs to be initialized, see Glcd_Init routine.

Example
' Draw a circle with center in (50,50) and radius=10
Glcd_Circle(50, 50, 10, 1);

Glcd_Set_Font

Prototype

procedure Glcd_Set_Font(const ActiveFont: ^byte; FontWidth: byte; FontHeight: byte; FontOffs: word);

Returns

Nothing.

Description

Sets font that will be used with Glcd_Write_Char and Glcd_Write_Text routines.

Parameters :

  • activeFont: font to be set. Needs to be formatted as an array of byte
  • aFontWidth: width of the font characters in dots.
  • aFontHeight: height of the font characters in dots.
  • aFontOffs: number that represents difference between the mikroPascal PRO for 8051 character set and regular ASCII set (eg. if 'A' is 65 in ASCII character, and 'A' is 45 in the mikroPascal PRO for 8051 character set, aFontOffs is 20). Demo fonts supplied with the library have an offset of 32, which means that they start with space.

The user can use fonts given in the file __Lib_GLCDFonts file located in the Uses folder or create his own fonts.

List of supported fonts:
  • Font_Glcd_System3x5
  • Font_Glcd_System5x7
  • Font_Glcd_5x7
  • Font_Glcd_Character8x7

For the sake of the backward compatibility, these fonts are supported also:

  • System3x5 (equivalent to Font_Glcd_System3x5)
  • FontSystem5x7_v2 (equivalent to Font_Glcd_System5x7)
  • font5x7 (equivalent to Font_Glcd_5x7)
  • Character8x7 (equivalent to Font_Glcd_Character8x7)
Requires

Glcd needs to be initialized, see Glcd_Init routine.

Example
// Use the custom 5x7 font "myfont" which starts with space (32):
Glcd_Set_Font(&myfont, 5, 7, 32);

Glcd_Write_Char

Prototype

procedure Glcd_Write_Char(chr: byte; x_pos: byte; page_num: byte; color: byte);

Returns

Nothing.

Description

Prints character on the Glcd.

Parameters :

  • chr: character to be written
  • x_pos: character starting position on x-axis. Valid values: 0..(127-FontWidth)
  • page_num: the number of the page on which character will be written. Valid values: 0..7
  • color: color parameter. Valid values: 0..2

The parameter color determines the color of the character: 0 white, 1 black, and 2 inverts each dot.

Note: For x axis and page layout explanation see schematic at the bottom of this page.

Requires

Glcd needs to be initialized, see Glcd_Init routine. Use Glcd_Set_Font to specify the font for display; if no font is specified, then default Font_Glcd_System5x7 font supplied with the library will be used.

Example
' Write character 'C' on the position 10 inside the page 2:
Glcd_Write_Char('C', 10, 2, 1);

Glcd_Write_Text

Prototype

procedure Glcd_Write_Text(var text: string; x_pos: byte; page_num: byte; color: byte);

Returns

Nothing.

Description

Prints text on Glcd.

Parameters :

  • text: text to be written
  • x_pos: text starting position on x-axis.
  • page_num: the number of the page on which text will be written. Valid values: 0..7
  • color: color parameter. Valid values: 0..2

The parameter color determines the color of the text: 0 white, 1 black, and 2 inverts each dot.

Note: For x axis and page layout explanation see schematic at the bottom of this page.

Requires

Glcd needs to be initialized, see Glcd_Init routine. Use Glcd_Set_Font to specify the font for display; if no font is specified, then default Font_Glcd_System5x7 font supplied with the library will be used.

Example
' Write text "Hello world!" on the position 10 inside the page 2:
Glcd_Write_Text("Hello world!", 10, 2, 1);

Glcd_Image

Prototype

procedure Glcd_Image(const image: ^byte);

Returns

Nothing.

Description

Displays bitmap on Glcd.

Parameters :

  • image: image to be displayed. Bitmap array must be located in code memory.

Use the mikroPascal PRO for 8051 integrated Glcd Bitmap Editor to convert image to a constant array suitable for displaying on GLCD.

Requires

Glcd needs to be initialized, see Glcd_Init routine.

Example
// Draw image my_image on Glcd
Glcd_Image(my_image);

Library Example

The following example demonstrates routines of the Glcd library: initialization, clear(pattern fill), image displaying, drawing lines, circles, boxes and rectangles, text displaying and handling.

program GLCD_Test;

// Glcd module connections
var GLCD_DataPort : byte at P0;        // GLCD data port

var GLCD_CS1 : sbit at P2_0_bit;       // GLCD chip select 1 signal
var GLCD_CS2 : sbit at P2_1_bit;       // GLCD chip select 2 signal
var GLCD_RS  : sbit at P2_2_bit;       // GLCD register select signal
var GLCD_RW  : sbit at P2_3_bit;       // GLCD read/write signal
var GLCD_EN  : sbit at P2_4_bit;       // GLCD enable signal
var GLCD_RST : sbit at P2_5_bit;       // GLCD reset signal
// End Glcd module connections

var counter : byte;
    someText : array[18] of char;
    
procedure Delay2S();                        // 2 seconds delay function
  begin
    Delay_ms(2000);
  end;

begin

  {$DEFINE COMPLETE_EXAMPLE}

  Glcd_Init();                              // Initialize GLCD
  Glcd_Fill(0x00);                          // Clear GLCD

  while TRUE do
    begin
      {$IFDEF COMPLETE_EXAMPLE}
      Glcd_Image(@truck_bmp);               // Draw image
      Delay2S(); delay2S();
      {$ENDIF}

      Glcd_Fill(0x00);                      // Clear GLCD

      Glcd_Box(62,40,124,63,1);             // Draw box
      Glcd_Rectangle(5,5,84,35,1);          // Draw rectangle
      Glcd_Line(0, 0, 127, 63, 1);          // Draw line
      Delay2S();
      counter := 5;

      while (counter <= 59) do              // Draw horizontal and vertical lines
        begin
          Delay_ms(250);
          Glcd_V_Line(2, 54, counter, 1);
          Glcd_H_Line(2, 120, counter, 1);
          Counter := counter + 5;
        end;

      Delay2S();

      Glcd_Fill(0x00);                         // Clear GLCD
      {$IFDEF COMPLETE_EXAMPLE}
      someText := 'mikroE';
      Glcd_Set_Font(@Character8x7, 8, 7, 32);  // Choose font "Character8x7"
      Glcd_Write_Text(someText, 1, 7, 2);      // Write string

      for counter := 1 to 10 do                // Draw circles
        Glcd_Circle(63,32, 3*counter, 1);
      Delay2S();

      Glcd_Box(10,20, 70,63, 2);               // Draw box
      Delay2S();

      Glcd_Fill(0xFF);                         // Fill GLCD
      Glcd_Set_Font(@Character8x7, 8, 7, 32);  // Change font
      someText := '8x7 Font';
      Glcd_Write_Text(someText, 5, 0, 2);      // Write string
      delay2S();

      Glcd_Set_Font(@System3x5, 3, 5, 32);     // Change font
      someText := '3X5 CAPITALS ONLY';
      Glcd_Write_Text(someText, 60, 2, 2);     // Write string
      delay2S();

      Glcd_Set_Font(@font5x7, 5, 7, 32);       // Change font
      someText := '5x7 Font';
      Glcd_Write_Text(someText, 5, 4, 2);      // Write string
      delay2S();

      Glcd_Set_Font(@FontSystem5x7_v2, 5, 7, 32); // Change font
      someText := '5x7 Font (v2)';
      Glcd_Write_Text(someText, 5, 6, 2);      // Write string
      delay2S();
      {$ENDIF}
    end;
end.

HW Connection

Glcd HW connection

Glcd HW connection

Copyright (c) 2002-2013 mikroElektronika. All rights reserved.
What do you think about this topic ? Send us feedback!
Want more examples and libraries? 
Find them on LibStock - A place for the code