Graphic Lcd Library
The mikroC 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 : |
---|---|---|
extern volatile sfr char GLCD_DataPort; |
Glcd Data Port. | char GLCD_DataPort at P0; |
extern sfr sbit bdata GLCD_CS1: |
Chip Select 1 line. | sbit GLCD_CS1 at P2_0_bit; |
extern sfr sbit bdata GLCD_CS2: |
Chip Select 2 line. | sbit GLCD_CS1 at P2_1_bit; |
extern sfr sbit bdata GLCD_RS: |
Register select line. | sbit GLCD_RS at P2_2_bit; |
extern sfr sbit bdata GLCD_RW: |
Read/Write line. | sbit GLCD_RW at P2_3_bit; |
extern sfr sbit bdata GLCD_EN: |
Enable line. | sbit GLCD_EN at P2_4_bit; |
extern sfr sbit bdata GLCD_RST: |
Reset line. | sbit GLCD_RST at P2_5_bit; |
Library Routines
Basic routines:
Advanced routines:
- Glcd_Fill
- Glcd_Dot
- Glcd_Line
- Glcd_V_Line
- Glcd_H_Line
- Glcd_Rectangle
- Glcd_Box
- Glcd_Circle
- Glcd_Set_Font
- Glcd_Write_Char
- Glcd_Write_Text
- Glcd_Image
Glcd_Init
Prototype |
void 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 :
|
Example |
// glcd pinout settings char GLCD_DataPort at P0; sbit GLCD_CS1 at P2_0_bit; sbit GLCD_CS2 at P2_1_bit; sbit GLCD_RS at P2_2_bit; sbit GLCD_RW at P2_3_bit; sbit GLCD_RST at P2_5_bit; sbit GLCD_EN at P2_4_bit; ... Glcd_Init(); |
Glcd_Set_Side
Prototype |
|
---|---|
Returns |
Nothing. |
Description |
Selects Glcd side. Refer to the Glcd datasheet for detailed explanation. Parameters :
The parameter 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 |
void Glcd_Set_X(unsigned short x_pos); |
---|---|
Returns |
Nothing. |
Description |
Sets x-axis position to Parameters :
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 |
void Glcd_Set_Page(unsigned short page); |
---|---|
Returns |
Nothing. |
Description |
Selects page of the Glcd. Parameters :
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 |
unsigned short Glcd_Read_Data(); |
---|---|
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 |
unsigned short data; ... data = Glcd_Read_Data(); |
Glcd_Write_Data
Prototype |
void Glcd_Write_Data(unsigned short ddata); |
---|---|
Returns |
Nothing. |
Description |
Writes one byte to the current location in Glcd memory and moves to the next location. Parameters :
|
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 |
unsigned short data_; ... Glcd_Write_Data(data_); |
Glcd_Fill
Prototype |
void Glcd_Fill(unsigned short pattern); |
---|---|
Returns |
Nothing. |
Description |
Fills Glcd memory with the byte Parameters :
To clear the Glcd screen, use To fill the screen completely, use |
Requires |
Glcd needs to be initialized, see Glcd_Init routine. |
Example |
// Clear screen Glcd_Fill(0); |
Glcd_Dot
Prototype |
void Glcd_Dot(unsigned short x_pos, unsigned short y_pos, unsigned short color); |
---|---|
Returns |
Nothing. |
Description |
Draws a dot on Glcd at coordinates ( Parameters :
The parameter 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 |
void Glcd_Line(int x_start, int y_start, int x_end, int y_end, unsigned short color); |
---|---|
Returns |
Nothing. |
Description |
Draws a line on Glcd. Parameters :
The parameter |
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 |
void Glcd_V_Line(unsigned short y_start, unsigned short y_end, unsigned short x_pos, unsigned short color); |
---|---|
Returns |
Nothing. |
Description |
Draws a vertical line on Glcd. Parameters :
The parameter |
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 |
void Glcd_H_Line(unsigned short x_start, unsigned short x_end, unsigned short y_pos, unsigned short color); |
---|---|
Returns |
Nothing. |
Description |
Draws a horizontal line on Glcd. Parameters :
The parameter |
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 |
void Glcd_Rectangle(unsigned short x_upper_left, unsigned short y_upper_left, unsigned short x_bottom_right, unsigned short y_bottom_right, unsigned short color); |
---|---|
Returns |
Nothing. |
Description |
Draws a rectangle on Glcd. Parameters :
The parameter |
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 |
void Glcd_Box(unsigned short x_upper_left, unsigned short y_upper_left, unsigned short x_bottom_right, unsigned short y_bottom_right, unsigned short color); |
---|---|
Returns |
Nothing. |
Description |
Draws a box on Glcd. Parameters :
The parameter |
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 |
void Glcd_Circle(int x_center, int y_center, int radius, unsigned short color); |
---|---|
Returns |
Nothing. |
Description |
Draws a circle on Glcd. Parameters :
The parameter |
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 |
void Glcd_Set_Font(const char *activeFont, unsigned short aFontWidth, unsigned short aFontHeight, unsigned int aFontOffs); |
---|---|
Returns |
Nothing. |
Description |
Sets font that will be used with Glcd_Write_Char and Glcd_Write_Text routines. Parameters :
The user can use fonts given in the file
For the sake of the backward compatibility, these fonts are supported also:
|
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 |
void Glcd_Write_Char(unsigned short chr, unsigned short x_pos, unsigned short page_num, unsigned short color); |
---|---|
Returns |
Nothing. |
Description |
Prints character on the Glcd. Parameters :
The parameter 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 |
Example |
// Write character 'C' on the position 10 inside the page 2: Glcd_Write_Char('C', 10, 2, 1); |
Glcd_Write_Text
Prototype |
void Glcd_Write_Text(char *text, unsigned short x_pos, unsigned short page_num, unsigned short color); |
---|---|
Returns |
Nothing. |
Description |
Prints text on Glcd. Parameters :
The parameter 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 |
Example |
// Write text "Hello world!" on the position 10 inside the page 2: Glcd_Write_Text("Hello world!", 10, 2, 1); |
Glcd_Image
Prototype |
void Glcd_Image(code const unsigned short *image); |
---|---|
Returns |
Nothing. |
Description |
Displays bitmap on Glcd. Parameters :
Use the mikroC 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.
//Declarations------------------------------------------------------------------ const code char truck_bmp[1024]; //--------------------------------------------------------------end-declarations // Glcd module connections char GLCD_DataPort at P0; sbit GLCD_CS1 at P2_0_bit; sbit GLCD_CS2 at P2_1_bit; sbit GLCD_RS at P2_2_bit; sbit GLCD_RW at P2_3_bit; sbit GLCD_EN at P2_4_bit; sbit GLCD_RST at P2_5_bit; // End Glcd module connections void delay2S(){ // 2 seconds delay function Delay_ms(2000); } void main() { unsigned short ii; char *someText; #define COMPLETE_EXAMPLE // comment this line to make simpler/smaller example Glcd_Init(); // Initialize GLCD Glcd_Fill(0x00); // Clear GLCD while(1) { #ifdef COMPLETE_EXAMPLE Glcd_Image(truck_bmp); // Draw image delay2S(); delay2S(); #endif Glcd_Fill(0x00); // Clear GLCD Glcd_Box(62,40,124,56,1); // Draw box Glcd_Rectangle(5,5,84,35,1); // Draw rectangle Glcd_Line(0, 0, 127, 63, 1); // Draw line delay2S(); for(ii = 5; ii < 60; ii+=5 ) { // Draw horizontal and vertical lines Delay_ms(250); Glcd_V_Line(2, 54, ii, 1); Glcd_H_Line(2, 120, ii, 1); } delay2S(); Glcd_Fill(0x00); // Clear GLCD #ifdef COMPLETE_EXAMPLE Glcd_Set_Font(Character8x7, 8, 7, 32);// Choose font, see __Lib_GLCDFonts.c in Uses folder Glcd_Write_Text("mikroE", 1, 7, 2); // Write string for (ii = 1; ii <= 10; ii++) // Draw circles Glcd_Circle(63,32, 3*ii, 1); delay2S(); Glcd_Box(12,20, 70,57, 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 } }
HW Connection
Glcd HW connection
What do you think about this topic ? Send us feedback!