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 15:37:54 2014 +0000
Revision:
1:17443d6d2740
Parent:
0:6ac8f630d9a0
Child:
3:c0e409cda493
Nice looking progress bar.; Underlined text.

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 1:17443d6d2740 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 1:17443d6d2740 29 //
medvdv 1:17443d6d2740 30 // Progress bar shape
medvdv 1:17443d6d2740 31 // Drawed as BFFF...FFUU...UUUE
medvdv 1:17443d6d2740 32 // B - Begin one
medvdv 1:17443d6d2740 33 // F - Filled zone
medvdv 1:17443d6d2740 34 // U - Empty zone
medvdv 1:17443d6d2740 35 // E - End one
medvdv 1:17443d6d2740 36 //
medvdv 1:17443d6d2740 37
medvdv 1:17443d6d2740 38 #define LCD_BAR_B 0x1c
medvdv 1:17443d6d2740 39 #define LCD_BAR_F 0x3e
medvdv 1:17443d6d2740 40 #define LCD_BAR_U 0x22
medvdv 1:17443d6d2740 41 #define LCD_BAR_E 0x1c
medvdv 1:17443d6d2740 42
medvdv 1:17443d6d2740 43 //
medvdv 0:6ac8f630d9a0 44 // lcd128 class
medvdv 0:6ac8f630d9a0 45 //
medvdv 0:6ac8f630d9a0 46
medvdv 0:6ac8f630d9a0 47 class lcd128 {
medvdv 0:6ac8f630d9a0 48
medvdv 0:6ac8f630d9a0 49 // Interface with lcd
medvdv 0:6ac8f630d9a0 50 SPI spi;
medvdv 0:6ac8f630d9a0 51 DigitalOut rst, cs, a0;
medvdv 0:6ac8f630d9a0 52
medvdv 0:6ac8f630d9a0 53 // Current font
medvdv 0:6ac8f630d9a0 54 lcd128font font;
medvdv 0:6ac8f630d9a0 55
medvdv 1:17443d6d2740 56 // Write options
medvdv 0:6ac8f630d9a0 57 bool invert;
medvdv 0:6ac8f630d9a0 58 bool bold;
medvdv 1:17443d6d2740 59 bool underline;
medvdv 0:6ac8f630d9a0 60
medvdv 0:6ac8f630d9a0 61 // buffer
medvdv 0:6ac8f630d9a0 62 char buffer[LCD_SIZE];
medvdv 0:6ac8f630d9a0 63
medvdv 0:6ac8f630d9a0 64 // Cursor position
medvdv 0:6ac8f630d9a0 65
medvdv 0:6ac8f630d9a0 66 int X, Y;
medvdv 0:6ac8f630d9a0 67
medvdv 0:6ac8f630d9a0 68 // Generic SPI writer
medvdv 0:6ac8f630d9a0 69 void write(char byte, bool cmd = false);
medvdv 0:6ac8f630d9a0 70
medvdv 0:6ac8f630d9a0 71 public:
medvdv 0:6ac8f630d9a0 72
medvdv 0:6ac8f630d9a0 73 // Supply LCD connected pin's here for your design
medvdv 0:6ac8f630d9a0 74 lcd128(PinName mosi= p5, PinName sclk = p7, PinName a0 = p8, PinName cs = p11, PinName rst = p6);
medvdv 0:6ac8f630d9a0 75
medvdv 0:6ac8f630d9a0 76 // LCD control
medvdv 0:6ac8f630d9a0 77 void Reset(); // Reset LCD, configure defaults
medvdv 0:6ac8f630d9a0 78 void Power(bool power = true); // Power off / on
medvdv 0:6ac8f630d9a0 79 void InverseMode(bool inverse = true); // Invert LCD off / on
medvdv 0:6ac8f630d9a0 80
medvdv 0:6ac8f630d9a0 81 // Buffer -> LCD
medvdv 0:6ac8f630d9a0 82 void Update(); // Update LCD from buffer, shows all actually
medvdv 0:6ac8f630d9a0 83 void Clear(int row = -1); // Clear all buffer or one row
medvdv 0:6ac8f630d9a0 84
medvdv 0:6ac8f630d9a0 85 // Write mode
medvdv 0:6ac8f630d9a0 86 void Invert(bool invert = true); // Switch inverting of chars
medvdv 0:6ac8f630d9a0 87 void Bold(bool bold = true); // Switch bold mode (repeat each char row twice)
medvdv 1:17443d6d2740 88 void Underline(bool underline = true); // Switch underline mode (last pixel of row always on)
medvdv 0:6ac8f630d9a0 89
medvdv 0:6ac8f630d9a0 90 // Cursor
medvdv 0:6ac8f630d9a0 91 void XY(int x = 0, int y = 0); // Change write position X in pixels, Y in rows
medvdv 0:6ac8f630d9a0 92
medvdv 0:6ac8f630d9a0 93 // Row write
medvdv 0:6ac8f630d9a0 94 void Write(char byte); // One 8bit row
medvdv 0:6ac8f630d9a0 95 void Write(char byte, int count); // One 8bit row * 'count' times
medvdv 0:6ac8f630d9a0 96 void Write(char* data, int size); // 'size' 8bit rows
medvdv 0:6ac8f630d9a0 97 void Write2(char* data, int size); // Bold: 'size' 8bit rows * 2
medvdv 0:6ac8f630d9a0 98
medvdv 0:6ac8f630d9a0 99 // Character drawing
medvdv 0:6ac8f630d9a0 100 void Character(char chr); // Draw one font character (with invert and bold opt-s)
medvdv 0:6ac8f630d9a0 101 // ! automaticaly does next line if char is wider then space left
medvdv 0:6ac8f630d9a0 102 int CharacterWidth(char chr); // Calculate one character width (with bold opt-n)
medvdv 0:6ac8f630d9a0 103
medvdv 0:6ac8f630d9a0 104 // String drawing
medvdv 0:6ac8f630d9a0 105 void String(char* str); // Draw string proportionally
medvdv 0:6ac8f630d9a0 106 int StringWidth(char* str); // Calculate string width in px
medvdv 0:6ac8f630d9a0 107
medvdv 1:17443d6d2740 108 // Higher level drawers
medvdv 0:6ac8f630d9a0 109 void Row(int Y, char* str = ""); // Clear one text row and draw string on it
medvdv 1:17443d6d2740 110 void Bar(int width, float fill = 0.0); // Progress bar - one row, width pixels, fill - 0.0..1.0
medvdv 1:17443d6d2740 111
medvdv 0:6ac8f630d9a0 112 };