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:
Tue Jul 19 23:20:36 2016 +0000
Revision:
18:672450caf175
Parent:
17:ec5db47782a3
Child:
19:23a26a1668cf
Changed constructor to take pins as parameters.

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