Lightweight proportional text library for C12832 LCD. Easy to modify, fast, robust and compact. Nice font, good for text driven menus, messages, etc. Fell free to use and modify in any projects.

Dependents:   app-board-lcd128

Documentation will be here later.

Usage sample:

Import programapp-board-lcd128

Sample usage of lightweight C12832 LCD library

Committer:
medvdv
Date:
Sat Feb 01 13:13:37 2014 +0000
Revision:
0:6ac8f630d9a0
Child:
1:17443d6d2740
first variant, commented, tested briefly

Who changed what in which revision?

UserRevisionLine numberNew contents of line
medvdv 0:6ac8f630d9a0 1 //
medvdv 0:6ac8f630d9a0 2 // MBED Application Board
medvdv 0:6ac8f630d9a0 3 // Lightweight C12832 LCD library
medvdv 0:6ac8f630d9a0 4 // 2014, Alexander Medvedev, @medvdv
medvdv 0:6ac8f630d9a0 5 //
medvdv 0:6ac8f630d9a0 6
medvdv 0:6ac8f630d9a0 7 //
medvdv 0:6ac8f630d9a0 8 // BC12832 LCD
medvdv 0:6ac8f630d9a0 9 // Base geometry: 128 x 32 px
medvdv 0:6ac8f630d9a0 10 // X - [0..127] pixels
medvdv 0:6ac8f630d9a0 11 // Y - [0..3] 8 bit rows
medvdv 0:6ac8f630d9a0 12 // 512 byte total buffer size
medvdv 0:6ac8f630d9a0 13 //
medvdv 0:6ac8f630d9a0 14
medvdv 0:6ac8f630d9a0 15 #define LCD_X 128
medvdv 0:6ac8f630d9a0 16 #define LCD_Y 4
medvdv 0:6ac8f630d9a0 17 #define LCD_SIZE 512
medvdv 0:6ac8f630d9a0 18
medvdv 0:6ac8f630d9a0 19 //
medvdv 0:6ac8f630d9a0 20 // Proportional font
medvdv 0:6ac8f630d9a0 21 //
medvdv 0:6ac8f630d9a0 22
medvdv 0:6ac8f630d9a0 23 typedef struct {
medvdv 0:6ac8f630d9a0 24 char first_code, glyphs_total;
medvdv 0:6ac8f630d9a0 25 const char* widths;
medvdv 0:6ac8f630d9a0 26 const char** glyphs;
medvdv 0:6ac8f630d9a0 27 } lcd128font;
medvdv 0:6ac8f630d9a0 28
medvdv 0:6ac8f630d9a0 29 //
medvdv 0:6ac8f630d9a0 30 // lcd128 class
medvdv 0:6ac8f630d9a0 31 //
medvdv 0:6ac8f630d9a0 32
medvdv 0:6ac8f630d9a0 33 class lcd128 {
medvdv 0:6ac8f630d9a0 34
medvdv 0:6ac8f630d9a0 35 // Interface with lcd
medvdv 0:6ac8f630d9a0 36 SPI spi;
medvdv 0:6ac8f630d9a0 37 DigitalOut rst, cs, a0;
medvdv 0:6ac8f630d9a0 38
medvdv 0:6ac8f630d9a0 39 // Current font
medvdv 0:6ac8f630d9a0 40 lcd128font font;
medvdv 0:6ac8f630d9a0 41
medvdv 0:6ac8f630d9a0 42 bool invert;
medvdv 0:6ac8f630d9a0 43 bool bold;
medvdv 0:6ac8f630d9a0 44
medvdv 0:6ac8f630d9a0 45 // buffer
medvdv 0:6ac8f630d9a0 46 char buffer[LCD_SIZE];
medvdv 0:6ac8f630d9a0 47
medvdv 0:6ac8f630d9a0 48 // Cursor position
medvdv 0:6ac8f630d9a0 49
medvdv 0:6ac8f630d9a0 50 int X, Y;
medvdv 0:6ac8f630d9a0 51
medvdv 0:6ac8f630d9a0 52 // Generic SPI writer
medvdv 0:6ac8f630d9a0 53 void write(char byte, bool cmd = false);
medvdv 0:6ac8f630d9a0 54
medvdv 0:6ac8f630d9a0 55 public:
medvdv 0:6ac8f630d9a0 56
medvdv 0:6ac8f630d9a0 57 // Supply LCD connected pin's here for your design
medvdv 0:6ac8f630d9a0 58 lcd128(PinName mosi= p5, PinName sclk = p7, PinName a0 = p8, PinName cs = p11, PinName rst = p6);
medvdv 0:6ac8f630d9a0 59
medvdv 0:6ac8f630d9a0 60 // LCD control
medvdv 0:6ac8f630d9a0 61 void Reset(); // Reset LCD, configure defaults
medvdv 0:6ac8f630d9a0 62 void Power(bool power = true); // Power off / on
medvdv 0:6ac8f630d9a0 63 void InverseMode(bool inverse = true); // Invert LCD off / on
medvdv 0:6ac8f630d9a0 64
medvdv 0:6ac8f630d9a0 65 // Buffer -> LCD
medvdv 0:6ac8f630d9a0 66 void Update(); // Update LCD from buffer, shows all actually
medvdv 0:6ac8f630d9a0 67 void Clear(int row = -1); // Clear all buffer or one row
medvdv 0:6ac8f630d9a0 68
medvdv 0:6ac8f630d9a0 69 // Write mode
medvdv 0:6ac8f630d9a0 70 void Invert(bool invert = true); // Switch inverting of chars
medvdv 0:6ac8f630d9a0 71 void Bold(bool bold = true); // Switch bold mode (repeat each char row twice)
medvdv 0:6ac8f630d9a0 72
medvdv 0:6ac8f630d9a0 73 // Cursor
medvdv 0:6ac8f630d9a0 74 void XY(int x = 0, int y = 0); // Change write position X in pixels, Y in rows
medvdv 0:6ac8f630d9a0 75
medvdv 0:6ac8f630d9a0 76 // Row write
medvdv 0:6ac8f630d9a0 77 void Write(char byte); // One 8bit row
medvdv 0:6ac8f630d9a0 78 void Write(char byte, int count); // One 8bit row * 'count' times
medvdv 0:6ac8f630d9a0 79 void Write(char* data, int size); // 'size' 8bit rows
medvdv 0:6ac8f630d9a0 80 void Write2(char* data, int size); // Bold: 'size' 8bit rows * 2
medvdv 0:6ac8f630d9a0 81
medvdv 0:6ac8f630d9a0 82 // Character drawing
medvdv 0:6ac8f630d9a0 83 void Character(char chr); // Draw one font character (with invert and bold opt-s)
medvdv 0:6ac8f630d9a0 84 // ! automaticaly does next line if char is wider then space left
medvdv 0:6ac8f630d9a0 85 int CharacterWidth(char chr); // Calculate one character width (with bold opt-n)
medvdv 0:6ac8f630d9a0 86
medvdv 0:6ac8f630d9a0 87 // String drawing
medvdv 0:6ac8f630d9a0 88 void String(char* str); // Draw string proportionally
medvdv 0:6ac8f630d9a0 89 int StringWidth(char* str); // Calculate string width in px
medvdv 0:6ac8f630d9a0 90
medvdv 0:6ac8f630d9a0 91 void Row(int Y, char* str = ""); // Clear one text row and draw string on it
medvdv 0:6ac8f630d9a0 92 };