SG12864A

Dependents:   SG12864A_TestProgram

Committer:
shintamainjp
Date:
Tue Oct 12 22:46:37 2010 +0000
Revision:
6:bc2da4c1c5a0
Parent:
5:4d86043f7942
First version.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 5:4d86043f7942 1 /**
shintamainjp 5:4d86043f7942 2 * SG12864A Graphics LCD module driver class (Version 0.0.1)
shintamainjp 5:4d86043f7942 3 *
shintamainjp 5:4d86043f7942 4 * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
shintamainjp 5:4d86043f7942 5 * http://shinta.main.jp/
shintamainjp 5:4d86043f7942 6 *
shintamainjp 5:4d86043f7942 7 * See also ...
shintamainjp 5:4d86043f7942 8 * http://mbed.org/users/shintamainjp/notebook/sg12864asunlike-display-graphics-lcd-driver/
shintamainjp 5:4d86043f7942 9 */
shintamainjp 5:4d86043f7942 10
shintamainjp 5:4d86043f7942 11 #ifndef _SG12864A_H_
shintamainjp 5:4d86043f7942 12 #define _SG12864A_H_
shintamainjp 5:4d86043f7942 13
shintamainjp 5:4d86043f7942 14 #include "mbed.h"
shintamainjp 5:4d86043f7942 15
shintamainjp 5:4d86043f7942 16 /**
shintamainjp 5:4d86043f7942 17 * SG12864A Graphics LCD module driver class.
shintamainjp 5:4d86043f7942 18 */
shintamainjp 5:4d86043f7942 19 class SG12864A {
shintamainjp 5:4d86043f7942 20 public:
shintamainjp 5:4d86043f7942 21
shintamainjp 5:4d86043f7942 22 /**
shintamainjp 5:4d86043f7942 23 * Create.
shintamainjp 5:4d86043f7942 24 *
shintamainjp 5:4d86043f7942 25 * @param di D-/I (H:Instruction, L:Data)
shintamainjp 5:4d86043f7942 26 * @param rw R/W- (H:Read, L:Write)
shintamainjp 5:4d86043f7942 27 * @param en Enable signal
shintamainjp 5:4d86043f7942 28 * @param db0 Data bus line bit-0.
shintamainjp 5:4d86043f7942 29 * @param db1 Data bus line bit-1.
shintamainjp 5:4d86043f7942 30 * @param db2 Data bus line bit-2.
shintamainjp 5:4d86043f7942 31 * @param db3 Data bus line bit-3.
shintamainjp 5:4d86043f7942 32 * @param db4 Data bus line bit-4.
shintamainjp 5:4d86043f7942 33 * @param db5 Data bus line bit-5.
shintamainjp 5:4d86043f7942 34 * @param db6 Data bus line bit-6.
shintamainjp 5:4d86043f7942 35 * @param db7 Data bus line bit-7.
shintamainjp 5:4d86043f7942 36 * @param cs1 Chip select signal for IC1.
shintamainjp 5:4d86043f7942 37 * @param cs2 Chip select signal for IC2.
shintamainjp 5:4d86043f7942 38 * @param res Reset signal.
shintamainjp 5:4d86043f7942 39 */
shintamainjp 5:4d86043f7942 40 SG12864A(
shintamainjp 5:4d86043f7942 41 PinName di,
shintamainjp 5:4d86043f7942 42 PinName rw,
shintamainjp 5:4d86043f7942 43 PinName en,
shintamainjp 5:4d86043f7942 44 PinName db0,
shintamainjp 5:4d86043f7942 45 PinName db1,
shintamainjp 5:4d86043f7942 46 PinName db2,
shintamainjp 5:4d86043f7942 47 PinName db3,
shintamainjp 5:4d86043f7942 48 PinName db4,
shintamainjp 5:4d86043f7942 49 PinName db5,
shintamainjp 5:4d86043f7942 50 PinName db6,
shintamainjp 5:4d86043f7942 51 PinName db7,
shintamainjp 5:4d86043f7942 52 PinName cs1,
shintamainjp 5:4d86043f7942 53 PinName cs2,
shintamainjp 5:4d86043f7942 54 PinName res);
shintamainjp 5:4d86043f7942 55 /**
shintamainjp 5:4d86043f7942 56 * Destroy.
shintamainjp 5:4d86043f7942 57 */
shintamainjp 5:4d86043f7942 58 ~SG12864A();
shintamainjp 5:4d86043f7942 59
shintamainjp 5:4d86043f7942 60 /**
shintamainjp 5:4d86043f7942 61 * Target of a chip.
shintamainjp 5:4d86043f7942 62 */
shintamainjp 5:4d86043f7942 63 enum Target {
shintamainjp 5:4d86043f7942 64 CS1,
shintamainjp 5:4d86043f7942 65 CS2
shintamainjp 5:4d86043f7942 66 };
shintamainjp 5:4d86043f7942 67
shintamainjp 5:4d86043f7942 68 /*
shintamainjp 5:4d86043f7942 69 * =======================================================
shintamainjp 5:4d86043f7942 70 * High Level Interfaces.
shintamainjp 5:4d86043f7942 71 * =======================================================
shintamainjp 5:4d86043f7942 72 */
shintamainjp 5:4d86043f7942 73
shintamainjp 5:4d86043f7942 74 /**
shintamainjp 5:4d86043f7942 75 * Push images from a internal buffer.
shintamainjp 5:4d86043f7942 76 */
shintamainjp 5:4d86043f7942 77 void bufferPush(void);
shintamainjp 5:4d86043f7942 78
shintamainjp 5:4d86043f7942 79 /**
shintamainjp 5:4d86043f7942 80 * Pull images to a internal buffer.
shintamainjp 5:4d86043f7942 81 */
shintamainjp 5:4d86043f7942 82 void bufferPull(void);
shintamainjp 5:4d86043f7942 83
shintamainjp 5:4d86043f7942 84 /**
shintamainjp 5:4d86043f7942 85 * Clear a internal buffer images.
shintamainjp 5:4d86043f7942 86 *
shintamainjp 5:4d86043f7942 87 * @param reverse True if images are reversed.
shintamainjp 5:4d86043f7942 88 */
shintamainjp 5:4d86043f7942 89 void bufferClear(bool reverse = false);
shintamainjp 5:4d86043f7942 90
shintamainjp 5:4d86043f7942 91 /**
shintamainjp 5:4d86043f7942 92 * Draw a line to a internal buffer.
shintamainjp 5:4d86043f7942 93 *
shintamainjp 5:4d86043f7942 94 * @param x1 Starting point at x-axis.
shintamainjp 5:4d86043f7942 95 * @param y1 Starting point at y-axis.
shintamainjp 5:4d86043f7942 96 * @param x2 Ending point at x-axis.
shintamainjp 5:4d86043f7942 97 * @param y2 Ending point at y-axis.
shintamainjp 5:4d86043f7942 98 * @param reverse True if images are reversed.
shintamainjp 5:4d86043f7942 99 */
shintamainjp 5:4d86043f7942 100 void bufferDrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, bool reverse = false);
shintamainjp 5:4d86043f7942 101
shintamainjp 5:4d86043f7942 102 /**
shintamainjp 5:4d86043f7942 103 * Draw a box to a internal buffer.
shintamainjp 5:4d86043f7942 104 *
shintamainjp 5:4d86043f7942 105 * @param x1 Starting point at x-axis.
shintamainjp 5:4d86043f7942 106 * @param y1 Starting point at y-axis.
shintamainjp 5:4d86043f7942 107 * @param x2 Ending point at x-axis.
shintamainjp 5:4d86043f7942 108 * @param y2 Ending point at y-axis.
shintamainjp 5:4d86043f7942 109 * @param reverse True if images are reversed.
shintamainjp 5:4d86043f7942 110 */
shintamainjp 5:4d86043f7942 111 void bufferDrawBox(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, bool reverse = false);
shintamainjp 5:4d86043f7942 112
shintamainjp 5:4d86043f7942 113 /**
shintamainjp 5:4d86043f7942 114 * Fill a box to a internal buffer.
shintamainjp 5:4d86043f7942 115 *
shintamainjp 5:4d86043f7942 116 * @param x1 Starting point at x-axis.
shintamainjp 5:4d86043f7942 117 * @param y1 Starting point at y-axis.
shintamainjp 5:4d86043f7942 118 * @param x2 Ending point at x-axis.
shintamainjp 5:4d86043f7942 119 * @param y2 Ending point at y-axis.
shintamainjp 5:4d86043f7942 120 * @param reverse True if images are reversed.
shintamainjp 5:4d86043f7942 121 */
shintamainjp 5:4d86043f7942 122 void bufferFillBox(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, bool reverse = false);
shintamainjp 5:4d86043f7942 123
shintamainjp 5:4d86043f7942 124 /**
shintamainjp 5:4d86043f7942 125 * Draw a text string to a internal buffer.
shintamainjp 5:4d86043f7942 126 * The font size is 5x7 dots.
shintamainjp 5:4d86043f7942 127 *
shintamainjp 5:4d86043f7942 128 * @param x Starting point at x-axis.
shintamainjp 5:4d86043f7942 129 * @param y Starting point at y-axis.
shintamainjp 5:4d86043f7942 130 * @param str Text string. (NULL terminate.)
shintamainjp 5:4d86043f7942 131 * @param reverse True if images are reversed.
shintamainjp 5:4d86043f7942 132 */
shintamainjp 5:4d86043f7942 133 void bufferDrawString(uint8_t x, uint8_t y, char * str, bool reverse = false);
shintamainjp 5:4d86043f7942 134
shintamainjp 5:4d86043f7942 135 /**
shintamainjp 5:4d86043f7942 136 * Draw a character to a internal buffer.
shintamainjp 5:4d86043f7942 137 * The font size is 5x7 dots.
shintamainjp 5:4d86043f7942 138 *
shintamainjp 5:4d86043f7942 139 * @param x Starting point at x-axis.
shintamainjp 5:4d86043f7942 140 * @param y Starting point at y-axis.
shintamainjp 5:4d86043f7942 141 * @param c A character.
shintamainjp 5:4d86043f7942 142 * @param reverse True if images are reversed.
shintamainjp 5:4d86043f7942 143 */
shintamainjp 5:4d86043f7942 144 void bufferDrawChar(uint8_t x, uint8_t y, char c, bool reverse = false);
shintamainjp 5:4d86043f7942 145
shintamainjp 5:4d86043f7942 146 /**
shintamainjp 5:4d86043f7942 147 * Draw a checkbox to a internal buffer.
shintamainjp 5:4d86043f7942 148 *
shintamainjp 5:4d86043f7942 149 * @param x1 Starting point at x-axis.
shintamainjp 5:4d86043f7942 150 * @param y1 Starting point at y-axis.
shintamainjp 5:4d86043f7942 151 * @param x2 Ending point at x-axis.
shintamainjp 5:4d86043f7942 152 * @param y2 Ending point at y-axis.
shintamainjp 5:4d86043f7942 153 * @param state True if state is checked.
shintamainjp 5:4d86043f7942 154 * @param reverse True if images are reversed.
shintamainjp 5:4d86043f7942 155 */
shintamainjp 5:4d86043f7942 156 void bufferDrawCheckbox(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, bool state, bool reverse = false);
shintamainjp 5:4d86043f7942 157
shintamainjp 5:4d86043f7942 158 /**
shintamainjp 5:4d86043f7942 159 * Draw a progressbar to a internal buffer.
shintamainjp 5:4d86043f7942 160 *
shintamainjp 5:4d86043f7942 161 * @param x1 Starting point at x-axis.
shintamainjp 5:4d86043f7942 162 * @param y1 Starting point at y-axis.
shintamainjp 5:4d86043f7942 163 * @param x2 Ending point at x-axis.
shintamainjp 5:4d86043f7942 164 * @param y2 Ending point at y-axis.
shintamainjp 5:4d86043f7942 165 * @param min Minimum value on a scale.
shintamainjp 5:4d86043f7942 166 * @param max Maximum value on a scale.
shintamainjp 5:4d86043f7942 167 * @param value Current value on a scale.
shintamainjp 5:4d86043f7942 168 * @param reverse True if images are reversed.
shintamainjp 5:4d86043f7942 169 */
shintamainjp 5:4d86043f7942 170 void bufferDrawProgressbar(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, int min, int max, int value, bool reverse = false);
shintamainjp 5:4d86043f7942 171
shintamainjp 5:4d86043f7942 172 /*
shintamainjp 5:4d86043f7942 173 * High Level Interfaces.
shintamainjp 5:4d86043f7942 174 */
shintamainjp 5:4d86043f7942 175
shintamainjp 5:4d86043f7942 176 /**
shintamainjp 5:4d86043f7942 177 * Reset module.
shintamainjp 5:4d86043f7942 178 */
shintamainjp 5:4d86043f7942 179 void reset(void);
shintamainjp 5:4d86043f7942 180
shintamainjp 5:4d86043f7942 181 /**
shintamainjp 5:4d86043f7942 182 * Clear display.
shintamainjp 5:4d86043f7942 183 */
shintamainjp 5:4d86043f7942 184 void clear(void);
shintamainjp 5:4d86043f7942 185
shintamainjp 5:4d86043f7942 186 /*
shintamainjp 5:4d86043f7942 187 * =======================================================
shintamainjp 5:4d86043f7942 188 * Middle Level Interfaces.
shintamainjp 5:4d86043f7942 189 * =======================================================
shintamainjp 5:4d86043f7942 190 */
shintamainjp 5:4d86043f7942 191
shintamainjp 5:4d86043f7942 192 /**
shintamainjp 5:4d86043f7942 193 * Set display ON/OFF.
shintamainjp 5:4d86043f7942 194 *
shintamainjp 5:4d86043f7942 195 * @param t Target.
shintamainjp 5:4d86043f7942 196 * @param on True if the display is ON.
shintamainjp 5:4d86043f7942 197 */
shintamainjp 5:4d86043f7942 198 void setDisplayOnOff(Target t, bool on);
shintamainjp 5:4d86043f7942 199
shintamainjp 5:4d86043f7942 200 /**
shintamainjp 5:4d86043f7942 201 * Set display start line.
shintamainjp 5:4d86043f7942 202 *
shintamainjp 5:4d86043f7942 203 * @param t Target.
shintamainjp 5:4d86043f7942 204 * @param displayStartLine Start line number.
shintamainjp 5:4d86043f7942 205 */
shintamainjp 5:4d86043f7942 206 void setDisplayStartLine(Target t, uint8_t displayStartLine);
shintamainjp 5:4d86043f7942 207
shintamainjp 5:4d86043f7942 208 /**
shintamainjp 5:4d86043f7942 209 * Set page address.
shintamainjp 5:4d86043f7942 210 *
shintamainjp 5:4d86043f7942 211 * @param t Target.
shintamainjp 5:4d86043f7942 212 * @param addr Address.
shintamainjp 5:4d86043f7942 213 */
shintamainjp 5:4d86043f7942 214 void setPageAddress(Target t, uint8_t addr);
shintamainjp 5:4d86043f7942 215
shintamainjp 5:4d86043f7942 216 /**
shintamainjp 5:4d86043f7942 217 * Set column address.
shintamainjp 5:4d86043f7942 218 *
shintamainjp 5:4d86043f7942 219 * @param t Target.
shintamainjp 5:4d86043f7942 220 * @param addr Address.
shintamainjp 5:4d86043f7942 221 */
shintamainjp 5:4d86043f7942 222 void setColumnAddress(Target t, uint8_t addr);
shintamainjp 5:4d86043f7942 223
shintamainjp 5:4d86043f7942 224 /**
shintamainjp 5:4d86043f7942 225 * Read status.
shintamainjp 5:4d86043f7942 226 *
shintamainjp 5:4d86043f7942 227 * @param t Target.
shintamainjp 5:4d86043f7942 228 * @param c Status.
shintamainjp 5:4d86043f7942 229 */
shintamainjp 5:4d86043f7942 230 void readStatus(Target t, uint8_t *c);
shintamainjp 5:4d86043f7942 231
shintamainjp 5:4d86043f7942 232 /**
shintamainjp 5:4d86043f7942 233 * Write data.
shintamainjp 5:4d86043f7942 234 *
shintamainjp 5:4d86043f7942 235 * @param t Target.
shintamainjp 5:4d86043f7942 236 * @param c Status.
shintamainjp 5:4d86043f7942 237 */
shintamainjp 5:4d86043f7942 238 void writeData(Target t, uint8_t c);
shintamainjp 5:4d86043f7942 239
shintamainjp 5:4d86043f7942 240 /**
shintamainjp 5:4d86043f7942 241 * Read data.
shintamainjp 5:4d86043f7942 242 *
shintamainjp 5:4d86043f7942 243 * @param t Target.
shintamainjp 5:4d86043f7942 244 * @param c Status.
shintamainjp 5:4d86043f7942 245 */
shintamainjp 5:4d86043f7942 246 void readData(Target t, uint8_t *c);
shintamainjp 5:4d86043f7942 247
shintamainjp 5:4d86043f7942 248 static const int PIXEL_X = 128;
shintamainjp 5:4d86043f7942 249 static const int PIXEL_Y = 64;
shintamainjp 5:4d86043f7942 250 static const uint8_t FONT_X = 5;
shintamainjp 5:4d86043f7942 251 static const uint8_t FONT_Y = 7;
shintamainjp 5:4d86043f7942 252 private:
shintamainjp 5:4d86043f7942 253 static const int PAGES = 8;
shintamainjp 5:4d86043f7942 254 static const int COLUMNS = 64;
shintamainjp 5:4d86043f7942 255 static const uint16_t FONT_MIN_CODE = 0x20;
shintamainjp 5:4d86043f7942 256 static const uint16_t FONT_MAX_CODE = 0x7F;
shintamainjp 5:4d86043f7942 257 static const uint8_t font5x7_data[];
shintamainjp 5:4d86043f7942 258 uint8_t buffer[PAGES * COLUMNS * 2];
shintamainjp 5:4d86043f7942 259 DigitalOut ioDI;
shintamainjp 5:4d86043f7942 260 DigitalOut ioRW;
shintamainjp 5:4d86043f7942 261 DigitalOut ioEN;
shintamainjp 5:4d86043f7942 262 BusInOut ioDB;
shintamainjp 5:4d86043f7942 263 DigitalOut ioCS1;
shintamainjp 5:4d86043f7942 264 DigitalOut ioCS2;
shintamainjp 5:4d86043f7942 265 DigitalOut ioRES;
shintamainjp 5:4d86043f7942 266
shintamainjp 5:4d86043f7942 267 /**
shintamainjp 5:4d86043f7942 268 * Mode of a write data.
shintamainjp 5:4d86043f7942 269 */
shintamainjp 5:4d86043f7942 270 enum Mode {
shintamainjp 5:4d86043f7942 271 Data,
shintamainjp 5:4d86043f7942 272 Instruction
shintamainjp 5:4d86043f7942 273 };
shintamainjp 5:4d86043f7942 274
shintamainjp 5:4d86043f7942 275 /*
shintamainjp 5:4d86043f7942 276 * =======================================================
shintamainjp 5:4d86043f7942 277 * Low Level Interfaces.
shintamainjp 5:4d86043f7942 278 * =======================================================
shintamainjp 5:4d86043f7942 279 */
shintamainjp 5:4d86043f7942 280
shintamainjp 5:4d86043f7942 281 /**
shintamainjp 5:4d86043f7942 282 * Set I/O direction to read.
shintamainjp 5:4d86043f7942 283 */
shintamainjp 5:4d86043f7942 284 void setDirectionToRead();
shintamainjp 5:4d86043f7942 285
shintamainjp 5:4d86043f7942 286 /**
shintamainjp 5:4d86043f7942 287 * Set I/O direction to write.
shintamainjp 5:4d86043f7942 288 */
shintamainjp 5:4d86043f7942 289 void setDirectionToWrite();
shintamainjp 5:4d86043f7942 290
shintamainjp 5:4d86043f7942 291 /**
shintamainjp 5:4d86043f7942 292 * Write data.
shintamainjp 5:4d86043f7942 293 *
shintamainjp 5:4d86043f7942 294 * @param t Target.
shintamainjp 5:4d86043f7942 295 * @param m Mode.
shintamainjp 5:4d86043f7942 296 * @param c Data.
shintamainjp 5:4d86043f7942 297 */
shintamainjp 5:4d86043f7942 298 void write(Target t, Mode m, uint8_t c);
shintamainjp 5:4d86043f7942 299
shintamainjp 5:4d86043f7942 300 /**
shintamainjp 5:4d86043f7942 301 * Read data.
shintamainjp 5:4d86043f7942 302 *
shintamainjp 5:4d86043f7942 303 * @param t Target.
shintamainjp 5:4d86043f7942 304 * @param m Mode.
shintamainjp 5:4d86043f7942 305 * @param c Data.
shintamainjp 5:4d86043f7942 306 */
shintamainjp 5:4d86043f7942 307 void read(Target t, Mode m, uint8_t *c);
shintamainjp 5:4d86043f7942 308
shintamainjp 5:4d86043f7942 309 /**
shintamainjp 5:4d86043f7942 310 * Reset.
shintamainjp 5:4d86043f7942 311 *
shintamainjp 5:4d86043f7942 312 * @param b True if reset active.
shintamainjp 5:4d86043f7942 313 */
shintamainjp 5:4d86043f7942 314 void reset(bool b);
shintamainjp 5:4d86043f7942 315 };
shintamainjp 5:4d86043f7942 316
shintamainjp 5:4d86043f7942 317 #endif