C12832 by dreschpe modified to work with the DOGL128-6 LCD Display (ST7565R based)

Dependents:   DOGL128Test

Fork of C12832_lcd by Peter Drescher

Committer:
Sateg
Date:
Sat Jul 16 21:30:38 2016 +0000
Revision:
16:3b6865c11663
Parent:
15:2e1423772e77
Child:
17:ec5db47782a3
Moved buffer clearing to function, reworked buffer size initialization.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sateg 15:2e1423772e77 1 /* mbed library DOGL128-6 128*64 pixel LCD
Sateg 15:2e1423772e77 2 * Copyright (c) 2012 Peter Drescher - DC2PD,
Sateg 15:2e1423772e77 3 * Copyright (c) 2016 Łukasz Godziejewski
Sateg 15:2e1423772e77 4 *
Sateg 15:2e1423772e77 5 * MIT License
Sateg 13:2742c45bc9bc 6 */
Sateg 13:2742c45bc9bc 7
Sateg 13:2742c45bc9bc 8 #ifndef DOGL128_H
Sateg 13:2742c45bc9bc 9 #define DOGL128_H
Sateg 13:2742c45bc9bc 10
Sateg 13:2742c45bc9bc 11 #include "mbed.h"
Sateg 13:2742c45bc9bc 12 #include "GraphicsDisplay.h"
Sateg 13:2742c45bc9bc 13
Sateg 13:2742c45bc9bc 14
Sateg 13:2742c45bc9bc 15 /** optional Defines :
Sateg 13:2742c45bc9bc 16 * #define debug_lcd 1 enable infos to PC_USB
Sateg 13:2742c45bc9bc 17 */
Sateg 13:2742c45bc9bc 18
Sateg 13:2742c45bc9bc 19
Sateg 13:2742c45bc9bc 20 /** Draw mode
Sateg 13:2742c45bc9bc 21 * NORMAl
Sateg 13:2742c45bc9bc 22 * XOR set pixel by xor the screen
Sateg 13:2742c45bc9bc 23 */
Sateg 13:2742c45bc9bc 24 enum {NORMAL,XOR};
Sateg 13:2742c45bc9bc 25
Sateg 13:2742c45bc9bc 26 /** Bitmap
Sateg 13:2742c45bc9bc 27 */
Sateg 13:2742c45bc9bc 28 struct Bitmap{
Sateg 13:2742c45bc9bc 29 int xSize;
Sateg 13:2742c45bc9bc 30 int ySize;
Sateg 13:2742c45bc9bc 31 int Byte_in_Line;
Sateg 13:2742c45bc9bc 32 char* data;
Sateg 13:2742c45bc9bc 33 };
Sateg 13:2742c45bc9bc 34
Sateg 14:a68c1c6d125a 35 class DOGL128 : public GraphicsDisplay
Sateg 13:2742c45bc9bc 36 {
Sateg 13:2742c45bc9bc 37 public:
Sateg 14:a68c1c6d125a 38 /** Create a DOGL128 object connected to SPI1
Sateg 13:2742c45bc9bc 39 *
Sateg 13:2742c45bc9bc 40 */
Sateg 13:2742c45bc9bc 41
Sateg 14:a68c1c6d125a 42 DOGL128(const char* name = "LCD");
Sateg 13:2742c45bc9bc 43
Sateg 13:2742c45bc9bc 44 /** Get the width of the screen in pixel
Sateg 13:2742c45bc9bc 45 *
Sateg 13:2742c45bc9bc 46 * @param
Sateg 13:2742c45bc9bc 47 * @returns width of screen in pixel
Sateg 13:2742c45bc9bc 48 *
Sateg 13:2742c45bc9bc 49 */
Sateg 13:2742c45bc9bc 50 virtual int width();
Sateg 13:2742c45bc9bc 51
Sateg 13:2742c45bc9bc 52 /** Get the height of the screen in pixel
Sateg 13:2742c45bc9bc 53 *
Sateg 13:2742c45bc9bc 54 * @returns height of screen in pixel
Sateg 13:2742c45bc9bc 55 *
Sateg 13:2742c45bc9bc 56 */
Sateg 13:2742c45bc9bc 57 virtual int height();
Sateg 13:2742c45bc9bc 58
Sateg 13:2742c45bc9bc 59 /** Draw a pixel at x,y black or white
Sateg 13:2742c45bc9bc 60 *
Sateg 13:2742c45bc9bc 61 * @param x horizontal position
Sateg 13:2742c45bc9bc 62 * @param y vertical position
Sateg 13:2742c45bc9bc 63 * @param colour ,1 set pixel ,0 erase pixel
Sateg 13:2742c45bc9bc 64 */
Sateg 13:2742c45bc9bc 65 virtual void pixel(int x, int y,int colour);
Sateg 13:2742c45bc9bc 66
Sateg 13:2742c45bc9bc 67 /** draw a circle
Sateg 13:2742c45bc9bc 68 *
Sateg 13:2742c45bc9bc 69 * @param x0,y0 center
Sateg 13:2742c45bc9bc 70 * @param r radius
Sateg 13:2742c45bc9bc 71 * @param colour ,1 set pixel ,0 erase pixel
Sateg 13:2742c45bc9bc 72 *
Sateg 13:2742c45bc9bc 73 */
Sateg 13:2742c45bc9bc 74 void circle(int x, int y, int r, int colour);
Sateg 13:2742c45bc9bc 75
Sateg 13:2742c45bc9bc 76 /** draw a filled circle
Sateg 13:2742c45bc9bc 77 *
Sateg 13:2742c45bc9bc 78 * @param x0,y0 center
Sateg 13:2742c45bc9bc 79 * @param r radius
Sateg 13:2742c45bc9bc 80 * @param color ,1 set pixel ,0 erase pixel
Sateg 13:2742c45bc9bc 81 *
Sateg 13:2742c45bc9bc 82 * use circle with different radius,
Sateg 13:2742c45bc9bc 83 * can miss some pixel
Sateg 13:2742c45bc9bc 84 */
Sateg 13:2742c45bc9bc 85 void fillcircle(int x, int y, int r, int colour);
Sateg 13:2742c45bc9bc 86
Sateg 13:2742c45bc9bc 87 /** draw a 1 pixel line
Sateg 13:2742c45bc9bc 88 *
Sateg 13:2742c45bc9bc 89 * @param x0,y0 start point
Sateg 13:2742c45bc9bc 90 * @param x1,y1 stop point
Sateg 13:2742c45bc9bc 91 * @param color ,1 set pixel ,0 erase pixel
Sateg 13:2742c45bc9bc 92 *
Sateg 13:2742c45bc9bc 93 */
Sateg 13:2742c45bc9bc 94 void line(int x0, int y0, int x1, int y1, int colour);
Sateg 13:2742c45bc9bc 95
Sateg 13:2742c45bc9bc 96 /** draw a rect
Sateg 13:2742c45bc9bc 97 *
Sateg 13:2742c45bc9bc 98 * @param x0,y0 top left corner
Sateg 13:2742c45bc9bc 99 * @param x1,y1 down right corner
Sateg 13:2742c45bc9bc 100 * @param color 1 set pixel ,0 erase pixel
Sateg 13:2742c45bc9bc 101 * *
Sateg 13:2742c45bc9bc 102 */
Sateg 13:2742c45bc9bc 103 void rect(int x0, int y0, int x1, int y1, int colour);
Sateg 13:2742c45bc9bc 104
Sateg 13:2742c45bc9bc 105 /** draw a filled rect
Sateg 13:2742c45bc9bc 106 *
Sateg 13:2742c45bc9bc 107 * @param x0,y0 top left corner
Sateg 13:2742c45bc9bc 108 * @param x1,y1 down right corner
Sateg 13:2742c45bc9bc 109 * @param color 1 set pixel ,0 erase pixel
Sateg 13:2742c45bc9bc 110 *
Sateg 13:2742c45bc9bc 111 */
Sateg 13:2742c45bc9bc 112 void fillrect(int x0, int y0, int x1, int y1, int colour);
Sateg 13:2742c45bc9bc 113
Sateg 13:2742c45bc9bc 114 /** copy display buffer to lcd
Sateg 13:2742c45bc9bc 115 *
Sateg 13:2742c45bc9bc 116 */
Sateg 13:2742c45bc9bc 117 void copy_to_lcd(void);
Sateg 13:2742c45bc9bc 118
Sateg 13:2742c45bc9bc 119 /** set the orienation of the screen
Sateg 13:2742c45bc9bc 120 *
Sateg 13:2742c45bc9bc 121 */
Sateg 13:2742c45bc9bc 122
Sateg 13:2742c45bc9bc 123 //void set_orientation(unsigned int o);
Sateg 13:2742c45bc9bc 124
Sateg 13:2742c45bc9bc 125 /** set the contrast of the screen
Sateg 13:2742c45bc9bc 126 *
Sateg 13:2742c45bc9bc 127 * @param o contrast 0-63
Sateg 13:2742c45bc9bc 128 */
Sateg 13:2742c45bc9bc 129 void set_contrast(unsigned int o);
Sateg 13:2742c45bc9bc 130
Sateg 13:2742c45bc9bc 131 /** read the contrast level
Sateg 13:2742c45bc9bc 132 *
Sateg 13:2742c45bc9bc 133 */
Sateg 13:2742c45bc9bc 134 unsigned int get_contrast(void);
Sateg 13:2742c45bc9bc 135
Sateg 13:2742c45bc9bc 136
Sateg 13:2742c45bc9bc 137
Sateg 13:2742c45bc9bc 138 /** invert the screen
Sateg 13:2742c45bc9bc 139 *
Sateg 13:2742c45bc9bc 140 * @param o = 0 normal, 1 invert
Sateg 13:2742c45bc9bc 141 */
Sateg 13:2742c45bc9bc 142 void invert(unsigned int o);
Sateg 13:2742c45bc9bc 143
Sateg 13:2742c45bc9bc 144 /** clear the screen
Sateg 13:2742c45bc9bc 145 *
Sateg 13:2742c45bc9bc 146 */
Sateg 13:2742c45bc9bc 147 virtual void cls(void);
Sateg 13:2742c45bc9bc 148
Sateg 13:2742c45bc9bc 149 /** set the drawing mode
Sateg 13:2742c45bc9bc 150 *
Sateg 13:2742c45bc9bc 151 * @param mode NORMAl or XOR
Sateg 13:2742c45bc9bc 152 */
Sateg 13:2742c45bc9bc 153 void setmode(int mode);
Sateg 13:2742c45bc9bc 154
Sateg 13:2742c45bc9bc 155 virtual int columns(void);
Sateg 13:2742c45bc9bc 156
Sateg 13:2742c45bc9bc 157 /** calculate the max number of columns
Sateg 13:2742c45bc9bc 158 *
Sateg 13:2742c45bc9bc 159 * @returns max column
Sateg 13:2742c45bc9bc 160 * depends on actual font size
Sateg 13:2742c45bc9bc 161 *
Sateg 13:2742c45bc9bc 162 */
Sateg 13:2742c45bc9bc 163 virtual int rows(void);
Sateg 13:2742c45bc9bc 164
Sateg 13:2742c45bc9bc 165 /** put a char on the screen
Sateg 13:2742c45bc9bc 166 *
Sateg 13:2742c45bc9bc 167 * @param value char to print
Sateg 13:2742c45bc9bc 168 * @returns printed char
Sateg 13:2742c45bc9bc 169 *
Sateg 13:2742c45bc9bc 170 */
Sateg 13:2742c45bc9bc 171 virtual int _putc(int value);
Sateg 13:2742c45bc9bc 172
Sateg 13:2742c45bc9bc 173 /** draw a character on given position out of the active font to the LCD
Sateg 13:2742c45bc9bc 174 *
Sateg 13:2742c45bc9bc 175 * @param x x-position of char (top left)
Sateg 13:2742c45bc9bc 176 * @param y y-position
Sateg 13:2742c45bc9bc 177 * @param c char to print
Sateg 13:2742c45bc9bc 178 *
Sateg 13:2742c45bc9bc 179 */
Sateg 13:2742c45bc9bc 180 virtual void character(int x, int y, int c);
Sateg 13:2742c45bc9bc 181
Sateg 13:2742c45bc9bc 182 /** setup cursor position
Sateg 13:2742c45bc9bc 183 *
Sateg 13:2742c45bc9bc 184 * @param x x-position (top left)
Sateg 13:2742c45bc9bc 185 * @param y y-position
Sateg 13:2742c45bc9bc 186 */
Sateg 13:2742c45bc9bc 187 virtual void locate(int x, int y);
Sateg 13:2742c45bc9bc 188
Sateg 13:2742c45bc9bc 189 /** setup auto update of screen
Sateg 13:2742c45bc9bc 190 *
Sateg 13:2742c45bc9bc 191 * @param up 1 = on , 0 = off
Sateg 13:2742c45bc9bc 192 * if switched off the program has to call copy_to_lcd()
Sateg 13:2742c45bc9bc 193 * to update screen from framebuffer
Sateg 13:2742c45bc9bc 194 */
Sateg 13:2742c45bc9bc 195 void set_auto_up(unsigned int up);
Sateg 13:2742c45bc9bc 196
Sateg 13:2742c45bc9bc 197 /** get status of the auto update function
Sateg 13:2742c45bc9bc 198 *
Sateg 13:2742c45bc9bc 199 * @returns if auto update is on
Sateg 13:2742c45bc9bc 200 */
Sateg 13:2742c45bc9bc 201 unsigned int get_auto_up(void);
Sateg 13:2742c45bc9bc 202
Sateg 13:2742c45bc9bc 203 /** Vars */
Sateg 13:2742c45bc9bc 204 SPI _spi;
Sateg 13:2742c45bc9bc 205 DigitalOut _reset;
Sateg 13:2742c45bc9bc 206 DigitalOut _A0;
Sateg 13:2742c45bc9bc 207 DigitalOut _CS;
Sateg 13:2742c45bc9bc 208 unsigned char* font;
Sateg 13:2742c45bc9bc 209 unsigned int draw_mode;
Sateg 13:2742c45bc9bc 210
Sateg 13:2742c45bc9bc 211
Sateg 13:2742c45bc9bc 212 /** select the font to use
Sateg 13:2742c45bc9bc 213 *
Sateg 13:2742c45bc9bc 214 * @param f pointer to font array
Sateg 13:2742c45bc9bc 215 *
Sateg 13:2742c45bc9bc 216 * font array can created with GLCD Font Creator from http://www.mikroe.com
Sateg 13:2742c45bc9bc 217 * you have to add 4 parameter at the beginning of the font array to use:
Sateg 13:2742c45bc9bc 218 * - the number of byte / char
Sateg 13:2742c45bc9bc 219 * - the vertial size in pixel
Sateg 13:2742c45bc9bc 220 * - the horizontal size in pixel
Sateg 13:2742c45bc9bc 221 * - the number of byte per vertical line
Sateg 13:2742c45bc9bc 222 * you also have to change the array to char[]
Sateg 13:2742c45bc9bc 223 *
Sateg 13:2742c45bc9bc 224 */
Sateg 13:2742c45bc9bc 225 void set_font(unsigned char* f);
Sateg 13:2742c45bc9bc 226
Sateg 13:2742c45bc9bc 227 /** print bitmap to buffer
Sateg 13:2742c45bc9bc 228 *
Sateg 13:2742c45bc9bc 229 * @param bm Bitmap in flash
Sateg 13:2742c45bc9bc 230 * @param x x start
Sateg 13:2742c45bc9bc 231 * @param y y start
Sateg 13:2742c45bc9bc 232 *
Sateg 13:2742c45bc9bc 233 */
Sateg 13:2742c45bc9bc 234
Sateg 13:2742c45bc9bc 235 void print_bm(Bitmap bm, int x, int y);
Sateg 13:2742c45bc9bc 236
Sateg 13:2742c45bc9bc 237 protected:
Sateg 13:2742c45bc9bc 238
Sateg 13:2742c45bc9bc 239 /** draw a horizontal line
Sateg 13:2742c45bc9bc 240 *
Sateg 13:2742c45bc9bc 241 * @param x0 horizontal start
Sateg 13:2742c45bc9bc 242 * @param x1 horizontal stop
Sateg 13:2742c45bc9bc 243 * @param y vertical position
Sateg 13:2742c45bc9bc 244 * @param ,1 set pixel ,0 erase pixel
Sateg 13:2742c45bc9bc 245 *
Sateg 13:2742c45bc9bc 246 */
Sateg 13:2742c45bc9bc 247 void hline(int x0, int x1, int y, int colour);
Sateg 13:2742c45bc9bc 248
Sateg 13:2742c45bc9bc 249 /** draw a vertical line
Sateg 13:2742c45bc9bc 250 *
Sateg 13:2742c45bc9bc 251 * @param x horizontal position
Sateg 13:2742c45bc9bc 252 * @param y0 vertical start
Sateg 13:2742c45bc9bc 253 * @param y1 vertical stop
Sateg 13:2742c45bc9bc 254 * @param ,1 set pixel ,0 erase pixel
Sateg 13:2742c45bc9bc 255 */
Sateg 13:2742c45bc9bc 256 void vline(int y0, int y1, int x, int colour);
Sateg 13:2742c45bc9bc 257
Sateg 15:2e1423772e77 258 /** Configure LCD registers.
Sateg 15:2e1423772e77 259
Sateg 15:2e1423772e77 260 */
Sateg 15:2e1423772e77 261 void configure();
Sateg 15:2e1423772e77 262
Sateg 13:2742c45bc9bc 263 /** Init the DOGL128 LCD controller
Sateg 13:2742c45bc9bc 264 *
Sateg 13:2742c45bc9bc 265 */
Sateg 13:2742c45bc9bc 266 void lcd_reset();
Sateg 13:2742c45bc9bc 267
Sateg 13:2742c45bc9bc 268 /** Write data to the LCD controller
Sateg 13:2742c45bc9bc 269 *
Sateg 13:2742c45bc9bc 270 * @param dat data written to LCD controller
Sateg 13:2742c45bc9bc 271 *
Sateg 13:2742c45bc9bc 272 */
Sateg 13:2742c45bc9bc 273 void wr_dat(unsigned char value);
Sateg 13:2742c45bc9bc 274
Sateg 13:2742c45bc9bc 275 /** Write a command the LCD controller
Sateg 13:2742c45bc9bc 276 *
Sateg 13:2742c45bc9bc 277 * @param cmd: command to be written
Sateg 13:2742c45bc9bc 278 *
Sateg 13:2742c45bc9bc 279 */
Sateg 13:2742c45bc9bc 280 void wr_cmd(unsigned char value);
Sateg 13:2742c45bc9bc 281
Sateg 13:2742c45bc9bc 282 void wr_cnt(unsigned char cmd);
Sateg 15:2e1423772e77 283
Sateg 15:2e1423772e77 284 /** Write buffer content to provided page.
Sateg 15:2e1423772e77 285
Sateg 15:2e1423772e77 286 @param page_number Page to write to.
Sateg 15:2e1423772e77 287 */
Sateg 16:3b6865c11663 288 void write_to_page(uint8_t page_number);
Sateg 15:2e1423772e77 289
Sateg 16:3b6865c11663 290 /// clear the display buffer
Sateg 16:3b6865c11663 291 void clear_buffer();
Sateg 15:2e1423772e77 292
Sateg 15:2e1423772e77 293 // commands values
Sateg 15:2e1423772e77 294 enum Display {
Sateg 15:2e1423772e77 295 kDisplayOn = 0xAF,
Sateg 15:2e1423772e77 296 kDisplayOff = 0xAE
Sateg 15:2e1423772e77 297 };
Sateg 15:2e1423772e77 298 enum ADCMode {
Sateg 15:2e1423772e77 299 kADCModeNormal = 0xA0,
Sateg 15:2e1423772e77 300 kADCModeReverse = 0xA1
Sateg 15:2e1423772e77 301 };
Sateg 15:2e1423772e77 302 enum DisplayMode {
Sateg 15:2e1423772e77 303 kDisplayModeNormal = 0xA6,
Sateg 15:2e1423772e77 304 kDisplayModeReverse = 0xA7
Sateg 15:2e1423772e77 305 };
Sateg 15:2e1423772e77 306 enum DisplayAllPoints {
Sateg 15:2e1423772e77 307 kDisplayAllPointsOff = 0xA4,
Sateg 15:2e1423772e77 308 kDisplayAllPointsOn = 0xA5
Sateg 15:2e1423772e77 309 };
Sateg 15:2e1423772e77 310 enum LCDBias {
Sateg 15:2e1423772e77 311 kLCDBiasOneNinth = 0xA2,
Sateg 15:2e1423772e77 312 kLCDBiasOneSeventh = 0xA3
Sateg 15:2e1423772e77 313 };
Sateg 15:2e1423772e77 314 enum CommonOutputMode {
Sateg 15:2e1423772e77 315 kCommonOutputModeNormal = 0xC0,
Sateg 15:2e1423772e77 316 kCommonOutputModeReverse = 0xC8
Sateg 15:2e1423772e77 317 };
Sateg 15:2e1423772e77 318 enum StaticIndicator {
Sateg 15:2e1423772e77 319 kStaticIndicatorOff = 0xAC,
Sateg 15:2e1423772e77 320 kStaticIndicatorOn = 0xAD
Sateg 15:2e1423772e77 321 };
Sateg 15:2e1423772e77 322
Sateg 16:3b6865c11663 323 static const uint8_t kPageCount = 8;
Sateg 16:3b6865c11663 324 static const uint8_t kPageSize = 128;
Sateg 15:2e1423772e77 325 static const uint8_t kReset = 0xE2;
Sateg 15:2e1423772e77 326 static const uint8_t kSetContrast = 0x81;
Sateg 16:3b6865c11663 327
Sateg 16:3b6865c11663 328
Sateg 16:3b6865c11663 329
Sateg 16:3b6865c11663 330 unsigned int orientation;
Sateg 16:3b6865c11663 331 unsigned int char_x;
Sateg 16:3b6865c11663 332 unsigned int char_y;
Sateg 16:3b6865c11663 333 unsigned char buffer[kPageSize * kPageCount];
Sateg 16:3b6865c11663 334 unsigned int contrast;
Sateg 16:3b6865c11663 335 unsigned int auto_up;
Sateg 13:2742c45bc9bc 336 };
Sateg 13:2742c45bc9bc 337
Sateg 15:2e1423772e77 338 #endif /* DOGL128_H */